if (flags & MDS_OPEN_RELEASE && !mdt_hsm_release_allow(ma))
GOTO(out, rc = -EPERM);
- rc = mdt_object_open_lock(info, o, lhc, &ibits);
- if (rc)
- GOTO(out_unlock, rc);
+ rc = mdt_check_resent_lock(info, o, lhc);
+ if (rc < 0) {
+ GOTO(out, rc);
+ } else if (rc > 0) {
+ rc = mdt_object_open_lock(info, o, lhc, &ibits);
+ if (rc)
+ GOTO(out_unlock, rc);
+ }
if (ma->ma_valid & MA_PFID) {
parent = mdt_object_find(env, mdt, &ma->ma_pfid);
*/
LASSERT(lhc != NULL);
- if (lustre_handle_is_used(&lhc->mlh_reg_lh)) {
- struct ldlm_lock *lock;
-
- LASSERT(msg_flags & MSG_RESENT);
-
- lock = ldlm_handle2lock(&lhc->mlh_reg_lh);
- if (!lock) {
- CERROR("Invalid lock handle "LPX64"\n",
- lhc->mlh_reg_lh.cookie);
- LBUG();
- }
- LASSERT(fid_res_name_eq(mdt_object_fid(child),
- &lock->l_resource->lr_name));
- LDLM_LOCK_PUT(lock);
- rc = 0;
- } else {
+ rc = mdt_check_resent_lock(info, child, lhc);
+ if (rc < 0) {
+ GOTO(out_child, result = rc);
+ } else if (rc > 0) {
mdt_lock_handle_init(lhc);
mdt_lock_reg_init(lhc, LCK_PR);
}
}
- if (lustre_handle_is_used(&lhc->mlh_reg_lh)) {
+ rc = mdt_check_resent_lock(info, child, lhc);
+ if (rc < 0) {
+ GOTO(out_child, result = rc);
+ } else if (rc == 0) {
/* the open lock might already be gotten in
- * mdt_intent_fixup_resent */
+ * ldlm_handle_enqueue() */
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);