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

Commit 991eedb1 authored by Trond Myklebust's avatar Trond Myklebust Committed by Trond Myklebust
Browse files

NFSv4: Only pass the delegation to setattr if we're sending a truncate



Even then it isn't really necessary. The reason why we may not want to
pass in a stateid in other cases is that we cannot use the delegation
credential.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 2f261020
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -3032,7 +3032,6 @@ static int _nfs4_do_setattr(struct inode *inode,
	};
	struct rpc_cred *delegation_cred = NULL;
	unsigned long timestamp = jiffies;
	fmode_t fmode;
	bool truncate;
	int status;

@@ -3040,11 +3039,12 @@ static int _nfs4_do_setattr(struct inode *inode,

	/* Servers should only apply open mode checks for file size changes */
	truncate = (arg->iap->ia_valid & ATTR_SIZE) ? true : false;
	fmode = truncate ? FMODE_WRITE : FMODE_READ;
	if (!truncate)
		goto zero_stateid;

	if (nfs4_copy_delegation_stateid(inode, fmode, &arg->stateid, &delegation_cred)) {
	if (nfs4_copy_delegation_stateid(inode, FMODE_WRITE, &arg->stateid, &delegation_cred)) {
		/* Use that stateid */
	} else if (truncate && ctx != NULL) {
	} else if (ctx != NULL) {
		struct nfs_lock_context *l_ctx;
		if (!nfs4_valid_open_stateid(ctx->state))
			return -EBADF;
@@ -3056,8 +3056,10 @@ static int _nfs4_do_setattr(struct inode *inode,
		nfs_put_lock_context(l_ctx);
		if (status == -EIO)
			return -EBADF;
	} else
	} else {
zero_stateid:
		nfs4_stateid_copy(&arg->stateid, &zero_stateid);
	}
	if (delegation_cred)
		msg.rpc_cred = delegation_cred;