Patchwork [3.11.y.z,extended,stable] Patch "xfs: be more forgiving of a v4 secondary sb w/ junk in v5 fields" has been added to staging queue

mail settings
Submitter Luis Henriques
Date Dec. 5, 2013, 11:27 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/297060/
State New
Headers show


Luis Henriques - Dec. 5, 2013, 11:27 a.m.
This is a note to let you know that I have just added a patch titled

    xfs: be more forgiving of a v4 secondary sb w/ junk in v5 fields

to the linux-3.11.y-queue branch of the 3.11.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.11.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.11.y.z tree, see



From 4ca70e5954382819b877003daa2339819c4bab95 Mon Sep 17 00:00:00 2001
From: Eric Sandeen <>
Date: Mon, 9 Sep 2013 15:33:29 -0500
Subject: xfs: be more forgiving of a v4 secondary sb w/ junk in v5 fields

commit 10e6e65dfcedff63275c3d649d329c044caa8e26 upstream.

Today, if xfs_sb_read_verify encounters a v4 superblock
with junk past v4 fields which includes data in sb_crc,
it will be treated as a failing checksum and a significant

There are known prior bugs which leave junk at the end
of the V4 superblock; we don't need to actually fail the
verification in this case if other checks pan out ok.

So if this is a secondary superblock, and the primary
superblock doesn't indicate that this is a V5 filesystem,
don't treat this as an actual checksum failure.

We should probably check the garbage condition as
we do in xfs_repair, and possibly warn about it
or self-heal, but that's a different scope of work.

Stable folks: This can go back to v3.10, which is what
introduced the sb CRC checking that is tripped up by old,
stale, incorrect V4 superblocks w/ unzeroed bits.

Signed-off-by: Eric Sandeen <>
Acked-by: Dave Chinner <>
Reviewed-by: Mark Tinguely <>
Signed-off-by: Ben Myers <>
[ luis: backported to 3.5:
  - xfs_sb_read_verify() is defined in fs/xfs/xfs_mount.c in 3.11 ]
Signed-off-by: Luis Henriques <>
 fs/xfs/xfs_mount.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)



diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
index 2b0ba35..fd078b7 100644
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -749,6 +749,11 @@  xfs_sb_verify(
  * single bit error could clear the feature bit and unused parts of the
  * superblock are supposed to be zero. Hence a non-null crc field indicates that
  * we've potentially lost a feature bit and we should check it anyway.
+ *
+ * However, past bugs (i.e. in growfs) left non-zeroed regions beyond the
+ * last field in V4 secondary superblocks.  So for secondary superblocks,
+ * we are more forgiving, and ignore CRC failures if the primary doesn't
+ * indicate that the fs version is V5.
 static void
@@ -769,8 +774,12 @@  xfs_sb_read_verify(

 		if (!xfs_verify_cksum(bp->b_addr, be16_to_cpu(dsb->sb_sectsize),
 				      offsetof(struct xfs_sb, sb_crc))) {
-			error = EFSCORRUPTED;
-			goto out_error;
+			/* Only fail bad secondaries on a known V5 filesystem */
+			if (bp->b_bn != XFS_SB_DADDR &&
+			    xfs_sb_version_hascrc(&mp->m_sb)) {
+				error = EFSCORRUPTED;
+				goto out_error;
+			}
 	error = xfs_sb_verify(bp, true);