Message ID | 158904188022.982941.11510270346760102443.stgit@magnolia (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | xfs_repair: catch things that xfs_check misses | expand |
On Sat, May 09, 2020 at 09:31:20AM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > In scan_allocbt, we iterate each free space btree record (of both bnobt > and cntbt) in the hopes of pushing all the free space from UNKNOWN to > FREE1 to FREE. Unfortunately, the first time we see a free space record > we only set the first block of that record to FREE1, which means that > the second time we see the record, the first block will get set to FREE, > but the rest of the free space will only make it to FREE1. This is > incorrect state, so we need to fix that. That sounds pretty bad.. The fix looks good: Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/repair/scan.c b/repair/scan.c index 76079247..505cfc53 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -719,7 +719,7 @@ _("%s freespace btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), state = get_bmap_ext(agno, b, end, &blen); switch (state) { case XR_E_UNKNOWN: - set_bmap(agno, b, XR_E_FREE1); + set_bmap_ext(agno, b, blen, XR_E_FREE1); break; case XR_E_FREE1: /*