In copy_inode_chunk, we try to determine whether or not an inode is free as part of copying the inode records. The macros involved in testing ir_free require both the inode record and the offset of an inode within that chunk. Prior to sparse inode support, the loop index "i" was also the inode chunk offset; however, when sparse support was added, "i" became the inode offset within a cluster and "ioff" became the inode cluster offset within an inode chunk. Therefore, it is necessary to pass "ioff + i" to do the free-ness calculation correctly. This was discovered while trying to take metadumps of fs images for scrub testing. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --- db/metadump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/metadump.c b/db/metadump.c index e82b660..c769958 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -2292,7 +2292,7 @@ copy_inode_chunk( /* process_inode handles free inodes, too */ if (!process_inode(agno, agino + ioff + i, dip, - XFS_INOBT_IS_FREE_DISK(rp, i))) + XFS_INOBT_IS_FREE_DISK(rp, ioff + i))) goto pop_out; inodes_copied++; _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs