]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.17.12/f2fs-avoid-fsync-failure-caused-by-eagain-in-writepage.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.17.12 / f2fs-avoid-fsync-failure-caused-by-eagain-in-writepage.patch
1 From foo@baz Sat Jul 28 10:14:30 CEST 2018
2 From: Jaegeuk Kim <jaegeuk@kernel.org>
3 Date: Thu, 3 May 2018 23:26:02 -0700
4 Subject: f2fs: avoid fsync() failure caused by EAGAIN in writepage()
5
6 From: Jaegeuk Kim <jaegeuk@kernel.org>
7
8 [ Upstream commit 5b19d284f5195a925dd015a6397bfce184097378 ]
9
10 pageout() in MM traslates EAGAIN, so calls handle_write_error()
11 -> mapping_set_error() -> set_bit(AS_EIO, ...).
12 file_write_and_wait_range() will see EIO error, which is critical
13 to return value of fsync() followed by atomic_write failure to user.
14
15 Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
16 Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
17 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
18 ---
19 fs/f2fs/data.c | 8 +++++++-
20 1 file changed, 7 insertions(+), 1 deletion(-)
21
22 --- a/fs/f2fs/data.c
23 +++ b/fs/f2fs/data.c
24 @@ -1848,7 +1848,13 @@ out:
25
26 redirty_out:
27 redirty_page_for_writepage(wbc, page);
28 - if (!err)
29 + /*
30 + * pageout() in MM traslates EAGAIN, so calls handle_write_error()
31 + * -> mapping_set_error() -> set_bit(AS_EIO, ...).
32 + * file_write_and_wait_range() will see EIO error, which is critical
33 + * to return value of fsync() followed by atomic_write failure to user.
34 + */
35 + if (!err || wbc->for_reclaim)
36 return AOP_WRITEPAGE_ACTIVATE;
37 unlock_page(page);
38 return err;