Blame SOURCES/xfsprogs-5.7.0-xfs_repair-tag-inobt-vs-finobt-errors-properly.patch

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