[PATCH] knfsd: lockd: Add nlm_destroy_host
authorOlaf Kirch <okir@suse.de>
Wed, 4 Oct 2006 09:16:00 +0000 (02:16 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 4 Oct 2006 14:55:17 +0000 (07:55 -0700)
This patch moves the host destruction code out of nlm_host_gc into a function
of its own.

Signed-off-by: Olaf Kirch <okir@suse.de>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/lockd/host.c

index 4449ef0..3b55fe5 100644 (file)
@@ -164,6 +164,34 @@ out:
        return host;
 }
 
+/*
+ * Destroy a host
+ */
+static void
+nlm_destroy_host(struct nlm_host *host)
+{
+       struct rpc_clnt *clnt;
+
+       BUG_ON(!list_empty(&host->h_lockowners));
+       BUG_ON(atomic_read(&host->h_count));
+
+       /*
+        * Release NSM handle and unmonitor host.
+        */
+       nsm_unmonitor(host);
+
+       if ((clnt = host->h_rpcclnt) != NULL) {
+               if (atomic_read(&clnt->cl_users)) {
+                       printk(KERN_WARNING
+                               "lockd: active RPC handle\n");
+                       clnt->cl_dead = 1;
+               } else {
+                       rpc_destroy_client(host->h_rpcclnt);
+               }
+       }
+       kfree(host);
+}
+
 struct nlm_host *
 nlm_find_client(void)
 {
@@ -400,7 +428,6 @@ nlm_gc_hosts(void)
        struct hlist_head *chain;
        struct hlist_node *pos, *next;
        struct nlm_host *host;
-       struct rpc_clnt *clnt;
 
        dprintk("lockd: host garbage collection\n");
        for (chain = nlm_hosts; chain < nlm_hosts + NLM_HOST_NRHASH; ++chain) {
@@ -423,21 +450,7 @@ nlm_gc_hosts(void)
                        dprintk("lockd: delete host %s\n", host->h_name);
                        hlist_del_init(&host->h_hash);
 
-                       /*
-                        * Unmonitor unless host was invalidated (i.e. lockd restarted)
-                        */
-                       nsm_unmonitor(host);
-
-                       if ((clnt = host->h_rpcclnt) != NULL) {
-                               if (atomic_read(&clnt->cl_users)) {
-                                       printk(KERN_WARNING
-                                               "lockd: active RPC handle\n");
-                                       clnt->cl_dead = 1;
-                               } else {
-                                       rpc_destroy_client(host->h_rpcclnt);
-                               }
-                       }
-                       kfree(host);
+                       nlm_destroy_host(host);
                        nrhosts--;
                }
        }