i=green
i=rread
mdt_finish_open() may return an error, which must result in unlocking
the object and returning it to client
* checked here.
*/
if (lustre_handle_is_used(&lhc->mlh_reg_lh)) {
* checked here.
*/
if (lustre_handle_is_used(&lhc->mlh_reg_lh)) {
+ LASSERTF(rc == 0, "Error occurred but lock handle "
+ "is still in use\n");
rep->lock_policy_res2 = 0;
rc = mdt_intent_lock_replace(info, lockp, NULL, lhc, flags);
RETURN(rc);
rep->lock_policy_res2 = 0;
rc = mdt_intent_lock_replace(info, lockp, NULL, lhc, flags);
RETURN(rc);
mdt_set_disposition(info, rep, DISP_OPEN_LOCK);
rc = mdt_finish_open(info, NULL, o, flags, 0, rep);
mdt_set_disposition(info, rep, DISP_OPEN_LOCK);
rc = mdt_finish_open(info, NULL, o, flags, 0, rep);
- if (!(flags & MDS_OPEN_LOCK))
+ if (!(flags & MDS_OPEN_LOCK) || rc)
mdt_object_unlock(info, o, lhc, 1);
GOTO(out, rc);
mdt_object_unlock(info, o, lhc, 1);
GOTO(out, rc);