Commit 1f0a6b3f authored by Trond Myklebust's avatar Trond Myklebust Committed by Anna Schumaker
Browse files

NFSv4: Add support for OPEN4_RESULT_NO_OPEN_STATEID



If the server returns a delegation stateid only, then don't try to set
an open stateid.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: default avatarLance Shelton <lance.shelton@hammerspace.com>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent d2a00cce
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -2035,9 +2035,12 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data)
				data->o_arg.claim,
				&data->o_res.delegation);

	if (!(data->o_res.rflags & NFS4_OPEN_RESULT_NO_OPEN_STATEID)) {
		if (!update_open_stateid(state, &data->o_res.stateid,
					 NULL, data->o_arg.fmode))
			return ERR_PTR(-EAGAIN);
	} else if (!update_open_stateid(state, NULL, NULL, data->o_arg.fmode))
		return ERR_PTR(-EAGAIN);
	refcount_inc(&state->count);

	return state;
@@ -2105,11 +2108,16 @@ _nfs4_opendata_to_nfs4_state(struct nfs4_opendata *data)
				data->o_arg.claim,
				&data->o_res.delegation);

	if (!(data->o_res.rflags & NFS4_OPEN_RESULT_NO_OPEN_STATEID)) {
		if (!update_open_stateid(state, &data->o_res.stateid,
					 NULL, data->o_arg.fmode)) {
			nfs4_put_open_state(state);
			state = ERR_PTR(-EAGAIN);
		}
	} else if (!update_open_stateid(state, NULL, NULL, data->o_arg.fmode)) {
		nfs4_put_open_state(state);
		state = ERR_PTR(-EAGAIN);
	}
out:
	nfs_release_seqid(data->o_arg.seqid);
	return state;