In mdt_rename_sanity, it should check whether the object exist
before mdo_is_subdir, otherwise the un-exist object will cause
LBUG in mdd_is_subdir.
Signed-off-by: wang di <di.wang@intel.com>
Change-Id: I862392ca6a758bcf63406b2a8df9306d0c531aa5
Reviewed-on: http://review.whamcloud.com/10340
Tested-by: Jenkins
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Fan Yong <fan.yong@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
LASSERT(fid_is_sane(&dst_fid));
dst = mdt_object_find(info->mti_env, info->mti_mdt, &dst_fid);
if (!IS_ERR(dst)) {
LASSERT(fid_is_sane(&dst_fid));
dst = mdt_object_find(info->mti_env, info->mti_mdt, &dst_fid);
if (!IS_ERR(dst)) {
+ /* XXX: this object might not be protected by LDLM lock
+ * here, (see mdt_rename_parents_lock), but LOHA_EXISTS
+ * will not change once it is being set, but LFSCK might
+ * change this later.(LU-5069) */
+ if (!mdt_object_exists(dst))
+ RETURN(-ESTALE);
+
rc = mdo_is_subdir(info->mti_env,
mdt_object_child(dst), fid,
&dst_fid);
rc = mdo_is_subdir(info->mti_env,
mdt_object_child(dst), fid,
&dst_fid);