nfsd4: introduce nfs4_client.cl_refcount
Currently just initialize the cl_refcount to 1 and decrement in expire_client(), conditionally freeing the client when the refcount reaches 0. To be used later by nfsv4.1 compounds to keep the client from timing out while in use. Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
Родитель
84d38ac9ab
Коммит
46583e2597
|
@ -740,8 +740,9 @@ expire_client(struct nfs4_client *clp)
|
|||
list_del(&clp->cl_strhash);
|
||||
spin_lock(&client_lock);
|
||||
unhash_client_locked(clp);
|
||||
if (atomic_read(&clp->cl_refcount) == 0)
|
||||
free_client(clp);
|
||||
spin_unlock(&client_lock);
|
||||
free_client(clp);
|
||||
}
|
||||
|
||||
static void copy_verf(struct nfs4_client *target, nfs4_verifier *source)
|
||||
|
@ -827,6 +828,7 @@ static struct nfs4_client *create_client(struct xdr_netobj name, char *recdir,
|
|||
}
|
||||
|
||||
memcpy(clp->cl_recdir, recdir, HEXDIR_LEN);
|
||||
atomic_set(&clp->cl_refcount, 0);
|
||||
atomic_set(&clp->cl_cb_set, 0);
|
||||
INIT_LIST_HEAD(&clp->cl_idhash);
|
||||
INIT_LIST_HEAD(&clp->cl_strhash);
|
||||
|
|
|
@ -233,6 +233,8 @@ struct nfs4_client {
|
|||
struct nfsd4_clid_slot cl_cs_slot; /* create_session slot */
|
||||
u32 cl_exchange_flags;
|
||||
struct nfs4_sessionid cl_sessionid;
|
||||
/* number of rpc's in progress over an associated session: */
|
||||
atomic_t cl_refcount;
|
||||
|
||||
/* for nfs41 callbacks */
|
||||
/* We currently support a single back channel with a single slot */
|
||||
|
|
Загрузка…
Ссылка в новой задаче