From c478288dddf485459115e14c57470c4466740e8d Mon Sep 17 00:00:00 2001 From: Artem Blagodarenko Date: Fri, 25 Jan 2019 19:35:24 +0300 Subject: [PATCH] LU-11882 e2fsck: zero date is not inode badness Lustre FS OST has some precreated objects which have zeroed creation time. e2fsck adds badness points for such inodes. If OST has many precreated objects, e2fsck spends too much time during phase2, because processes each of such inode. Let's allow Lustre FS inode has zeroed time field for precreated objects. Change-Id: I171a0fe741449ca99b29b5af51032a7b4c716344 Cray-bug-id: LUS-6857 Signed-off-by: Artem Blagodarenko Reviewed-on: https://review.whamcloud.com/34113 Tested-by: Jenkins Reviewed-by: Andreas Dilger Reviewed-by: Li Dongyang Tested-by: Maloo --- e2fsck/pass1.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index 4b09d06..f95e55d 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -1340,6 +1340,23 @@ static int quota_inum_is_reserved(ext2_filsys fs, ext2_ino_t ino) return 0; } +/* + * Lustre FS creates special inodes - precreated objects. + * They are zero-sized and have special attributes: + * mode |= S_ISUID | S_ISGID; + * valid |= LA_ATIME | LA_MTIME | LA_CTIME; + * atime = 0; + * mtime = 0; + * ctime = 0; + */ +static int precreated_object(struct ext2_inode *inode) +{ + if (((inode->i_mode & (S_ISUID | S_ISGID)) == (S_ISUID | S_ISGID)) && + inode->i_ctime == 0) + return 1; + return 0; +} + void e2fsck_pass1(e2fsck_t ctx) { int i; @@ -2126,7 +2143,8 @@ void e2fsck_pass1(e2fsck_t ctx) if (EXT4_XTIME_FUTURE(ctx, sb, inode->i_ctime, ctx->time_fudge)) e2fsck_mark_inode_bad(ctx, ino, BADNESS_HIGH); - else if (EXT4_XTIME_ANCIENT(ctx, sb, inode->i_ctime, + else if (!precreated_object(inode) && + EXT4_XTIME_ANCIENT(ctx, sb, inode->i_ctime, ctx->time_fudge)) e2fsck_mark_inode_bad(ctx, ino, BADNESS_HIGH); -- 1.8.3.1