Whamcloud - gitweb
b=15440
authoryury <yury>
Tue, 3 Jun 2008 08:04:50 +0000 (08:04 +0000)
committeryury <yury>
Tue, 3 Jun 2008 08:04:50 +0000 (08:04 +0000)
- missed part of 15440. Do not forget to call ldlm_pool_fini() before removing ns proc dir;

- call ldlm_namespace_unregister() namespace _before_ __ldlm_namespace_free() which is waiting for refc == 0 as ldlm_namespace_unregister() drops refc.

lustre/ldlm/ldlm_resource.c

index a2a7a3b..4974f21 100644 (file)
@@ -553,6 +553,9 @@ void ldlm_namespace_free_prior(struct ldlm_namespace *ns,
                 return;
         }
 
+        /* Remove @ns from list. */
+        ldlm_namespace_unregister(ns, ns->ns_client);
+
         /* Can fail with -EINTR when force == 0 in which case try harder */
         rc = __ldlm_namespace_free(ns, force);
         if (rc != ELDLM_OK) {
@@ -577,8 +580,12 @@ void ldlm_namespace_free_post(struct ldlm_namespace *ns)
                 return;
         }
 
-        /* Remove @ns from list. */
-        ldlm_namespace_unregister(ns, ns->ns_client);
+        /* 
+         * Fini pool _before_ parent proc dir is removed. This is important as
+         * ldlm_pool_fini() removes own proc dir which is child to @dir. Removing
+         * it after @dir may cause oops.
+         */
+        ldlm_pool_fini(&ns->ns_pool);
 #ifdef LPROCFS
         {
                 struct proc_dir_entry *dir;