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

Commit 3c13cb5b authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFSv4.1/pnfs: Play safe w.r.t. close() races when return-on-close is set



If we have an OPEN_DOWNGRADE and CLOSE race with one another, we want
to ensure that the layout is forgotten by the client, so that we
start afresh with a new layoutget.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 4ff376fe
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -2661,7 +2661,7 @@ static void nfs4_close_done(struct rpc_task *task, void *data)
	switch (task->tk_status) {
		case 0:
			res_stateid = &calldata->res.stateid;
			if (calldata->arg.fmode == 0 && calldata->roc)
			if (calldata->roc)
				pnfs_roc_set_barrier(state->inode,
						     calldata->roc_barrier);
			renew_lease(server, calldata->timestamp);
@@ -2735,11 +2735,11 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
		goto out_no_action;
	}

	if (calldata->arg.fmode == 0) {
	if (calldata->arg.fmode == 0)
		task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE];
	if (calldata->roc)
		pnfs_roc_get_barrier(inode, &calldata->roc_barrier);
	}

	calldata->arg.share_access =
		nfs4_map_atomic_open_share(NFS_SERVER(inode),
				calldata->arg.fmode, 0);