xfs
[Top] [All Lists]

[PATCH] xfs_repair: set rsumino version to 2

To: xfs-oss <xfs@xxxxxxxxxxx>
Subject: [PATCH] xfs_repair: set rsumino version to 2
From: Eric Sandeen <sandeen@xxxxxxxxxx>
Date: Fri, 17 Jun 2016 22:41:07 -0500
Delivered-to: xfs@xxxxxxxxxxx
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.1.1
If we run xfs/033 with "-m crc=0", the test fails
with a repair output difference:

     Phase 7 - verify and correct link counts...
    +resetting inode INO nlinks from 0 to 1
     done

This is because when we zero out the realtime summary
inode and rebuild it, we set its version to 1, then
set its ip->i_d.di_nlink to 1.  This is a little odd,
because v1 inodes store their link count in di_onlink...

Then, later in repair we call xfs_inode_from_disk(),
which sees the version one inode, and converts it to
version 2 in part by copying di_onlink to di_nlink.
But we never *set* di_onlink, so di_nlink gets reset to
zero, and this error is discovered later in repair.

Interestingly, mk_rbmino() was changed in 138659f1
to set version 2; it looks like mk_rsumino was just
missed.

Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
---

My only other point of confusion is that prior to
ff105f7 libxfs: update to 3.16 kernel code
the "resetting inode..." message wasn't emitted; I'm
not sure what changed there to affect this.  :/

diff --git a/repair/phase6.c b/repair/phase6.c
index 0a71164..774e2cd 100644
--- a/repair/phase6.c
+++ b/repair/phase6.c
@@ -760,7 +760,7 @@ mk_rsumino(xfs_mount_t *mp)
                        error);
        }
 
-       vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 1;
+       vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 2;
        memset(&ip->i_d, 0, sizeof(ip->i_d));
 
        VFS_I(ip)->i_mode = S_IFREG;

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] xfs_repair: set rsumino version to 2, Eric Sandeen <=