Blame SOURCES/xfsprogs-4.9.0-junk-attr-leaf-count-zero.patch

9bf599
xfs_repair: junk leaf attribute if count == 0
9bf599
9bf599
We have recently seen a case where, during log replay, the
9bf599
attr3 leaf verifier reported corruption when encountering a
9bf599
leaf attribute with a count of 0 in the header.
9bf599
9bf599
We chalked this up to a transient state when a shortform leaf
9bf599
was created, the attribute didn't fit, and we promoted the
9bf599
(empty) attribute to the larger leaf form.
9bf599
9bf599
I've recently been given a metadump of unknown provenance which actually
9bf599
contains a leaf attribute with count 0 on disk.  This causes the
9bf599
verifier to fire every time xfs_repair is run:
9bf599
9bf599
 Metadata corruption detected at xfs_attr3_leaf block 0x480988/0x1000
9bf599
9bf599
If this 0-count state is detected, we should just junk the leaf, same
9bf599
as we would do if the count was too high.  With this change, we now
9bf599
remedy the problem:
9bf599
9bf599
 Metadata corruption detected at xfs_attr3_leaf block 0x480988/0x1000
9bf599
 bad attribute count 0 in attr block 0, inode 12587828
9bf599
 problem with attribute contents in inode 12587828
9bf599
 clearing inode 12587828 attributes
9bf599
 correcting nblocks for inode 12587828, was 2 - counted 1
9bf599
9bf599
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
9bf599
Reviewed-by: Brian Foster <bfoster@redhat.com>
9bf599
---
9bf599
9bf599
diff --git a/repair/attr_repair.c b/repair/attr_repair.c
9bf599
index 40cb5f7..b855a10 100644
9bf599
--- a/repair/attr_repair.c
9bf599
+++ b/repair/attr_repair.c
9bf599
@@ -593,7 +593,8 @@ process_leaf_attr_block(
9bf599
 	stop = xfs_attr3_leaf_hdr_size(leaf);
9bf599
 
9bf599
 	/* does the count look sorta valid? */
9bf599
-	if (leafhdr.count * sizeof(xfs_attr_leaf_entry_t) + stop >
9bf599
+	if (!leafhdr.count ||
9bf599
+	    leafhdr.count * sizeof(xfs_attr_leaf_entry_t) + stop >
9bf599
 						mp->m_sb.sb_blocksize) {
9bf599
 		do_warn(
9bf599
 	_("bad attribute count %d in attr block %u, inode %" PRIu64 "\n"),
9bf599
--
9bf599
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
9bf599
the body of a message to majordomo@vger.kernel.org
9bf599
More majordomo info at  http://vger.kernel.org/majordomo-info.html
9bf599
9bf599