From 734eec47336551ab880b030a442ae20ce129acf8 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 14 Dec 2010 15:05:33 +0000 Subject: [PATCH] --- yaml --- r: 229191 b: refs/heads/master c: 723bb5b5052faba57060a2feb564ced22416b5bc h: refs/heads/master i: 229189: af331bc2558c252193646a0ea26419255475137c 229187: 93d762ee4efe519cfd18858b7c769a05eae1ff6d 229183: b674bad47e71013788375b06affab9d175d2308d v: v3 --- [refs] | 2 +- trunk/fs/lockd/host.c | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index f2711d33ed38..eb00caa8f89c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a7952f4056d4d9c63c70534bcfd4f2c11e487000 +refs/heads/master: 723bb5b5052faba57060a2feb564ced22416b5bc diff --git a/trunk/fs/lockd/host.c b/trunk/fs/lockd/host.c index 1911f34be976..e58e1426d161 100644 --- a/trunk/fs/lockd/host.c +++ b/trunk/fs/lockd/host.c @@ -231,16 +231,21 @@ static struct nlm_host *nlm_lookup_host(struct nlm_lookup_host_info *ni) } /* - * Destroy a host + * Destroy an nlm_host and free associated resources + * + * Caller must hold nlm_host_mutex. */ -static void -nlm_destroy_host(struct nlm_host *host) +static void nlm_destroy_host_locked(struct nlm_host *host) { struct rpc_clnt *clnt; + dprintk("lockd: destroy host %s\n", host->h_name); + BUG_ON(!list_empty(&host->h_lockowners)); BUG_ON(atomic_read(&host->h_count)); + hlist_del_init(&host->h_hash); + nsm_unmonitor(host); nsm_release(host->h_nsmhandle); @@ -248,6 +253,8 @@ nlm_destroy_host(struct nlm_host *host) if (clnt != NULL) rpc_shutdown_client(clnt); kfree(host); + + nrhosts--; } /** @@ -589,11 +596,7 @@ nlm_gc_hosts(void) host->h_inuse, host->h_expires); continue; } - dprintk("lockd: delete host %s\n", host->h_name); - hlist_del_init(&host->h_hash); - - nlm_destroy_host(host); - nrhosts--; + nlm_destroy_host_locked(host); } next_gc = jiffies + NLM_HOST_COLLECT;