From a6d427ef428ca0e33bde714f04e1e41a5566b23a Mon Sep 17 00:00:00 2001 From: Fan Yong Date: Wed, 13 Apr 2016 16:45:52 +0800 Subject: [PATCH] LU-8083 lfsck: repair symbol file nlink properly Miss to check symbolic link case in lfsck_namespace_repair_nlink. Signed-off-by: Fan Yong Change-Id: I420d558803672100292990f1ff4888c03888c39a Reviewed-on: http://review.whamcloud.com/19874 Tested-by: Jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Alex Zhuravlev Reviewed-by: Oleg Drokin --- lustre/lfsck/lfsck_namespace.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c index 84872cf..b808fdf 100644 --- a/lustre/lfsck/lfsck_namespace.c +++ b/lustre/lfsck/lfsck_namespace.c @@ -2871,7 +2871,6 @@ static int lfsck_namespace_repair_nlink(const struct lu_env *env, ENTRY; LASSERT(!dt_object_remote(obj)); - LASSERT(S_ISREG(lfsck_object_type(obj))); rc = lfsck_ibits_lock(env, lfsck, obj, &lh, MDS_INODELOCK_UPDATE, LCK_PW); @@ -3546,10 +3545,23 @@ out: return rc; if (la->la_nlink != 0 && la->la_nlink != count) { - rc = lfsck_namespace_repair_nlink(env, com, child, la); - if (rc > 0) { - ns->ln_objs_nlink_repaired++; - rc = 0; + if (unlikely(!S_ISREG(lfsck_object_type(child)) && + !S_ISLNK(lfsck_object_type(child)))) { + CDEBUG(D_LFSCK, "%s: namespace LFSCK finds " + "the object "DFID"'s nlink count %d " + "does not match linkEA count %d, " + "type %o, skip it.\n", + lfsck_lfsck2name(lfsck), + PFID(lfsck_dto2fid(child)), + la->la_nlink, count, + lfsck_object_type(child)); + } else { + rc = lfsck_namespace_repair_nlink(env, com, + child, la); + if (rc > 0) { + ns->ln_objs_nlink_repaired++; + rc = 0; + } } } } -- 1.8.3.1