xfsprogs/repair: only check secondary sb->sb_pquotino for v5 superblocks
PATCH 1/1 xfsprogs/repair: only check secondary sb->sb_pquotino for v5 superblocks
xfs_repair scans for garbage data beyond the last valid superblock field for the particular sb version in secondary_sb_wack(). If any non-zero data is detected, the entire range is reset to zero. Subsequently, various valid superblock fields are checked for valid/expected data.
The sb_pquotino field is checked unconditionally as part of this sequence even though it is a v5 only field. As a result, repair complains about a non-null project quota field if any garbage data exists for a v4 secondary sb. This is reproduced by xfs/070 against a v4 superblock and is also easily reproduced manually as follows:
$ mkfs.xfs -f -m crc=0 <dev> $ xfs_db -x -c "sb 3" -c "write lsn 1" <dev> $ xfs_repair <dev> ... zeroing unused portion of secondary superblock (AG #3) non-null project quota inode field in superblock 3 ...
This occurs because the garbage data detection mechanism has reset sb->sb_pquotino to 0 while the validity check expects a value of NULLFSINO.
Update secondary_sb_wack() to only check sb->sb_pquotino for validity on supers where it is a valid field. If it is anything other than 0 on pre-v5 superblocks, it is explicitly reset to 0 by the garbage data checks earlier in the function.
--- repair/agheader.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
repair/agheader.c +7 -1
@@ -377,7 +377,13 @@ secondary_sb_wack( rval |=XR_AG_SB_SEC ; } -if (sb->sb_inprogress ==1 && sb->sb_pquotino !=NULLFSINO ) { +/* +* Note that sb_pquotino is not considered a valid sb field for pre-v5 +* superblocks. If it is anything other than 0 it is considered garbage +* data beyond the valid sb and explicitly zeroed above. +*/ +if (xfs_sb_version_has_pquotino (&mp->m_sb) && + sb->sb_inprogress ==1 && sb->sb_pquotino !=NULLFSINO ) {if (!no_modify) { sb->sb_pquotino =0 ; dsb->sb_pquotino =0 ;
Signature · 6 lines
1.9.3 _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs