From: Chandan Babu R Date: Thu, 14 Jul 2022 01:58:27 +0000 (-0500) Subject: xfs_repair: Search for conflicts in inode_tree_ptrs[] when processing uncertain inodes X-Git-Tag: v5.19.0-rc1~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=91c1d0836aa4a228e76c0b8c5d83903f1f6bfdbb;p=thirdparty%2Fxfsprogs-dev.git xfs_repair: Search for conflicts in inode_tree_ptrs[] when processing uncertain inodes When processing an uncertain inode chunk record, if we lose 2 blocks worth of inodes or 25% of the chunk, xfs_repair decides to ignore the chunk. Otherwise, xfs_repair adds a new chunk record to inode_tree_ptrs[agno], marking each inode as either free or used. However, before adding the new chunk record, xfs_repair has to check for the existance of a conflicting record. The existing code incorrectly checks for the conflicting record in inode_uncertain_tree_ptrs[agno]. This check will succeed since the inode chunk record being processed was originally obtained from inode_uncertain_tree_ptrs[agno]. This commit fixes the bug by changing xfs_repair to search inode_tree_ptrs[agno] for conflicts. Signed-off-by: Chandan Babu R Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong Signed-off-by: Eric Sandeen --- diff --git a/repair/dino_chunks.c b/repair/dino_chunks.c index 11b0eb5f2..80c52a439 100644 --- a/repair/dino_chunks.c +++ b/repair/dino_chunks.c @@ -229,8 +229,7 @@ verify_inode_chunk(xfs_mount_t *mp, /* * ok, put the record into the tree, if no conflict. */ - if (find_uncertain_inode_rec(agno, - XFS_AGB_TO_AGINO(mp, start_agbno))) + if (find_inode_rec(mp, agno, XFS_AGB_TO_AGINO(mp, start_agbno))) return(0); start_agino = XFS_AGB_TO_AGINO(mp, start_agbno);