summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfsd/vfs.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 84e87772c2b8..0867d5319fdb 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -958,8 +958,12 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
958 nfsdstats.io_write += *cnt; 958 nfsdstats.io_write += *cnt;
959 fsnotify_modify(file); 959 fsnotify_modify(file);
960 960
961 if (stable && use_wgather) 961 if (stable && use_wgather) {
962 host_err = wait_for_concurrent_writes(file); 962 host_err = wait_for_concurrent_writes(file);
963 if (host_err < 0)
964 nfsd_reset_boot_verifier(net_generic(SVC_NET(rqstp),
965 nfsd_net_id));
966 }
963 967
964out_nfserr: 968out_nfserr:
965 if (host_err >= 0) { 969 if (host_err >= 0) {
@@ -1063,10 +1067,17 @@ nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp,
1063 if (EX_ISSYNC(fhp->fh_export)) { 1067 if (EX_ISSYNC(fhp->fh_export)) {
1064 int err2 = vfs_fsync_range(nf->nf_file, offset, end, 0); 1068 int err2 = vfs_fsync_range(nf->nf_file, offset, end, 0);
1065 1069
1066 if (err2 != -EINVAL) 1070 switch (err2) {
1067 err = nfserrno(err2); 1071 case 0:
1068 else 1072 break;
1073 case -EINVAL:
1069 err = nfserr_notsupp; 1074 err = nfserr_notsupp;
1075 break;
1076 default:
1077 err = nfserrno(err2);
1078 nfsd_reset_boot_verifier(net_generic(nf->nf_net,
1079 nfsd_net_id));
1080 }
1070 } 1081 }
1071 1082
1072 nfsd_file_put(nf); 1083 nfsd_file_put(nf);