]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_repair: set rsumino version to 2
authorEric Sandeen <sandeen@redhat.com>
Tue, 21 Jun 2016 02:55:15 +0000 (12:55 +1000)
committerDave Chinner <david@fromorbit.com>
Tue, 21 Jun 2016 02:55:15 +0000 (12:55 +1000)
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@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
repair/phase6.c

index 0a711640cf08d922df88522b2bdf9c06b729dd39..774e2cd7670c243a619a64d20cb54bdacc532237 100644 (file)
@@ -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;