struct mdt_object *parent= NULL;
struct mdt_object *o;
int rc;
+ int object_locked = 0;
__u64 ibits = 0;
ENTRY;
GOTO(out, rc);
} else if (rc > 0) {
rc = mdt_object_open_lock(info, o, lhc, &ibits);
+ object_locked = 1;
if (rc)
GOTO(out_unlock, rc);
}
GOTO(out_unlock, rc);
out_unlock:
- mdt_object_open_unlock(info, o, lhc, ibits, rc);
+ if (object_locked)
+ mdt_object_open_unlock(info, o, lhc, ibits, rc);
out:
mdt_object_put(env, o);
out_parent_put:
struct mdt_reint_record *rr = &info->mti_rr;
int result, rc;
int created = 0;
+ int object_locked = 0;
__u32 msg_flags;
ENTRY;
/* 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);
+ object_locked = 1;
if (rc != 0)
GOTO(out_child_unlock, result = rc);
else if (create_flags & MDS_OPEN_LOCK)
}
EXIT;
out_child_unlock:
- mdt_object_open_unlock(info, child, lhc, ibits, result);
+ if (object_locked)
+ mdt_object_open_unlock(info, child, lhc, ibits, result);
out_child:
mdt_object_put(info->mti_env, child);
out_parent: