From: Brian Foster Date: Tue, 24 Feb 2015 00:20:31 +0000 (+1100) Subject: metadump: check for non-zero inode alignment X-Git-Tag: v3.2.3-rc1~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ab7cbc83f59c8aea8cdc98454a978848af6a41a;p=thirdparty%2Fxfsprogs-dev.git metadump: check for non-zero inode alignment The copy_inode_chunk() function performs some basic sanity checks on the inode record, block number, etc. One of these checks includes whether the inode chunk is aligned according to sb_inoalignmt. sb_inoalignment can equal 0 with larger block sizes. This results in a mod-by-zero, "badly aligned inode ..." warnings and skipped inodes in metadump images. This can be reproduced with a '-m crc=1,finobt=1 -b size=64k' fs on ppc64. Update copy_inode_chunk() to only enforce the inode alignment check when sb_inoalignmt is non-zero. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Signed-off-by: Dave Chinner --- diff --git a/db/metadump.c b/db/metadump.c index 6bd10a8a8..a5995717f 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -1865,6 +1865,7 @@ copy_inode_chunk( (mp->m_sb.sb_inopblock > XFS_INODES_PER_CHUNK && off % XFS_INODES_PER_CHUNK != 0) || (xfs_sb_version_hasalign(&mp->m_sb) && + mp->m_sb.sb_inoalignmt != 0 && agbno % mp->m_sb.sb_inoalignmt != 0)) { if (show_warnings) print_warning("badly aligned inode (start = %llu)",