Skip to content

Commit 8e5f09a

Browse files
MDEV-27322 Test innodb.doublewrite crashes when using innodb_flush_method=O_DIRECT
- InnoDB fails to write the page0 while trying to attempt recover the page0 from doublewrite buffer and incorrect size is being passed to the os_file_write(). Fix is that InnoDB should proper close the parenthesis for function os_file_write() in deferred_dblwr() and InnoDB should free the newly created tablespace in case of error in deferred_dblwr().
1 parent 3269214 commit 8e5f09a

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

storage/innobase/log/log0recv.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -836,13 +836,16 @@ static struct
836836
space->free_len= flst_get_len(FSP_HEADER_OFFSET + FSP_FREE + page);
837837
fil_node_t *node= UT_LIST_GET_FIRST(space->chain);
838838
if (!space->acquire())
839+
{
840+
free_space:
841+
fil_space_free(it->first, false);
839842
goto next_item;
843+
}
840844
if (os_file_write(IORequestWrite, node->name, node->handle,
841-
page, 0, fil_space_t::physical_size(flags) !=
842-
DB_SUCCESS))
845+
page, 0, fil_space_t::physical_size(flags)) != DB_SUCCESS)
843846
{
844847
space->release();
845-
goto next_item;
848+
goto free_space;
846849
}
847850
space->release();
848851
it->second.space= space;

0 commit comments

Comments
 (0)