Re: [PATCH v3 14/20] xfsprogs/repair: phase 2 finobt scan

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 10, 2014 at 12:11:04PM -0400, Brian Foster wrote:
> If one exists, scan the free inode btree in phase 2 of xfs_repair.
> We use the same general infrastructure as for the inobt scan, but
> trigger finobt chunk scan logic in in scan_inobt() via the magic
> value.
> 
> The new scan_single_finobt_chunk() function is similar to the inobt
> equivalent with some finobt specific logic. We can expect that
> underlying inode chunk blocks are already marked used due to the
> previous inobt scan. We can also expect to find every record
> tracked by the finobt already accounted for in the in-core tree
> with equivalent (and internally consistent) inobt record data.
> 
> Spit out a warning on any divergences from the above and add the
> inodes referenced by the current finobt record to the appropriate
> in-core tree.
> 
> Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx>
.....
> +	if (xfs_sb_version_hasfinobt(&mp->m_sb)) {
> +		bno = be32_to_cpu(agi->agi_free_root);
> +		if (bno != 0 && verify_agbno(mp, agno, bno)) {
> +			magic = xfs_sb_version_hascrc(&mp->m_sb) ?
> +					XFS_FIBT_CRC_MAGIC : XFS_FIBT_MAGIC;
> +			scan_sbtree(bno, be32_to_cpu(agi->agi_free_level),
> +				    agno, 0, scan_inobt, 1, magic, agcnts,
> +				    &xfs_inobt_buf_ops);
> +		} else {
> +			do_warn(_("bad agbno %u for finobt root, agno %d\n"),
> +				be32_to_cpu(agi->agi_free_root), agno);
> +		}
> +	}
> +

This generates a new repair output in xfs/030, so the xfstests repair
filter will need to be updated.

--- tests/xfs/030.out   2014-01-20 16:57:33.000000000 +1100
+++ results//xfs/030.out.bad        2014-04-23 15:28:29.000000000 +1000
@@ -82,6 +82,7 @@
 bad length # 0 for agi 0, should be LENGTH
 reset bad agi for ag 0
 bad agbno AGBNO for inobt root, agno 0
+bad agbno AGBNO for finobt root, agno 0
 root inode chunk not found
 Phase 3 - for each AG...
         - scan and clear agi unlinked lists...
@@ -204,6 +205,7 @@
 bad length # -1 for agi 0, should be LENGTH
 reset bad agi for ag 0
 bad agbno AGBNO for inobt root, agno 0
+bad agbno AGBNO for finobt root, agno 0
 root inode chunk not found
 Phase 3 - for each AG...
         - scan and clear agi unlinked lists...

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux