diff options
| author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-09 17:01:05 -0400 |
|---|---|---|
| committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-21 20:15:04 -0400 |
| commit | 39cea302f13a0a9dc4cf39248529a42e79d06842 (patch) | |
| tree | 8b4746647732b5e7bcd49d669207a48cd9b43f9e /fs/bcachefs/alloc_background.c | |
| parent | 15f969326ee296f7b7faf7704105a99fa02c288d (diff) | |
| download | linux-next-39cea302f13a0a9dc4cf39248529a42e79d06842.tar.gz linux-next-39cea302f13a0a9dc4cf39248529a42e79d06842.zip | |
bcachefs: bch2_check_bucket_backpointer_mismatch()
Detect buckets with missing backpointers, and run repair on demand.
__bch2_move_data_phys() now calls
bch2_check_bucket_backpointer_mismatch() as it walks buckets, which
checks for missing backpointers by comparing backpointers against bucket
sector counts.
When missing backpointers are detected, we kick off
bch2_check_extents_to_backpointers() asynchronously - right away if
we're trying to evacuate, or with a threshold if we're just running
copygc.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/alloc_background.c')
| -rw-r--r-- | fs/bcachefs/alloc_background.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c index 88e710ba2685..a38b9c6c891e 100644 --- a/fs/bcachefs/alloc_background.c +++ b/fs/bcachefs/alloc_background.c @@ -2175,8 +2175,11 @@ static int invalidate_one_bucket(struct btree_trans *trans, BUG_ON(a->data_type != BCH_DATA_cached); BUG_ON(a->dirty_sectors); - if (!a->cached_sectors) - bch_err(c, "invalidating empty bucket, confused"); + if (!a->cached_sectors) { + bch2_check_bucket_backpointer_mismatch(trans, ca, bucket.offset, + true, last_flushed); + goto out; + } unsigned cached_sectors = a->cached_sectors; u8 gen = a->gen; |
