}
EXIT;
cleanup:
- mdd_write_unlock(env, mdd_cobj);
+ if (likely(mdd_cobj != NULL))
+ mdd_write_unlock(env, mdd_cobj);
+
if (rc == 0) {
int cl_flags = 0;
rc = mdd_la_get(env, mdd_sobj, so_attr,
mdd_object_capa(env, mdd_sobj));
if (rc != 0)
- GOTO(stop_trans, rc);
+ GOTO(out_unlock, rc);
+
ma->ma_attr = *so_attr;
ma->ma_valid |= MA_INODE;
rc = mdd_finish_unlink(env, mdd_sobj, ma, mdd_pobj, lname, handle);
if (rc != 0)
- GOTO(stop_trans, rc);
+ GOTO(out_unlock, rc);
rc = mdd_attr_set_internal(env, mdd_pobj, p_la, handle, 0);
if (rc != 0)
- GOTO(stop_trans, rc);
+ GOTO(out_unlock, rc);
+out_unlock:
mdd_write_unlock(env, mdd_sobj);
stop_trans:
mdd_write_lock(env, mdd_obj, MOR_TGT_CHILD);
rc = mdd_la_get(env, mdd_obj, attr, BYPASS_CAPA);
- if (rc)
- RETURN(rc);
+ if (rc != 0)
+ GOTO(out, rc);
rc = mdd_open_sanity_check(env, mdd_obj, attr, flags);
- if (rc == 0)
- mdd_obj->mod_count++;
+ if (rc != 0)
+ GOTO(out, rc);
+ mdd_obj->mod_count++;
+ EXIT;
+out:
mdd_write_unlock(env, mdd_obj);
return rc;
}