mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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: 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>
This commit is contained in:
		
							parent
							
								
									e88db81645
								
							
						
					
					
						commit
						d519da41e2
					
				
					 4 changed files with 6 additions and 3 deletions
				
			
		| 
						 | 
					@ -272,7 +272,7 @@ The following sysctls are available for the XFS filesystem:
 | 
				
			||||||
		XFS_ERRLEVEL_LOW:       1
 | 
							XFS_ERRLEVEL_LOW:       1
 | 
				
			||||||
		XFS_ERRLEVEL_HIGH:      5
 | 
							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;
 | 
						Causes certain error conditions to call BUG(). Value is a bitmask;
 | 
				
			||||||
	OR together the tags which represent errors which should cause panics:
 | 
						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_IOERROR       0x00000020
 | 
				
			||||||
		XFS_PTAG_SHUTDOWN_LOGERROR      0x00000040
 | 
							XFS_PTAG_SHUTDOWN_LOGERROR      0x00000040
 | 
				
			||||||
		XFS_PTAG_FSBLOCK_ZERO           0x00000080
 | 
							XFS_PTAG_FSBLOCK_ZERO           0x00000080
 | 
				
			||||||
 | 
							XFS_PTAG_VERIFIER_ERROR         0x00000100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	This option is intended for debugging only.
 | 
						This option is intended for debugging only.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -357,7 +357,8 @@ xfs_buf_verifier_error(
 | 
				
			||||||
	fa = failaddr ? failaddr : __return_address;
 | 
						fa = failaddr ? failaddr : __return_address;
 | 
				
			||||||
	__xfs_buf_ioerror(bp, error, fa);
 | 
						__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",
 | 
							  bp->b_error == -EFSBADCRC ? "CRC error" : "corruption",
 | 
				
			||||||
		  fa, bp->b_ops->name, bp->b_bn, name);
 | 
							  fa, bp->b_ops->name, bp->b_bn, name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,5 +98,6 @@ extern int xfs_errortag_clearall(struct xfs_mount *mp);
 | 
				
			||||||
#define		XFS_PTAG_SHUTDOWN_IOERROR	0x00000020
 | 
					#define		XFS_PTAG_SHUTDOWN_IOERROR	0x00000020
 | 
				
			||||||
#define		XFS_PTAG_SHUTDOWN_LOGERROR	0x00000040
 | 
					#define		XFS_PTAG_SHUTDOWN_LOGERROR	0x00000040
 | 
				
			||||||
#define		XFS_PTAG_FSBLOCK_ZERO		0x00000080
 | 
					#define		XFS_PTAG_FSBLOCK_ZERO		0x00000080
 | 
				
			||||||
 | 
					#define		XFS_PTAG_VERIFIER_ERROR		0x00000100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif	/* __XFS_ERROR_H__ */
 | 
					#endif	/* __XFS_ERROR_H__ */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@ xfs_param_t xfs_params = {
 | 
				
			||||||
			  /*	MIN		DFLT		MAX	*/
 | 
								  /*	MIN		DFLT		MAX	*/
 | 
				
			||||||
	.sgid_inherit	= {	0,		0,		1	},
 | 
						.sgid_inherit	= {	0,		0,		1	},
 | 
				
			||||||
	.symlink_mode	= {	0,		0,		1	},
 | 
						.symlink_mode	= {	0,		0,		1	},
 | 
				
			||||||
	.panic_mask	= {	0,		0,		255	},
 | 
						.panic_mask	= {	0,		0,		256	},
 | 
				
			||||||
	.error_level	= {	0,		3,		11	},
 | 
						.error_level	= {	0,		3,		11	},
 | 
				
			||||||
	.syncd_timer	= {	1*100,		30*100,		7200*100},
 | 
						.syncd_timer	= {	1*100,		30*100,		7200*100},
 | 
				
			||||||
	.stats_clear	= {	0,		0,		1	},
 | 
						.stats_clear	= {	0,		0,		1	},
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue