Whamcloud - gitweb
LU-6566 mdt: optimize sub_stripe lock/unlock 79/14679/10
authorwang di <di.wang@intel.com>
Sun, 3 May 2015 18:00:29 +0000 (11:00 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 11 Jun 2015 16:11:11 +0000 (16:11 +0000)
In lod_object_unlock, since it already know the lock
handle, it can release the lock directly, instead of
load and holding the sub-stripe object.

Signed-off-by: wang di <di.wang@intel.com>
Change-Id: Id9267f3619b036ce943a1df6ae163ea49a0fbc25
Reviewed-on: http://review.whamcloud.com/14679
Tested-by: Jenkins
Reviewed-by: Fan Yong <fan.yong@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/lod/lod_object.c

index e7a33af..b1318f6 100644 (file)
@@ -3790,7 +3790,6 @@ static int lod_object_unlock_internal(const struct lu_env *env,
                                      struct ldlm_enqueue_info *einfo,
                                      ldlm_policy_data_t *policy)
 {
-       struct lod_object       *lo = lod_dt_obj(dt);
        struct lod_slave_locks  *slave_locks = einfo->ei_cbdata;
        int                     rc = 0;
        int                     i;
@@ -3800,15 +3799,9 @@ static int lod_object_unlock_internal(const struct lu_env *env,
                RETURN(0);
 
        for (i = 1; i < slave_locks->lsl_lock_count; i++) {
-               if (lustre_handle_is_used(&slave_locks->lsl_handle[i])) {
-                       int     rc1;
-
-                       einfo->ei_cbdata = &slave_locks->lsl_handle[i];
-                       rc1 = dt_object_unlock(env, lo->ldo_stripe[i], einfo,
-                                              policy);
-                       if (rc1 < 0)
-                               rc = rc == 0 ? rc1 : rc;
-               }
+               if (lustre_handle_is_used(&slave_locks->lsl_handle[i]))
+                       ldlm_lock_decref(&slave_locks->lsl_handle[i],
+                                        einfo->ei_mode);
        }
 
        RETURN(rc);
@@ -3838,10 +3831,6 @@ static int lod_object_unlock(const struct lu_env *env, struct dt_object *dt,
        if (!S_ISDIR(dt->do_lu.lo_header->loh_attr))
                RETURN(-ENOTDIR);
 
-       rc = lod_load_striping(env, lo);
-       if (rc != 0)
-               RETURN(rc);
-
        /* Note: for remote lock for single stripe dir, MDT will cancel
         * the lock by lockh directly */
        if (lo->ldo_stripenr <= 1 && dt_object_remote(dt_object_child(dt)))