db/check: handle zero inoalignmt correctly for large block sizes
PATCH 1/1 db/check: handle zero inoalignmt correctly for large block sizes
The check command prints a spurious error when sb_inoalignmt is zero but the sb align feature bit is set:
$ mkfs.xfs -f -bsize=16k <dev> $ xfs_db -c "check" <dev> sb versionnum extra align bit 80
This occurs because check determines whether to expect the alignment feature bit based on a non-zero inoalignmt (in init()). sb_inoalignmt of 0 is expected for block sizes that are large enough for at least one full inode record (64 inodes), however. For example, when bsize >= 16k on v4 filesystems or >=32k on v5 filesystems.
Update the init() logic in the check command to detect this particular scenario. Set the in-memory feature bit if inoalignmt is zero and the block size is large enough for full inode records such that blockget_f() does not complain.
Signed-off-by Brian Foster <[email protected]>
--- db/check.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
db/check.c +7 -1
@@ -1832,7 +1832,13 @@ init( error = sbver_err = serious_error =0 ; fdblocks = frextents = icount = ifree =0 ; sbversion =XFS_SB_VERSION_4 ; -if (mp->m_sb.sb_inoalignmt) +/* +* Note that inoalignmt == 0 is valid when fsb size is large enough for +* at least one full inode record per block. Check this case explicitly. +*/ +if (mp->m_sb.sb_inoalignmt || + (xfs_sb_version_hasalign (&mp->m_sb) && + mp->m_sb.sb_inopblock >=XFS_INODES_PER_CHUNK )) sbversion |=XFS_SB_VERSION_ALIGNBIT ; if ((mp->m_sb.sb_uquotino && mp->m_sb.sb_uquotino != NULLFSINO) || (mp->m_sb.sb_gquotino && mp->m_sb.sb_gquotino != NULLFSINO) ||
Signature · 6 lines
1.9.3 _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs