]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: implement the metadata repair ioctl flag
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 28 Jun 2018 20:11:56 +0000 (15:11 -0500)
committerEric Sandeen <sandeen@redhat.com>
Thu, 28 Jun 2018 20:11:56 +0000 (15:11 -0500)
Source kernel commit: 84d42ea6b6269aee7eb3d91a4425a08b8965fd4a

Plumb in the pieces necessary to make the "scrub" subfunction of
the scrub ioctl actually work.  This means that we make the IFLAG_REPAIR
flag to the scrub ioctl actually do something, and we add an errortag
knob so that xfstests can force the kernel to rebuild a metadata
structure even if there's nothing wrong with it.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
io/inject.c
libxfs/xfs_errortag.h
libxfs/xfs_fs.h

index fc3cf25639cc2fc1803bb89fa95cee2f6edb3a1e..c40bd67b8d1da5d7eed7408755eee00004a4fb6b 100644 (file)
@@ -63,6 +63,7 @@ error_tag(char *name)
                { XFS_ERRTAG_LOG_BAD_CRC,               "log_bad_crc" },
                { XFS_ERRTAG_LOG_ITEM_PIN,              "log_item_pin" },
                { XFS_ERRTAG_BUF_LRU_REF,               "buf_lru_ref" },
+               { XFS_ERRTAG_FORCE_SCRUB_REPAIR,        "force_repair" },
                { XFS_ERRTAG_MAX,                       NULL }
        };
        int     count;
index bc1789d951529268a3b8934c88fab5389fc26f8b..d47b9162594508922aa88dc73abe4020ef2b400f 100644 (file)
@@ -65,7 +65,8 @@
 #define XFS_ERRTAG_LOG_BAD_CRC                         29
 #define XFS_ERRTAG_LOG_ITEM_PIN                                30
 #define XFS_ERRTAG_BUF_LRU_REF                         31
-#define XFS_ERRTAG_MAX                                 32
+#define XFS_ERRTAG_FORCE_SCRUB_REPAIR                  32
+#define XFS_ERRTAG_MAX                                 33
 
 /*
  * Random factors for above tags, 1 means always, 2 means 1/2 time, etc.
 #define XFS_RANDOM_LOG_BAD_CRC                         1
 #define XFS_RANDOM_LOG_ITEM_PIN                                1
 #define XFS_RANDOM_BUF_LRU_REF                         2
+#define XFS_RANDOM_FORCE_SCRUB_REPAIR                  1
 
 #endif /* __XFS_ERRORTAG_H_ */
index 86a379f6c13b42c5a058f7a597a0727e18a9918e..b1a192d5af26fbdb4355fe5d73471015ea0fa59a 100644 (file)
@@ -563,13 +563,20 @@ struct xfs_scrub_metadata {
 /* o: Metadata object looked funny but isn't corrupt. */
 #define XFS_SCRUB_OFLAG_WARNING                (1 << 6)
 
+/*
+ * o: IFLAG_REPAIR was set but metadata object did not need fixing or
+ *    optimization and has therefore not been altered.
+ */
+#define XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED (1 << 7)
+
 #define XFS_SCRUB_FLAGS_IN     (XFS_SCRUB_IFLAG_REPAIR)
 #define XFS_SCRUB_FLAGS_OUT    (XFS_SCRUB_OFLAG_CORRUPT | \
                                 XFS_SCRUB_OFLAG_PREEN | \
                                 XFS_SCRUB_OFLAG_XFAIL | \
                                 XFS_SCRUB_OFLAG_XCORRUPT | \
                                 XFS_SCRUB_OFLAG_INCOMPLETE | \
-                                XFS_SCRUB_OFLAG_WARNING)
+                                XFS_SCRUB_OFLAG_WARNING | \
+                                XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED)
 #define XFS_SCRUB_FLAGS_ALL    (XFS_SCRUB_FLAGS_IN | XFS_SCRUB_FLAGS_OUT)
 
 /*