From: Trond Myklebust Date: Sat, 14 May 2022 14:27:01 +0000 (-0400) Subject: NFS: fsync() should report filesystem errors over EINTR/ERESTARTSYS X-Git-Tag: v5.19-rc1~85^2~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9641d9bc9b75f11f70646f5c6ee9f5f519a1012e;p=thirdparty%2Flinux.git NFS: fsync() should report filesystem errors over EINTR/ERESTARTSYS If the commit to disk is interrupted, we should still first check for filesystem errors so that we can report them in preference to the error due to the signal. Fixes: 2197e9b06c22 ("NFS: Fix up fsync() when the server rebooted") Signed-off-by: Trond Myklebust Signed-off-by: Anna Schumaker --- diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 150b7fa8f0a73..7c380e5552247 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -204,15 +204,16 @@ static int nfs_file_fsync_commit(struct file *file, int datasync) { struct inode *inode = file_inode(file); - int ret; + int ret, ret2; dprintk("NFS: fsync file(%pD2) datasync %d\n", file, datasync); nfs_inc_stats(inode, NFSIOS_VFSFSYNC); ret = nfs_commit_inode(inode, FLUSH_SYNC); - if (ret < 0) - return ret; - return file_check_and_advance_wb_err(file); + ret2 = file_check_and_advance_wb_err(file); + if (ret2 < 0) + return ret2; + return ret; } int