xfs: allow setting full range of panic tags
authorDonald Douwsma <ddouwsma@redhat.com>
Wed, 8 Feb 2023 16:59:56 +0000 (08:59 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Fri, 10 Feb 2023 02:36:17 +0000 (18:36 -0800)
xfs will not allow combining other panic masks with
XFS_PTAG_VERIFIER_ERROR.

 # sysctl fs.xfs.panic_mask=511
 sysctl: setting key "fs.xfs.panic_mask": Invalid argument
 fs.xfs.panic_mask = 511

Update to the maximum value that can be set to allow the full range of
masks. Do this using a mask of possible values to prevent this happening
again as suggested by Darrick.

Fixes: d519da41e2b7 ("xfs: Introduce XFS_PTAG_VERIFIER_ERROR panic mask")
Signed-off-by: Donald Douwsma <ddouwsma@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Documentation/admin-guide/xfs.rst
fs/xfs/xfs_error.h
fs/xfs/xfs_globals.c

index 8de008c0c5adacf0bd7c3dffb5fcd77498914fc5..e2561416391c5bd343607a2d1a97211ab1fd8a8f 100644 (file)
@@ -296,7 +296,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: 256)
+  fs.xfs.panic_mask            (Min: 0  Default: 0  Max: 511)
        Causes certain error conditions to call BUG(). Value is a bitmask;
        OR together the tags which represent errors which should cause panics:
 
index dbe6c37dc697514160a886246d8c2f7c968d05a2..0b9c5ba8a5981a5d499d8129cbbfd378906e4a9b 100644 (file)
@@ -75,7 +75,7 @@ extern int xfs_errortag_clearall(struct xfs_mount *mp);
 
 /*
  * XFS panic tags -- allow a call to xfs_alert_tag() be turned into
- *                     a panic by setting xfs_panic_mask in a sysctl.
+ *                     a panic by setting fs.xfs.panic_mask in a sysctl.
  */
 #define                XFS_NO_PTAG                     0u
 #define                XFS_PTAG_IFLUSH                 (1u << 0)
@@ -88,6 +88,16 @@ extern int xfs_errortag_clearall(struct xfs_mount *mp);
 #define                XFS_PTAG_FSBLOCK_ZERO           (1u << 7)
 #define                XFS_PTAG_VERIFIER_ERROR         (1u << 8)
 
+#define                XFS_PTAG_MASK   (XFS_PTAG_IFLUSH | \
+                                XFS_PTAG_LOGRES | \
+                                XFS_PTAG_AILDELETE | \
+                                XFS_PTAG_ERROR_REPORT | \
+                                XFS_PTAG_SHUTDOWN_CORRUPT | \
+                                XFS_PTAG_SHUTDOWN_IOERROR | \
+                                XFS_PTAG_SHUTDOWN_LOGERROR | \
+                                XFS_PTAG_FSBLOCK_ZERO | \
+                                XFS_PTAG_VERIFIER_ERROR)
+
 #define XFS_PTAG_STRINGS \
        { XFS_NO_PTAG,                  "none" }, \
        { XFS_PTAG_IFLUSH,              "iflush" }, \
index 4d0a98f920cad98af20238e9a8b227bd8b1fb179..9edc1f2bc9399eca73414ffa2f6da89db7f59964 100644 (file)
@@ -4,6 +4,7 @@
  * All Rights Reserved.
  */
 #include "xfs.h"
+#include "xfs_error.h"
 
 /*
  * Tunable XFS parameters.  xfs_params is required even when CONFIG_SYSCTL=n,
@@ -15,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,              256     },
+       .panic_mask     = {     0,              0,              XFS_PTAG_MASK},
        .error_level    = {     0,              3,              11      },
        .syncd_timer    = {     1*100,          30*100,         7200*100},
        .stats_clear    = {     0,              0,              1       },