Whamcloud - gitweb
LU-4381 lov: to not hold sub locks at initialization
[fs/lustre-release.git] / lustre / lov / lov_lock.c
index 0cfd297..00d372d 100644 (file)
@@ -356,41 +356,7 @@ static int lov_lock_sub_init(const struct lu_env *env,
                 }
         }
         LASSERT(nr == lck->lls_nr);
-        /*
-         * Then, create sub-locks. Once at least one sub-lock was created,
-         * top-lock can be reached by other threads.
-         */
-        for (i = 0; i < lck->lls_nr; ++i) {
-                struct cl_lock       *sublock;
-                struct lov_lock_link *link;
 
-                if (lck->lls_sub[i].sub_lock == NULL) {
-                        sublock = lov_sublock_alloc(env, io, lck, i, &link);
-                        if (IS_ERR(sublock)) {
-                                result = PTR_ERR(sublock);
-                                break;
-                        }
-                        cl_lock_get_trust(sublock);
-                        cl_lock_mutex_get(env, sublock);
-                        cl_lock_mutex_get(env, parent);
-                        /*
-                         * recheck under mutex that sub-lock wasn't created
-                         * concurrently, and that top-lock is still alive.
-                         */
-                        if (lck->lls_sub[i].sub_lock == NULL &&
-                            parent->cll_state < CLS_FREEING) {
-                                lov_sublock_adopt(env, lck, sublock, i, link);
-                                cl_lock_mutex_put(env, parent);
-                        } else {
-                                OBD_SLAB_FREE_PTR(link, lov_lock_link_kmem);
-                                cl_lock_mutex_put(env, parent);
-                                cl_lock_unhold(env, sublock,
-                                               "lov-parent", parent);
-                        }
-                        cl_lock_mutex_put(env, sublock);
-                        cl_lock_put(env, sublock);
-                }
-        }
         /*
          * Some sub-locks can be missing at this point. This is not a problem,
          * because enqueue will create them anyway. Main duty of this function
@@ -550,7 +516,7 @@ static int lov_lock_enqueue_one(const struct lu_env *env, struct lov_lock *lck,
 static int lov_sublock_fill(const struct lu_env *env, struct cl_lock *parent,
                             struct cl_io *io, struct lov_lock *lck, int idx)
 {
-        struct lov_lock_link *link;
+       struct lov_lock_link *link = NULL;
         struct cl_lock       *sublock;
         int                   result;