io_u: get io_u from io_u_freelist when TD_FSYNCING
authorJonghwi Jeong <jongh2.jeong@samsung.com>
Thu, 3 Jul 2025 06:41:09 +0000 (15:41 +0900)
committerJonghwi Jeong <jongh2.jeong@samsung.com>
Mon, 14 Jul 2025 00:44:03 +0000 (09:44 +0900)
commit1c83ed15d57b324ddafdcd97e2c02c4ea2da20f5
tree64c2826ef21bdd3046bf938fa0baf7a3b87d8089
parenteb0312ccc1058334e0a115b6534056bcdba7c533
io_u: get io_u from io_u_freelist when TD_FSYNCING

As Commit 813445e71292 ('backend: clean up requeued io_u's') has been
applied, backend cleans up the remained io_u's in td->io_u_requeues.
However, with end_fsync=1, the __get_io_u() function returns an io_u
from td->io_u_requeues if any io_u exist, and pops it. This leads that
the synced io_u will not put file which it got, and, finally, cannot
close the file.

This patch returns io_u from td->io_u_free_list when td->runstate is
TD_FSYNCING, so that the io_u's in td->io_u_requeues will be cleaned up
and leads to close file appropriately.

Signed-off-by: Jonghwi Jeong <jongh2.jeong@samsung.com>
io_u.c