Whamcloud - gitweb
LU-12017 ldlm: DoM truncate deadlock
[fs/lustre-release.git] / lustre / ldlm / ldlm_lockd.c
index 18221a7..980d225 100644 (file)
@@ -1189,7 +1189,7 @@ int ldlm_glimpse_locks(struct ldlm_resource *res,
        rc = ldlm_run_ast_work(ldlm_res_to_ns(res), gl_work_list,
                               LDLM_WORK_GL_AST);
        if (rc == -ERESTART)
-               ldlm_reprocess_all(res);
+               ldlm_reprocess_all(res, NULL);
 
        RETURN(rc);
 }
@@ -1543,7 +1543,7 @@ retry:
 
                if (!err && !ldlm_is_cbpending(lock) &&
                    dlm_req->lock_desc.l_resource.lr_type != LDLM_FLOCK)
-                       ldlm_reprocess_all(lock->l_resource);
+                       ldlm_reprocess_all(lock->l_resource, lock);
 
                LDLM_LOCK_RELEASE(lock);
        }
@@ -1639,7 +1639,7 @@ int ldlm_handle_convert0(struct ptlrpc_request *req,
                        ldlm_clear_blocking_data(lock);
                        unlock_res_and_lock(lock);
 
-                       ldlm_reprocess_all(lock->l_resource);
+                       ldlm_reprocess_all(lock->l_resource, NULL);
                        rc = ELDLM_OK;
                }
 
@@ -1714,7 +1714,7 @@ int ldlm_request_cancel(struct ptlrpc_request *req,
                 */
                if (res != pres) {
                        if (pres != NULL) {
-                               ldlm_reprocess_all(pres);
+                               ldlm_reprocess_all(pres, NULL);
                                LDLM_RESOURCE_DELREF(pres);
                                ldlm_resource_putref(pres);
                        }
@@ -1742,7 +1742,7 @@ int ldlm_request_cancel(struct ptlrpc_request *req,
                LDLM_LOCK_PUT(lock);
        }
        if (pres != NULL) {
-               ldlm_reprocess_all(pres);
+               ldlm_reprocess_all(pres, NULL);
                LDLM_RESOURCE_DELREF(pres);
                ldlm_resource_putref(pres);
        }
@@ -3344,11 +3344,17 @@ int ldlm_init(void)
                goto out_interval;
 
 #ifdef HAVE_SERVER_SUPPORT
+       ldlm_inodebits_slab = kmem_cache_create("ldlm_ibits_node",
+                                               sizeof(struct ldlm_ibits_node),
+                                               0, SLAB_HWCACHE_ALIGN, NULL);
+       if (ldlm_inodebits_slab == NULL)
+               goto out_interval_tree;
+
        ldlm_glimpse_work_kmem = kmem_cache_create("ldlm_glimpse_work_kmem",
                                        sizeof(struct ldlm_glimpse_work),
                                        0, 0, NULL);
        if (ldlm_glimpse_work_kmem == NULL)
-               goto out_interval_tree;
+               goto out_inodebits;
 #endif
 
 #if LUSTRE_TRACKS_LOCK_EXP_REFS
@@ -3356,6 +3362,8 @@ int ldlm_init(void)
 #endif
        return 0;
 #ifdef HAVE_SERVER_SUPPORT
+out_inodebits:
+       kmem_cache_destroy(ldlm_inodebits_slab);
 out_interval_tree:
        kmem_cache_destroy(ldlm_interval_tree_slab);
 #endif
@@ -3384,6 +3392,7 @@ void ldlm_exit(void)
        kmem_cache_destroy(ldlm_interval_slab);
        kmem_cache_destroy(ldlm_interval_tree_slab);
 #ifdef HAVE_SERVER_SUPPORT
+       kmem_cache_destroy(ldlm_inodebits_slab);
        kmem_cache_destroy(ldlm_glimpse_work_kmem);
 #endif
 }