|
@@ -444,27 +444,28 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
|
|
|
|
|
|
iap->ia_valid |= ATTR_CTIME;
|
|
|
|
|
|
- err = nfserr_notsync;
|
|
|
- if (!check_guard || guardtime == inode->i_ctime.tv_sec) {
|
|
|
- host_err = nfsd_break_lease(inode);
|
|
|
- if (host_err)
|
|
|
- goto out_nfserr;
|
|
|
- fh_lock(fhp);
|
|
|
-
|
|
|
- host_err = notify_change(dentry, iap, NULL);
|
|
|
- err = nfserrno(host_err);
|
|
|
- fh_unlock(fhp);
|
|
|
+ if (check_guard && guardtime != inode->i_ctime.tv_sec) {
|
|
|
+ err = nfserr_notsync;
|
|
|
+ goto out_put_write_access;
|
|
|
}
|
|
|
+
|
|
|
+ host_err = nfsd_break_lease(inode);
|
|
|
+ if (host_err)
|
|
|
+ goto out_put_write_access_nfserror;
|
|
|
+
|
|
|
+ fh_lock(fhp);
|
|
|
+ host_err = notify_change(dentry, iap, NULL);
|
|
|
+ fh_unlock(fhp);
|
|
|
+
|
|
|
+out_put_write_access_nfserror:
|
|
|
+ err = nfserrno(host_err);
|
|
|
+out_put_write_access:
|
|
|
if (size_change)
|
|
|
put_write_access(inode);
|
|
|
if (!err)
|
|
|
commit_metadata(fhp);
|
|
|
out:
|
|
|
return err;
|
|
|
-
|
|
|
-out_nfserr:
|
|
|
- err = nfserrno(host_err);
|
|
|
- goto out;
|
|
|
}
|
|
|
|
|
|
#if defined(CONFIG_NFSD_V2_ACL) || \
|