void *policy)
{
struct mdd_object *mdd_obj = md2mdd_obj(obj);
- LASSERT(mdd_object_exists(mdd_obj));
return dt_object_lock(env, mdd_object_child(mdd_obj), lh,
einfo, policy);
}
}
if (rc == 0) {
/* Finally, we can get attr for child. */
+ if (!mdt_object_exists(child)) {
+ LU_OBJECT_DEBUG(D_INFO, info->mti_env,
+ &child->mot_obj,
+ "remote object doesn't exist.\n");
+ mdt_object_unlock(info, child, lhc, 1);
+ RETURN(-ENOENT);
+ }
+
mdt_set_capainfo(info, 0, mdt_object_fid(child),
BYPASS_CAPA);
rc = mdt_getattr_internal(info, child, 0);
if (IS_ERR(ms))
GOTO(out_unlock_parent, rc = PTR_ERR(ms));
+ if (!mdt_object_exists(ms)) {
+ mdt_object_put(info->mti_env, ms);
+ CDEBUG(D_INFO, "%s: "DFID" does not exist.\n",
+ mdt_obd_name(info->mti_mdt), PFID(rr->rr_fid1));
+ GOTO(out_unlock_parent, rc = -ENOENT);
+ }
+
if (mdt_object_remote(ms)) {
mdt_object_put(info->mti_env, ms);
CERROR("%s: source inode "DFID" on remote MDT from "DFID"\n",