diff options
Diffstat (limited to 'fs/xfs/xfs_error.c')
| -rw-r--r-- | fs/xfs/xfs_error.c | 36 | 
1 files changed, 29 insertions, 7 deletions
diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c index 1123d93ff79..edac5b057d2 100644 --- a/fs/xfs/xfs_error.c +++ b/fs/xfs/xfs_error.c @@ -16,16 +16,13 @@   * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   */  #include "xfs.h" +#include "xfs_format.h"  #include "xfs_fs.h" -#include "xfs_types.h" -#include "xfs_log.h" -#include "xfs_trans.h" +#include "xfs_log_format.h" +#include "xfs_trans_resv.h"  #include "xfs_sb.h"  #include "xfs_ag.h"  #include "xfs_mount.h" -#include "xfs_bmap_btree.h" -#include "xfs_dinode.h" -#include "xfs_inode.h"  #include "xfs_error.h"  #ifdef DEBUG @@ -159,7 +156,7 @@ xfs_error_report(  {  	if (level <= xfs_error_level) {  		xfs_alert_tag(mp, XFS_PTAG_ERROR_REPORT, -		"Internal error %s at line %d of file %s.  Caller 0x%p\n", +		"Internal error %s at line %d of file %s.  Caller %pF",  			    tag, linenum, filename, ra);  		xfs_stack_trace(); @@ -181,3 +178,28 @@ xfs_corruption_error(  	xfs_error_report(tag, level, mp, filename, linenum, ra);  	xfs_alert(mp, "Corruption detected. Unmount and run xfs_repair");  } + +/* + * Warnings specifically for verifier errors.  Differentiate CRC vs. invalid + * values, and omit the stack trace unless the error level is tuned high. + */ +void +xfs_verifier_error( +	struct xfs_buf		*bp) +{ +	struct xfs_mount *mp = bp->b_target->bt_mount; + +	xfs_alert(mp, "Metadata %s detected at %pF, block 0x%llx", +		  bp->b_error == EFSBADCRC ? "CRC error" : "corruption", +		  __return_address, bp->b_bn); + +	xfs_alert(mp, "Unmount and run xfs_repair"); + +	if (xfs_error_level >= XFS_ERRLEVEL_LOW) { +		xfs_alert(mp, "First 64 bytes of corrupted metadata buffer:"); +		xfs_hex_dump(xfs_buf_offset(bp, 0), 64); +	} + +	if (xfs_error_level >= XFS_ERRLEVEL_HIGH) +		xfs_stack_trace(); +}  | 
