Whamcloud - gitweb
LU-6304 ldlm: crash on umount in cleanup_resource
[fs/lustre-release.git] / lustre / ldlm / ldlm_resource.c
index 7ed21e3..d8d6db2 100644 (file)
@@ -571,16 +571,6 @@ ldlm_res_hop_get_locked(struct cfs_hash *hs, struct hlist_node *hnode)
         ldlm_resource_getref(res);
 }
 
-static void
-ldlm_res_hop_put_locked(struct cfs_hash *hs, struct hlist_node *hnode)
-{
-        struct ldlm_resource *res;
-
-       res = hlist_entry(hnode, struct ldlm_resource, lr_hash);
-        /* cfs_hash_for_each_nolock is the only chance we call it */
-        ldlm_resource_putref_locked(res);
-}
-
 static void ldlm_res_hop_put(struct cfs_hash *hs, struct hlist_node *hnode)
 {
         struct ldlm_resource *res;
@@ -596,7 +586,6 @@ static struct cfs_hash_ops ldlm_ns_hash_ops = {
         .hs_keycpy      = NULL,
         .hs_object      = ldlm_res_hop_object,
         .hs_get         = ldlm_res_hop_get_locked,
-        .hs_put_locked  = ldlm_res_hop_put_locked,
         .hs_put         = ldlm_res_hop_put
 };
 
@@ -607,7 +596,6 @@ static struct cfs_hash_ops ldlm_ns_fid_hash_ops = {
         .hs_keycpy      = NULL,
         .hs_object      = ldlm_res_hop_object,
         .hs_get         = ldlm_res_hop_get_locked,
-        .hs_put_locked  = ldlm_res_hop_put_locked,
         .hs_put         = ldlm_res_hop_put
 };
 
@@ -1326,40 +1314,6 @@ int ldlm_resource_putref(struct ldlm_resource *res)
 }
 EXPORT_SYMBOL(ldlm_resource_putref);
 
-/* Returns 1 if the resource was freed, 0 if it remains. */
-int ldlm_resource_putref_locked(struct ldlm_resource *res)
-{
-       struct ldlm_namespace *ns = ldlm_res_to_ns(res);
-
-       LASSERT_ATOMIC_GT_LT(&res->lr_refcount, 0, LI_POISON);
-       CDEBUG(D_INFO, "putref res: %p count: %d\n",
-              res, atomic_read(&res->lr_refcount) - 1);
-
-       if (atomic_dec_and_test(&res->lr_refcount)) {
-               struct cfs_hash_bd bd;
-
-               cfs_hash_bd_get(ldlm_res_to_ns(res)->ns_rs_hash,
-                               &res->lr_name, &bd);
-               __ldlm_resource_putref_final(&bd, res);
-               cfs_hash_bd_unlock(ns->ns_rs_hash, &bd, 1);
-               /* NB: ns_rs_hash is created with CFS_HASH_NO_ITEMREF,
-                * so we should never be here while calling cfs_hash_del,
-                * cfs_hash_for_each_nolock is the only case we can get
-                * here, which is safe to release cfs_hash_bd_lock.
-                */
-               if (ns->ns_lvbo && ns->ns_lvbo->lvbo_free)
-                       ns->ns_lvbo->lvbo_free(res);
-               if (res->lr_itree != NULL)
-                       OBD_SLAB_FREE(res->lr_itree, ldlm_interval_tree_slab,
-                                     sizeof(*res->lr_itree) * LCK_MODE_NUM);
-               OBD_SLAB_FREE(res, ldlm_resource_slab, sizeof *res);
-
-               cfs_hash_bd_lock(ns->ns_rs_hash, &bd, 1);
-               return 1;
-       }
-       return 0;
-}
-
 /**
  * Add a lock into a given resource into specified lock list.
  */