diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-06-24 21:55:26 +0200 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-07-11 05:40:36 +0200 |
commit | 31be5bf15f3dafffce110eb1afadccbf2e3067b4 (patch) | |
tree | 6e680e926d79a1c5fe6a5a726c3f16cb3b86adfa /net/sunrpc/auth_unix.c | |
parent | SUNRPC: cleanup rpc credential cache garbage collection (diff) | |
download | linux-31be5bf15f3dafffce110eb1afadccbf2e3067b4.tar.xz linux-31be5bf15f3dafffce110eb1afadccbf2e3067b4.zip |
SUNRPC: Convert the credcache lookup code to use RCU
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc/auth_unix.c')
-rw-r--r-- | net/sunrpc/auth_unix.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/net/sunrpc/auth_unix.c b/net/sunrpc/auth_unix.c index 29d50ffa69d6..f7ff6ad3259e 100644 --- a/net/sunrpc/auth_unix.c +++ b/net/sunrpc/auth_unix.c @@ -93,11 +93,23 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags) } static void -unx_destroy_cred(struct rpc_cred *rcred) +unx_free_cred(struct unx_cred *unx_cred) { - struct unx_cred *cred = container_of(rcred, struct unx_cred, uc_base); + dprintk("RPC: unx_free_cred %p\n", unx_cred); + kfree(unx_cred); +} + +static void +unx_free_cred_callback(struct rcu_head *head) +{ + struct unx_cred *unx_cred = container_of(head, struct unx_cred, uc_base.cr_rcu); + unx_free_cred(unx_cred); +} - kfree(cred); +static void +unx_destroy_cred(struct rpc_cred *cred) +{ + call_rcu(&cred->cr_rcu, unx_free_cred_callback); } /* |