|
|
d13294 |
From 08280b4b6efd317c673c6718a27d77e702d0480d Mon Sep 17 00:00:00 2001
|
|
|
d13294 |
From: "Darrick J. Wong" <darrick.wong@oracle.com>
|
|
|
d13294 |
Date: Fri, 10 Jul 2020 15:35:45 -0400
|
|
|
d13294 |
Subject: [PATCH] xfs_repair: tag inobt vs finobt errors properly
|
|
|
d13294 |
|
|
|
d13294 |
Amend the generic inode btree block scanner function to tag correctly
|
|
|
d13294 |
which tree it's complaining about. Previously, dubious finobt headers
|
|
|
d13294 |
would be attributed to the "inode btree", which is at best ambiguous
|
|
|
d13294 |
and misleading at worst.
|
|
|
d13294 |
|
|
|
d13294 |
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
|
|
|
d13294 |
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
|
|
d13294 |
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
|
|
|
d13294 |
---
|
|
|
d13294 |
repair/scan.c | 36 ++++++++++++++++++++++++++----------
|
|
|
d13294 |
1 file changed, 26 insertions(+), 10 deletions(-)
|
|
|
d13294 |
|
|
|
d13294 |
Index: xfsprogs-5.0.0/repair/scan.c
|
|
|
d13294 |
===================================================================
|
|
|
d13294 |
--- xfsprogs-5.0.0.orig/repair/scan.c
|
|
|
d13294 |
+++ xfsprogs-5.0.0/repair/scan.c
|
|
|
d13294 |
@@ -1934,6 +1934,7 @@ scan_inobt(
|
|
|
d13294 |
const struct xfs_buf_ops *ops)
|
|
|
d13294 |
{
|
|
|
d13294 |
struct aghdr_cnts *agcnts = priv;
|
|
|
d13294 |
+ char *name;
|
|
|
d13294 |
int i;
|
|
|
d13294 |
int numrecs;
|
|
|
d13294 |
int state;
|
|
|
d13294 |
@@ -1944,17 +1945,32 @@ scan_inobt(
|
|
|
d13294 |
|
|
|
d13294 |
hdr_errors = 0;
|
|
|
d13294 |
|
|
|
d13294 |
+ switch (magic) {
|
|
|
d13294 |
+ case XFS_FIBT_MAGIC:
|
|
|
d13294 |
+ case XFS_FIBT_CRC_MAGIC:
|
|
|
d13294 |
+ name = "fino";
|
|
|
d13294 |
+ break;
|
|
|
d13294 |
+ case XFS_IBT_MAGIC:
|
|
|
d13294 |
+ case XFS_IBT_CRC_MAGIC:
|
|
|
d13294 |
+ name = "ino";
|
|
|
d13294 |
+ break;
|
|
|
d13294 |
+ default:
|
|
|
d13294 |
+ name = "(unknown)";
|
|
|
d13294 |
+ assert(0);
|
|
|
d13294 |
+ break;
|
|
|
d13294 |
+ }
|
|
|
d13294 |
+
|
|
|
d13294 |
if (be32_to_cpu(block->bb_magic) != magic) {
|
|
|
d13294 |
- do_warn(_("bad magic # %#x in inobt block %d/%d\n"),
|
|
|
d13294 |
- be32_to_cpu(block->bb_magic), agno, bno);
|
|
|
d13294 |
+ do_warn(_("bad magic # %#x in %sbt block %d/%d\n"),
|
|
|
d13294 |
+ be32_to_cpu(block->bb_magic), name, agno, bno);
|
|
|
d13294 |
hdr_errors++;
|
|
|
d13294 |
bad_ino_btree = 1;
|
|
|
d13294 |
if (suspect)
|
|
|
d13294 |
return;
|
|
|
d13294 |
}
|
|
|
d13294 |
if (be16_to_cpu(block->bb_level) != level) {
|
|
|
d13294 |
- do_warn(_("expected level %d got %d in inobt block %d/%d\n"),
|
|
|
d13294 |
- level, be16_to_cpu(block->bb_level), agno, bno);
|
|
|
d13294 |
+ do_warn(_("expected level %d got %d in %sbt block %d/%d\n"),
|
|
|
d13294 |
+ level, be16_to_cpu(block->bb_level), name, agno, bno);
|
|
|
d13294 |
hdr_errors++;
|
|
|
d13294 |
bad_ino_btree = 1;
|
|
|
d13294 |
if (suspect)
|
|
|
d13294 |
@@ -1976,8 +1992,8 @@ scan_inobt(
|
|
|
d13294 |
default:
|
|
|
d13294 |
set_bmap(agno, bno, XR_E_MULT);
|
|
|
d13294 |
do_warn(
|
|
|
d13294 |
-_("inode btree block claimed (state %d), agno %d, bno %d, suspect %d\n"),
|
|
|
d13294 |
- state, agno, bno, suspect);
|
|
|
d13294 |
+_("%sbt btree block claimed (state %d), agno %d, bno %d, suspect %d\n"),
|
|
|
d13294 |
+ name, state, agno, bno, suspect);
|
|
|
d13294 |
}
|
|
|
d13294 |
|
|
|
d13294 |
numrecs = be16_to_cpu(block->bb_numrecs);
|
|
|
d13294 |
@@ -1999,8 +2015,8 @@ _("inode btree block claimed (state %d),
|
|
|
d13294 |
|
|
|
d13294 |
if (hdr_errors) {
|
|
|
d13294 |
bad_ino_btree = 1;
|
|
|
d13294 |
- do_warn(_("dubious inode btree block header %d/%d\n"),
|
|
|
d13294 |
- agno, bno);
|
|
|
d13294 |
+ do_warn(_("dubious %sbt btree block header %d/%d\n"),
|
|
|
d13294 |
+ name, agno, bno);
|
|
|
d13294 |
suspect++;
|
|
|
d13294 |
}
|
|
|
d13294 |
|