forked from Minki/linux
xfs: kill xfs_fs_repair_cmn_err() macro
In certain cases of inode corruption, the xfs_fs_repair_cmn_err() macro is used to output an extra message in the corruption report. That extra message is "unmount and run xfs_repair", which really applies to any corruption report. Each case that this macro is called (except one) a following call to xfs_corruption_error() is made to optionally dump more information about the error. Hence, move the output of "run xfs_repair" to xfs_corruption_error() so that it is output on all corruption reports. Also, convert the callers of the repair macro that don't call xfs_corruption_error() to call it, hence provide consiѕtent error reporting for all cases where xfs_fs_repair_cmn_err() used to be called. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Alex Elder <aelder@sgi.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
6a19d9393a
commit
65333b4c3d
@ -4200,12 +4200,11 @@ xfs_bmap_read_extents(
|
||||
num_recs = xfs_btree_get_numrecs(block);
|
||||
if (unlikely(i + num_recs > room)) {
|
||||
ASSERT(i + num_recs <= room);
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
xfs_warn(ip->i_mount,
|
||||
"corrupt dinode %Lu, (btree extents).",
|
||||
(unsigned long long) ip->i_ino);
|
||||
XFS_ERROR_REPORT("xfs_bmap_read_extents(1)",
|
||||
XFS_ERRLEVEL_LOW,
|
||||
ip->i_mount);
|
||||
XFS_CORRUPTION_ERROR("xfs_bmap_read_extents(1)",
|
||||
XFS_ERRLEVEL_LOW, ip->i_mount, block);
|
||||
goto error0;
|
||||
}
|
||||
XFS_WANT_CORRUPTED_GOTO(
|
||||
|
@ -183,4 +183,5 @@ xfs_corruption_error(
|
||||
if (level <= xfs_error_level)
|
||||
xfs_hex_dump(p, 16);
|
||||
xfs_error_report(tag, level, mp, filename, linenum, ra);
|
||||
xfs_alert(mp, "Corruption detected. Unmount and run xfs_repair");
|
||||
}
|
||||
|
@ -162,9 +162,6 @@ struct xfs_mount;
|
||||
|
||||
extern void xfs_hex_dump(void *p, int length);
|
||||
|
||||
#define xfs_fs_repair_cmn_err(level, mp, fmt, args...) \
|
||||
xfs_fs_cmn_err(level, mp, fmt " Unmount and run xfs_repair.", ## args)
|
||||
|
||||
#define xfs_fs_mount_cmn_err(f, fmt, args...) \
|
||||
do { \
|
||||
if (!(f & XFS_MFSI_QUIET)) \
|
||||
|
@ -317,7 +317,7 @@ xfs_iformat(
|
||||
if (unlikely(be32_to_cpu(dip->di_nextents) +
|
||||
be16_to_cpu(dip->di_anextents) >
|
||||
be64_to_cpu(dip->di_nblocks))) {
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
xfs_warn(ip->i_mount,
|
||||
"corrupt dinode %Lu, extent total = %d, nblocks = %Lu.",
|
||||
(unsigned long long)ip->i_ino,
|
||||
(int)(be32_to_cpu(dip->di_nextents) +
|
||||
@ -330,8 +330,7 @@ xfs_iformat(
|
||||
}
|
||||
|
||||
if (unlikely(dip->di_forkoff > ip->i_mount->m_sb.sb_inodesize)) {
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
"corrupt dinode %Lu, forkoff = 0x%x.",
|
||||
xfs_warn(ip->i_mount, "corrupt dinode %Lu, forkoff = 0x%x.",
|
||||
(unsigned long long)ip->i_ino,
|
||||
dip->di_forkoff);
|
||||
XFS_CORRUPTION_ERROR("xfs_iformat(2)", XFS_ERRLEVEL_LOW,
|
||||
@ -341,7 +340,7 @@ xfs_iformat(
|
||||
|
||||
if (unlikely((ip->i_d.di_flags & XFS_DIFLAG_REALTIME) &&
|
||||
!ip->i_mount->m_rtdev_targp)) {
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
xfs_warn(ip->i_mount,
|
||||
"corrupt dinode %Lu, has realtime flag set.",
|
||||
ip->i_ino);
|
||||
XFS_CORRUPTION_ERROR("xfs_iformat(realtime)",
|
||||
@ -373,9 +372,8 @@ xfs_iformat(
|
||||
* no local regular files yet
|
||||
*/
|
||||
if (unlikely((be16_to_cpu(dip->di_mode) & S_IFMT) == S_IFREG)) {
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
"corrupt inode %Lu "
|
||||
"(local format for regular file).",
|
||||
xfs_warn(ip->i_mount,
|
||||
"corrupt inode %Lu (local format for regular file).",
|
||||
(unsigned long long) ip->i_ino);
|
||||
XFS_CORRUPTION_ERROR("xfs_iformat(4)",
|
||||
XFS_ERRLEVEL_LOW,
|
||||
@ -385,9 +383,8 @@ xfs_iformat(
|
||||
|
||||
di_size = be64_to_cpu(dip->di_size);
|
||||
if (unlikely(di_size > XFS_DFORK_DSIZE(dip, ip->i_mount))) {
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
"corrupt inode %Lu "
|
||||
"(bad size %Ld for local inode).",
|
||||
xfs_warn(ip->i_mount,
|
||||
"corrupt inode %Lu (bad size %Ld for local inode).",
|
||||
(unsigned long long) ip->i_ino,
|
||||
(long long) di_size);
|
||||
XFS_CORRUPTION_ERROR("xfs_iformat(5)",
|
||||
@ -431,9 +428,8 @@ xfs_iformat(
|
||||
size = be16_to_cpu(atp->hdr.totsize);
|
||||
|
||||
if (unlikely(size < sizeof(struct xfs_attr_sf_hdr))) {
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
"corrupt inode %Lu "
|
||||
"(bad attr fork size %Ld).",
|
||||
xfs_warn(ip->i_mount,
|
||||
"corrupt inode %Lu (bad attr fork size %Ld).",
|
||||
(unsigned long long) ip->i_ino,
|
||||
(long long) size);
|
||||
XFS_CORRUPTION_ERROR("xfs_iformat(8)",
|
||||
@ -488,9 +484,8 @@ xfs_iformat_local(
|
||||
* kmem_alloc() or memcpy() below.
|
||||
*/
|
||||
if (unlikely(size > XFS_DFORK_SIZE(dip, ip->i_mount, whichfork))) {
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
"corrupt inode %Lu "
|
||||
"(bad size %d for local fork, size = %d).",
|
||||
xfs_warn(ip->i_mount,
|
||||
"corrupt inode %Lu (bad size %d for local fork, size = %d).",
|
||||
(unsigned long long) ip->i_ino, size,
|
||||
XFS_DFORK_SIZE(dip, ip->i_mount, whichfork));
|
||||
XFS_CORRUPTION_ERROR("xfs_iformat_local", XFS_ERRLEVEL_LOW,
|
||||
@ -547,8 +542,7 @@ xfs_iformat_extents(
|
||||
* kmem_alloc() or memcpy() below.
|
||||
*/
|
||||
if (unlikely(size < 0 || size > XFS_DFORK_SIZE(dip, ip->i_mount, whichfork))) {
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
"corrupt inode %Lu ((a)extents = %d).",
|
||||
xfs_warn(ip->i_mount, "corrupt inode %Lu ((a)extents = %d).",
|
||||
(unsigned long long) ip->i_ino, nex);
|
||||
XFS_CORRUPTION_ERROR("xfs_iformat_extents(1)", XFS_ERRLEVEL_LOW,
|
||||
ip->i_mount, dip);
|
||||
@ -623,11 +617,10 @@ xfs_iformat_btree(
|
||||
|| XFS_BMDR_SPACE_CALC(nrecs) >
|
||||
XFS_DFORK_SIZE(dip, ip->i_mount, whichfork)
|
||||
|| XFS_IFORK_NEXTENTS(ip, whichfork) > ip->i_d.di_nblocks)) {
|
||||
xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount,
|
||||
"corrupt inode %Lu (btree).",
|
||||
xfs_warn(ip->i_mount, "corrupt inode %Lu (btree).",
|
||||
(unsigned long long) ip->i_ino);
|
||||
XFS_ERROR_REPORT("xfs_iformat_btree", XFS_ERRLEVEL_LOW,
|
||||
ip->i_mount);
|
||||
XFS_CORRUPTION_ERROR("xfs_iformat_btree", XFS_ERRLEVEL_LOW,
|
||||
ip->i_mount, dip);
|
||||
return XFS_ERROR(EFSCORRUPTED);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user