Skip to content

Commit 4a862dd

Browse files
Jaegeuk Kimpundiramit
authored andcommitted
UPSTREAM: f2fs: avoid fsync() failure caused by EAGAIN in writepage()
pageout() in MM traslates EAGAIN, so calls handle_write_error() -> mapping_set_error() -> set_bit(AS_EIO, ...). file_write_and_wait_range() will see EIO error, which is critical to return value of fsync() followed by atomic_write failure to user. Change-Id: I6124ed299baf5e5b8993bb6b54f07bb8771eda8c Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> (cherry picked from commit 520a948)
1 parent ad402a7 commit 4a862dd

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

fs/f2fs/data.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1902,7 +1902,13 @@ static int __write_data_page(struct page *page, bool *submitted,
19021902

19031903
redirty_out:
19041904
redirty_page_for_writepage(wbc, page);
1905-
if (!err)
1905+
/*
1906+
* pageout() in MM traslates EAGAIN, so calls handle_write_error()
1907+
* -> mapping_set_error() -> set_bit(AS_EIO, ...).
1908+
* file_write_and_wait_range() will see EIO error, which is critical
1909+
* to return value of fsync() followed by atomic_write failure to user.
1910+
*/
1911+
if (!err || wbc->for_reclaim)
19061912
return AOP_WRITEPAGE_ACTIVATE;
19071913
unlock_page(page);
19081914
return err;

0 commit comments

Comments
 (0)