mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
nfsd: drop dead COPY-vs-COPYNOTIFY type handling from s2s stateid IDR
Now that the COPY offload stateid is a first-class nfs4_stid,
nn->s2s_cp_stateids holds COPY_NOTIFY stateids exclusively (its only
inserter, nfs4_init_cp_state(), runs only from
nfs4_alloc_init_cpntf_state()). The type-distinguishing machinery is dead:
- remove the unreferenced NFS4_COPY_STID definition;
- drop nfs4_init_cp_state()'s cs_type argument (hardcode
NFS4_COPYNOTIFY_STID) and its now-always-true "if (p_stid)" guard;
- remove the cs_type == NFS4_COPYNOTIFY_STID gates in
manage_cpntf_state() and the laundromat, which can no longer be false.
copy_stateid_t.cs_type is retained for the WARN_ON_ONCE() sanity checks on
the free paths. No functional change.
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Link: https://patch.msgid.link/20260710-nfsd-testing-v3-10-a0ff7db6aa3e@kernel.org
Signed-off-by: Chuck Lever <cel@kernel.org>
This commit is contained in:
parent
80c3761834
commit
d6edc2a725
|
|
@ -979,10 +979,11 @@ struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl, struct kmem_cache *sla
|
|||
}
|
||||
|
||||
/*
|
||||
* Create a unique stateid_t to represent each COPY.
|
||||
* Publish a COPY_NOTIFY stateid in nn->s2s_cp_stateids and link it onto the
|
||||
* parent's sc_cp_list. That IDR holds only COPY_NOTIFY stateids.
|
||||
*/
|
||||
static int nfs4_init_cp_state(struct nfsd_net *nn, copy_stateid_t *stid,
|
||||
unsigned char cs_type, struct nfs4_stid *p_stid)
|
||||
struct nfs4_stid *p_stid)
|
||||
{
|
||||
int new_id;
|
||||
|
||||
|
|
@ -993,6 +994,9 @@ static int nfs4_init_cp_state(struct nfsd_net *nn, copy_stateid_t *stid,
|
|||
spin_lock(&nn->s2s_cp_lock);
|
||||
new_id = idr_alloc_cyclic(&nn->s2s_cp_stateids, stid, 0, 0, GFP_NOWAIT);
|
||||
if (new_id >= 0) {
|
||||
struct nfs4_cpntf_state *cps =
|
||||
container_of(stid, struct nfs4_cpntf_state, cp_stateid);
|
||||
|
||||
stid->cs_stid.si_opaque.so_id = new_id;
|
||||
stid->cs_stid.si_generation = 1;
|
||||
/*
|
||||
|
|
@ -1001,14 +1005,8 @@ static int nfs4_init_cp_state(struct nfsd_net *nn, copy_stateid_t *stid,
|
|||
* manage_cpntf_state() sees either no entry or a fully
|
||||
* linked cp_list.
|
||||
*/
|
||||
stid->cs_type = cs_type;
|
||||
if (p_stid) {
|
||||
struct nfs4_cpntf_state *cps =
|
||||
container_of(stid, struct nfs4_cpntf_state,
|
||||
cp_stateid);
|
||||
|
||||
list_add(&cps->cp_list, &p_stid->sc_cp_list);
|
||||
}
|
||||
stid->cs_type = NFS4_COPYNOTIFY_STID;
|
||||
list_add(&cps->cp_list, &p_stid->sc_cp_list);
|
||||
}
|
||||
spin_unlock(&nn->s2s_cp_lock);
|
||||
idr_preload_end();
|
||||
|
|
@ -1068,8 +1066,7 @@ struct nfs4_cpntf_state *nfs4_alloc_init_cpntf_state(struct nfsd_net *nn,
|
|||
memcpy(&cps->cp_p_clid, &p_stid->sc_client->cl_clientid,
|
||||
sizeof(clientid_t));
|
||||
refcount_set(&cps->cp_stateid.cs_count, 2);
|
||||
if (!nfs4_init_cp_state(nn, &cps->cp_stateid, NFS4_COPYNOTIFY_STID,
|
||||
p_stid))
|
||||
if (!nfs4_init_cp_state(nn, &cps->cp_stateid, p_stid))
|
||||
goto out_free;
|
||||
return cps;
|
||||
out_free:
|
||||
|
|
@ -7635,10 +7632,10 @@ nfs4_laundromat(struct nfsd_net *nn)
|
|||
nfsd4_end_grace(nn);
|
||||
|
||||
spin_lock(&nn->s2s_cp_lock);
|
||||
/* s2s_cp_stateids holds only COPY_NOTIFY stateids */
|
||||
idr_for_each_entry(&nn->s2s_cp_stateids, cps_t, i) {
|
||||
cps = container_of(cps_t, struct nfs4_cpntf_state, cp_stateid);
|
||||
if (cps->cp_stateid.cs_type == NFS4_COPYNOTIFY_STID &&
|
||||
state_expired(<, cps->cpntf_time))
|
||||
if (state_expired(<, cps->cpntf_time))
|
||||
revoke_cpntf_state_locked(nn, cps);
|
||||
}
|
||||
spin_unlock(&nn->s2s_cp_lock);
|
||||
|
|
@ -8076,14 +8073,11 @@ __be32 manage_cpntf_state(struct nfsd_net *nn, stateid_t *st,
|
|||
if (st->si_opaque.so_clid.cl_id != nn->s2s_cp_cl_id)
|
||||
return nfserr_bad_stateid;
|
||||
spin_lock(&nn->s2s_cp_lock);
|
||||
/* s2s_cp_stateids holds only COPY_NOTIFY stateids */
|
||||
cps_t = idr_find(&nn->s2s_cp_stateids, st->si_opaque.so_id);
|
||||
if (cps_t) {
|
||||
state = container_of(cps_t, struct nfs4_cpntf_state,
|
||||
cp_stateid);
|
||||
if (state->cp_stateid.cs_type != NFS4_COPYNOTIFY_STID) {
|
||||
state = NULL;
|
||||
goto unlock;
|
||||
}
|
||||
if (!clp) {
|
||||
refcount_inc(&state->cp_stateid.cs_count);
|
||||
} else if (memcmp(&clp->cl_clientid, &state->cp_p_clid,
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ typedef struct {
|
|||
|
||||
typedef struct {
|
||||
stateid_t cs_stid;
|
||||
#define NFS4_COPY_STID 1
|
||||
#define NFS4_COPYNOTIFY_STID 2
|
||||
unsigned char cs_type;
|
||||
refcount_t cs_count;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user