diff options
| author | Neil Brown <neilb@cse.unsw.edu.au> | 2005-01-04 05:48:20 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-01-04 05:48:20 -0800 |
| commit | 83107cd7f181f40b0314937238eb633b59061466 (patch) | |
| tree | 06a2bc690d45f272559a5b775ff3027cd52dafb9 /include/linux | |
| parent | fb6f151075c112daf30a2dcccd91999bff5dd034 (diff) | |
[PATCH] knfsd: count the nfs4_client structure usage
... to protect the null (probe) callback asynchronous rpc's reference.
Atomically inc and set the cb_set flag.
Signed-off-by: Andy Adamson <andros@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/nfsd/state.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h index c20635cc99a3..7491650f60c7 100644 --- a/include/linux/nfsd/state.h +++ b/include/linux/nfsd/state.h @@ -76,7 +76,7 @@ struct nfs4_callback { u32 cb_prog; u32 cb_ident; /* RPC client info */ - u32 cb_set; /* successful CB_NULL call */ + atomic_t cb_set; /* successful CB_NULL call */ struct rpc_program cb_program; struct rpc_stat cb_stat; struct rpc_clnt * cb_client; @@ -106,6 +106,7 @@ struct nfs4_client { nfs4_verifier cl_confirm; /* generated by server */ struct nfs4_callback cl_callback; /* callback info */ time_t cl_first_state; /* first state aquisition*/ + atomic_t cl_count; /* ref count */ }; /* struct nfs4_client_reset @@ -250,6 +251,7 @@ extern void nfs4_lock_state(void); extern void nfs4_unlock_state(void); extern int nfs4_in_grace(void); extern int nfs4_check_open_reclaim(clientid_t *clid); +extern void put_nfs4_client(struct nfs4_client *clp); extern void nfs4_free_stateowner(struct kref *kref); static inline void |
