aboutsummaryrefslogtreecommitdiffstats
path: root/fs/lockd/clntproc.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2008-04-01 18:58:49 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2008-04-19 16:53:36 -0400
commit5e7f37a76fa5b604949020b7317962262812b2dd (patch)
treeceb12f296c0d19374993ac33f306180c1f8dc23a /fs/lockd/clntproc.c
parent536ff0f809b0f4d56e1c41e66768d330668e0a55 (diff)
NLM/lockd: Add a reference counter to struct nlm_rqst
When we replace the existing synchronous RPC calls with asynchronous calls, the reference count will be needed in order to allow us to examine the result of the RPC call. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/lockd/clntproc.c')
-rw-r--r--fs/lockd/clntproc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
index 4e1c0123b45d..749eb5328cb0 100644
--- a/fs/lockd/clntproc.c
+++ b/fs/lockd/clntproc.c
@@ -221,6 +221,7 @@ struct nlm_rqst *nlm_alloc_call(struct nlm_host *host)
221 for(;;) { 221 for(;;) {
222 call = kzalloc(sizeof(*call), GFP_KERNEL); 222 call = kzalloc(sizeof(*call), GFP_KERNEL);
223 if (call != NULL) { 223 if (call != NULL) {
224 atomic_set(&call->a_count, 1);
224 locks_init_lock(&call->a_args.lock.fl); 225 locks_init_lock(&call->a_args.lock.fl);
225 locks_init_lock(&call->a_res.lock.fl); 226 locks_init_lock(&call->a_res.lock.fl);
226 call->a_host = host; 227 call->a_host = host;
@@ -237,6 +238,8 @@ struct nlm_rqst *nlm_alloc_call(struct nlm_host *host)
237 238
238void nlm_release_call(struct nlm_rqst *call) 239void nlm_release_call(struct nlm_rqst *call)
239{ 240{
241 if (!atomic_dec_and_test(&call->a_count))
242 return;
240 nlm_release_host(call->a_host); 243 nlm_release_host(call->a_host);
241 nlmclnt_release_lockargs(call); 244 nlmclnt_release_lockargs(call);
242 kfree(call); 245 kfree(call);