Commit d519da41 authored by Marco Benatto's avatar Marco Benatto Committed by Darrick J. Wong
Browse files

xfs: Introduce XFS_PTAG_VERIFIER_ERROR panic mask



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: default avatarMarco Benatto <mbenatto@redhat.com>
Reviewed-by: default avatarEric Sandeen <sandeen@redhat.com>
[darrick: light editing of commit message]
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent e88db816
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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.

+2 −1
Original line number Diff line number Diff line
@@ -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);

+1 −0
Original line number Diff line number Diff line
@@ -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__ */
+1 −1
Original line number Diff line number Diff line
@@ -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	},