Whamcloud - gitweb
LU-4179 mdt: skip open lock enqueue during resent 42/8142/5
authorwang di <di.wang@intel.com>
Fri, 1 Nov 2013 07:00:11 +0000 (00:00 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 14 Nov 2013 01:34:58 +0000 (01:34 +0000)
Skip open lock enqueue, if the open lock has been
acquired(mdt_intent_fixup_resent) during resent.

Signed-off-by: wang di <di.wang@intel.com>
Signed-off-by: Keith Mannthey <keith.mannthey@intel.com>
Change-Id: I78228112b0ba8f93e05930fdd042763d77700626
Reviewed-on: http://review.whamcloud.com/8142
Tested-by: Jenkins
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/mdt/mdt_open.c

index 27e8fd8..bc3f42d 100644 (file)
@@ -1819,17 +1819,23 @@ int mdt_reint_open(struct mdt_thread_info *info, struct mdt_lock_handle *lhc)
                }
         }
 
-        LASSERT(!lustre_handle_is_used(&lhc->mlh_reg_lh));
-
-       /* get openlock if this is not replay and if a client requested it */
-       if (!req_is_replay(req)) {
-               rc = mdt_object_open_lock(info, child, lhc, &ibits);
-               if (rc != 0)
-                       GOTO(out_child_unlock, result = rc);
-               else if (create_flags & MDS_OPEN_LOCK)
+       if (lustre_handle_is_used(&lhc->mlh_reg_lh)) {
+               /* the open lock might already be gotten in
+                * mdt_intent_fixup_resent */
+               LASSERT(lustre_msg_get_flags(req->rq_reqmsg) & MSG_RESENT);
+               if (create_flags & MDS_OPEN_LOCK)
                        mdt_set_disposition(info, ldlm_rep, DISP_OPEN_LOCK);
+       } else {
+               /* get openlock if this isn't replay and client requested it */
+               if (!req_is_replay(req)) {
+                       rc = mdt_object_open_lock(info, child, lhc, &ibits);
+                       if (rc != 0)
+                               GOTO(out_child_unlock, result = rc);
+                       else if (create_flags & MDS_OPEN_LOCK)
+                               mdt_set_disposition(info, ldlm_rep,
+                                                   DISP_OPEN_LOCK);
+               }
        }
-
        /* Try to open it now. */
        rc = mdt_finish_open(info, parent, child, create_flags,
                             created, ldlm_rep);