Whamcloud - gitweb
LU-4796 osd: NOT inject OBD_FAIL_FID_LOOKUP on dotdot 48/9748/3
authorFan Yong <fan.yong@intel.com>
Sat, 8 Mar 2014 15:55:51 +0000 (23:55 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 16 Apr 2014 17:55:22 +0000 (17:55 +0000)
The namespace LFSCK may cannot rebuild the FID-in-dirent for dotdot
entry after the MDT restored from file-level backup, because there
is not enough space in the directory head area.

Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: I06e8a56dc0a6522e12fd0dfd5b513c1dbf0a80f4
Reviewed-on: http://review.whamcloud.com/9748
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/osd-ldiskfs/osd_handler.c

index e0521af..8b2d5b9 100644 (file)
@@ -5360,7 +5360,10 @@ static inline int osd_it_ea_rec(const struct lu_env *env,
        } else {
                attr &= ~LU_DIRENT_ATTRS_MASK;
                if (!fid_is_sane(fid)) {
-                       if (OBD_FAIL_CHECK(OBD_FAIL_FID_LOOKUP))
+                       if (OBD_FAIL_CHECK(OBD_FAIL_FID_LOOKUP) &&
+                           likely(it->oie_dirent->oied_namelen != 2 ||
+                                  it->oie_dirent->oied_name[0] != '.' ||
+                                  it->oie_dirent->oied_name[1] != '.'))
                                RETURN(-ENOENT);
 
                        rc = osd_ea_fid_get(env, obj, ino, fid, id);