if (mdt_object_exists(obj) && !mdt_object_remote(obj)) {
/* get the length of lsm */
rc = mdt_attr_get_eabuf_size(info, obj);
- if (rc < 0)
+ if (rc < 0) {
+ mdt_object_put(info->mti_env, obj);
RETURN(rc);
+ }
if (rc > info->mti_mdt->mdt_max_mdsize)
info->mti_mdt->mdt_max_mdsize = rc;
ma->ma_need |= MA_PFID;
}
- o = mdt_object_find(env, mdt, rr->rr_fid2);
- if (IS_ERR(o))
- RETURN(rc = PTR_ERR(o));
+ o = mdt_object_find(env, mdt, rr->rr_fid2);
+ if (IS_ERR(o))
+ GOTO(out_parent_put, rc = PTR_ERR(o));
if (mdt_object_remote(o)) {
CDEBUG(D_INFO, "%s: "DFID" is on remote MDT.\n",
mdt_object_open_unlock(info, o, lhc, ibits, rc);
out:
mdt_object_put(env, o);
+out_parent_put:
if (parent != NULL)
mdt_object_put(env, parent);
return rc;
if (rc == 0)
rc = mdt_attr_get_complex(info, child, ma);
- if (rc == 0) {
- /* Return fid & attr to client. */
- if (ma->ma_valid & MA_INODE)
- mdt_pack_attr2body(info, repbody, &ma->ma_attr,
- mdt_object_fid(child));
- }
+ if (rc == 0) {
+ /* Return fid & attr to client. */
+ if (ma->ma_valid & MA_INODE)
+ mdt_pack_attr2body(info, repbody, &ma->ma_attr,
+ mdt_object_fid(child));
+ }
out_put_child:
- mdt_object_put(info->mti_env, child);
- } else {
- rc = PTR_ERR(child);
- }
- mdt_create_pack_capa(info, rc, child, repbody);
+ mdt_create_pack_capa(info, rc, child, repbody);
+ mdt_object_put(info->mti_env, child);
+ } else {
+ rc = PTR_ERR(child);
+ mdt_create_pack_capa(info, rc, NULL, repbody);
+ }
unlock_parent:
mdt_object_unlock(info, parent, lh, rc);
put_parent: