Commit 11673b2a authored by Sagi Grimberg's avatar Sagi Grimberg Committed by Chuck Lever
Browse files

nfsd: don't assume copy notify when preprocessing the stateid



Move the stateid handling to nfsd4_copy_notify.
If nfs4_preprocess_stateid_op did not produce an output stateid, error out.

Copy notify specifically does not permit the use of special stateids,
so enforce that outside generic stateid pre-processing.

Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Reviewed-by: default avatarOlga Kornievskaia <aglo@umich.edu>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 3391fc92
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1942,7 +1942,7 @@ nfsd4_copy_notify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
	struct nfsd4_copy_notify *cn = &u->copy_notify;
	__be32 status;
	struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
	struct nfs4_stid *stid;
	struct nfs4_stid *stid = NULL;
	struct nfs4_cpntf_state *cps;
	struct nfs4_client *clp = cstate->clp;

@@ -1951,6 +1951,8 @@ nfsd4_copy_notify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
					&stid);
	if (status)
		return status;
	if (!stid)
		return nfserr_bad_stateid;

	cn->cpn_lease_time.tv_sec = nn->nfsd4_lease;
	cn->cpn_lease_time.tv_nsec = 0;
+1 −5
Original line number Diff line number Diff line
@@ -7022,11 +7022,7 @@ nfs4_preprocess_stateid_op(struct svc_rqst *rqstp,
		*nfp = NULL;

	if (ZERO_STATEID(stateid) || ONE_STATEID(stateid)) {
		if (cstid)
			status = nfserr_bad_stateid;
		else
			status = check_special_stateids(net, fhp, stateid,
									flags);
		status = check_special_stateids(net, fhp, stateid, flags);
		goto done;
	}