You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.9 KiB
52 lines
1.9 KiB
commit 643f6acc4bb2d799bebd54c973949c1a90eb26a3 |
|
Author: Eric Sandeen <sandeen@redhat.com> |
|
Date: Tue Jun 21 12:55:15 2016 +1000 |
|
|
|
xfs_repair: set rsumino version to 2 |
|
|
|
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> |
|
|
|
Index: xfsprogs-4.5.0/repair/phase6.c |
|
=================================================================== |
|
--- xfsprogs-4.5.0.orig/repair/phase6.c |
|
+++ xfsprogs-4.5.0/repair/phase6.c |
|
@@ -507,7 +507,7 @@ mk_rbmino(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, xfs_icdinode_size(vers)); |
|
|
|
ip->i_d.di_magic = XFS_DINODE_MAGIC; |
|
@@ -766,7 +766,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, xfs_icdinode_size(vers)); |
|
|
|
ip->i_d.di_magic = XFS_DINODE_MAGIC;
|
|
|