xfs: Introduce XFS_PTAG_VERIFIER_ERROR panic mask
authorMarco Benatto <mbenatto@redhat.com>
Fri, 1 Feb 2019 17:12:20 +0000 (09:12 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 12 Feb 2019 00:07:00 +0000 (16:07 -0800)
Currently we have a few PTAGs in place allowing us to transform a filesystem
error in a BUG() call.  However, we don't have a panic tag for corrupt
metadata, so introduce XFS_PTAG_VERIFIER_ERROR so that the administrator can
use the fs.xfs.panic_mask sysctl knob to convert any error detected by buffer
verifiers into a kernel panic.

Signed-off-by: Marco Benatto <mbenatto@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
[darrick: light editing of commit message]
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Documentation/filesystems/xfs.txt
fs/xfs/xfs_error.c
fs/xfs/xfs_error.h
fs/xfs/xfs_globals.c

index 9ccfd1b..a5cbb5e 100644 (file)
@@ -272,7 +272,7 @@ The following sysctls are available for the XFS filesystem:
                XFS_ERRLEVEL_LOW:       1
                XFS_ERRLEVEL_HIGH:      5
 
-  fs.xfs.panic_mask            (Min: 0  Default: 0  Max: 255)
+  fs.xfs.panic_mask            (Min: 0  Default: 0  Max: 256)
        Causes certain error conditions to call BUG(). Value is a bitmask;
        OR together the tags which represent errors which should cause panics:
 
@@ -285,6 +285,7 @@ The following sysctls are available for the XFS filesystem:
                XFS_PTAG_SHUTDOWN_IOERROR       0x00000020
                XFS_PTAG_SHUTDOWN_LOGERROR      0x00000040
                XFS_PTAG_FSBLOCK_ZERO           0x00000080
+               XFS_PTAG_VERIFIER_ERROR         0x00000100
 
        This option is intended for debugging only.
 
index 9866f54..57a8541 100644 (file)
@@ -357,7 +357,8 @@ xfs_buf_verifier_error(
        fa = failaddr ? failaddr : __return_address;
        __xfs_buf_ioerror(bp, error, fa);
 
-       xfs_alert(mp, "Metadata %s detected at %pS, %s block 0x%llx %s",
+       xfs_alert_tag(mp, XFS_PTAG_VERIFIER_ERROR,
+                 "Metadata %s detected at %pS, %s block 0x%llx %s",
                  bp->b_error == -EFSBADCRC ? "CRC error" : "corruption",
                  fa, bp->b_ops->name, bp->b_bn, name);
 
index 246d3e9..602aa7d 100644 (file)
@@ -98,5 +98,6 @@ extern int xfs_errortag_clearall(struct xfs_mount *mp);
 #define                XFS_PTAG_SHUTDOWN_IOERROR       0x00000020
 #define                XFS_PTAG_SHUTDOWN_LOGERROR      0x00000040
 #define                XFS_PTAG_FSBLOCK_ZERO           0x00000080
+#define                XFS_PTAG_VERIFIER_ERROR         0x00000100
 
 #endif /* __XFS_ERROR_H__ */
index 5169e84..d0d3773 100644 (file)
@@ -16,7 +16,7 @@ xfs_param_t xfs_params = {
                          /*    MIN             DFLT            MAX     */
        .sgid_inherit   = {     0,              0,              1       },
        .symlink_mode   = {     0,              0,              1       },
-       .panic_mask     = {     0,              0,              255     },
+       .panic_mask     = {     0,              0,              256     },
        .error_level    = {     0,              3,              11      },
        .syncd_timer    = {     1*100,          30*100,         7200*100},
        .stats_clear    = {     0,              0,              1       },