f2fs: avoid fsync() failure caused by EAGAIN in writepage()
Jaegeuk Kim
maintainerPATCH 1/1 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.
Signed-off-by Jaegeuk Kim <[email protected]>
--- fs/f2fs/data.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
fs/f2fs/data.c +7 -1
@@ -1904,7 +1904,13 @@ static int __write_data_page(struct page *page, bool *submitted, redirty_out:redirty_page_for_writepage (wbc, page); -if (!err) +/* +* 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. +*/ +if (!err || wbc->for_reclaim)return AOP_WRITEPAGE_ACTIVATE ;unlock_page (page);return err;
Signature · 1 line
2.17.0.484.g0c8726318c-goog