diff options
Diffstat (limited to 'fs/xfs/xfs_error.c')
-rw-r--r-- | fs/xfs/xfs_error.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c index 9995b807d627..a8b2ecb5f436 100644 --- a/fs/xfs/xfs_error.c +++ b/fs/xfs/xfs_error.c | |||
@@ -178,3 +178,28 @@ xfs_corruption_error( | |||
178 | xfs_error_report(tag, level, mp, filename, linenum, ra); | 178 | xfs_error_report(tag, level, mp, filename, linenum, ra); |
179 | xfs_alert(mp, "Corruption detected. Unmount and run xfs_repair"); | 179 | xfs_alert(mp, "Corruption detected. Unmount and run xfs_repair"); |
180 | } | 180 | } |
181 | |||
182 | /* | ||
183 | * Warnings specifically for verifier errors. Differentiate CRC vs. invalid | ||
184 | * values, and omit the stack trace unless the error level is tuned high. | ||
185 | */ | ||
186 | void | ||
187 | xfs_verifier_error( | ||
188 | struct xfs_buf *bp) | ||
189 | { | ||
190 | struct xfs_mount *mp = bp->b_target->bt_mount; | ||
191 | |||
192 | xfs_alert(mp, "Metadata %s detected at %pF, block 0x%llx", | ||
193 | bp->b_error == EFSBADCRC ? "CRC error" : "corruption", | ||
194 | __return_address, bp->b_bn); | ||
195 | |||
196 | xfs_alert(mp, "Unmount and run xfs_repair"); | ||
197 | |||
198 | if (xfs_error_level >= XFS_ERRLEVEL_LOW) { | ||
199 | xfs_alert(mp, "First 64 bytes of corrupted metadata buffer:"); | ||
200 | xfs_hex_dump(xfs_buf_offset(bp, 0), 64); | ||
201 | } | ||
202 | |||
203 | if (xfs_error_level >= XFS_ERRLEVEL_HIGH) | ||
204 | xfs_stack_trace(); | ||
205 | } | ||