summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
7d19783)
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>
- 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);
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);
/* Try to open it now. */
rc = mdt_finish_open(info, parent, child, create_flags,
created, ldlm_rep);