Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fs: convert __generic_file_fsync to use errseq_t based reporting

Many simple, block-based filesystems use generic_file_fsync as their
fsync operation. Some others (ext* and fat) also call this function
to handle syncing out data.

Switch this code over to use errseq_t based error reporting so that
all of these filesystems get reliable error reporting via fsync,
fdatasync and msync.

Signed-off-by: Jeff Layton <jlayton@redhat.com>

+6 -4
+6 -4
fs/libfs.c
··· 974 974 int err; 975 975 int ret; 976 976 977 - err = filemap_write_and_wait_range(inode->i_mapping, start, end); 977 + err = file_write_and_wait_range(file, start, end); 978 978 if (err) 979 979 return err; 980 980 ··· 991 991 992 992 out: 993 993 inode_unlock(inode); 994 - /* must call this unconditionally as it clears AS_* error flags */ 995 - err = filemap_check_errors(inode->i_mapping); 996 - return ret ? ret : err; 994 + /* check and advance again to catch errors after syncing out buffers */ 995 + err = file_check_and_advance_wb_err(file); 996 + if (ret == 0) 997 + ret = err; 998 + return ret; 997 999 } 998 1000 EXPORT_SYMBOL(__generic_file_fsync); 999 1001