diff options
-rw-r--r-- | fs/nfsd/vfs.c | 19 |
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 | ||
964 | out_nfserr: | 968 | out_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); |