Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a76bebe authored by J. Bruce Fields's avatar J. Bruce Fields
Browse files

nfsd4: break lease on nfsd setattr



Leases (delegations) should really be broken on any metadata change, not
just on size change.

Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 9ce137ee
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -374,14 +374,6 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
				goto out;
		}

		/*
		 * If we are changing the size of the file, then
		 * we need to break all leases.
		 */
		host_err = break_lease(inode, O_WRONLY | O_NONBLOCK);
		if (host_err) /* ENOMEM or EWOULDBLOCK */
			goto out_nfserr;

		host_err = get_write_access(inode);
		if (host_err)
			goto out_nfserr;
@@ -422,7 +414,11 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,

	err = nfserr_notsync;
	if (!check_guard || guardtime == inode->i_ctime.tv_sec) {
		host_err = break_lease(inode, O_WRONLY | O_NONBLOCK);
		if (host_err)
			goto out_nfserr;
		fh_lock(fhp);

		host_err = notify_change(dentry, iap);
		err = nfserrno(host_err);
		fh_unlock(fhp);