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

Commit 0bc2c9b4 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFSv4: Don't discard the attributes returned by asynchronous DELEGRETURN



DELEGRETURN will always carry a reference to the inode except when
the latter is being freed, so let's ensure that we always use that
inode information to ensure close-to-open cache consistency, even
when the DELEGRETURN call is asynchronous.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent e603a4c1
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -5699,6 +5699,7 @@ static void nfs4_delegreturn_release(void *calldata)
		if (data->lr.roc)
			pnfs_roc_release(&data->lr.arg, &data->lr.res,
					data->res.lr_ret);
		nfs_post_op_update_inode_force_wcc(inode, &data->fattr);
		nfs_iput_and_deactive(inode);
	}
	kfree(calldata);
@@ -5787,10 +5788,6 @@ static int _nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, co
	if (status != 0)
		goto out;
	status = data->rpc_status;
	if (status == 0)
		nfs_post_op_update_inode_force_wcc(inode, &data->fattr);
	else
		nfs_refresh_inode(inode, &data->fattr);
out:
	rpc_put_task(task);
	return status;