Messages in this thread Patch in this message | | | From | ChenXiaoSong <> | Subject | [PATCH -next 2/2] nfs: nfs_file_write() check writeback errors correctly | Date | Sat, 5 Mar 2022 20:46:36 +0800 |
| |
If nobody has seen the writeback error yet, then filemap_sample_wb_err() always return 0. Even if there is no new writeback error between filemap_sample_wb_err() and filemap_check_wb_err(), filemap_check_wb_err() will return the old error.
Fix this by using file->f_mapping->wb_err as the old error.
Fixes: ce368536dd61 ("nfs: nfs_file_write() should check for writeback errors") Signed-off-by: ChenXiaoSong <chenxiaosong2@huawei.com> --- fs/nfs/file.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 83d63bce9596..8763f89c176a 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -635,7 +635,7 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) nfs_clear_invalid_mapping(file->f_mapping); - since = filemap_sample_wb_err(file->f_mapping); + since = file->f_mapping->wb_err; nfs_start_io_write(inode); result = generic_write_checks(iocb, from); if (result > 0) { @@ -669,7 +669,7 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) goto out; /* Return error values */ - error = filemap_check_wb_err(file->f_mapping, since); + error = errseq_check(&file->f_mapping->wb_err, since); if (nfs_need_check_write(file, inode, error)) { int err = nfs_wb_all(inode); if (err < 0) -- 2.31.1
| |