Whamcloud - gitweb
LU-11882 e2fsck: zero date is not inode badness 13/34113/2
authorArtem Blagodarenko <c17828@cray.com>
Fri, 25 Jan 2019 16:35:24 +0000 (19:35 +0300)
committerAndreas Dilger <adilger@whamcloud.com>
Tue, 28 May 2019 06:25:30 +0000 (06:25 +0000)
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 <c17828@cray.com>
Reviewed-on: https://review.whamcloud.com/34113
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
Tested-by: Maloo <maloo@whamcloud.com>
e2fsck/pass1.c

index 4b09d06..f95e55d 100644 (file)
@@ -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);