diff options
| author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-17 15:05:26 -0400 |
|---|---|---|
| committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-21 20:15:04 -0400 |
| commit | 15f969326ee296f7b7faf7704105a99fa02c288d (patch) | |
| tree | 30c25795e64cb003c9613494bfbe16c3eee43d0a /fs/bcachefs/buckets.c | |
| parent | bcachefs: Run recovery passes asynchronously (diff) | |
| download | linux-15f969326ee296f7b7faf7704105a99fa02c288d.tar.gz linux-15f969326ee296f7b7faf7704105a99fa02c288d.zip | |
bcachefs: Improve bucket_bitmap code
Add some more helpers, and mismatches is now a superset of the empty
bitmap - simplifies most checks.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/buckets.c')
| -rw-r--r-- | fs/bcachefs/buckets.c | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/fs/bcachefs/buckets.c b/fs/bcachefs/buckets.c index ca6e58d6fbc8..8bb6384190c5 100644 --- a/fs/bcachefs/buckets.c +++ b/fs/bcachefs/buckets.c @@ -1324,27 +1324,10 @@ int bch2_dev_buckets_resize(struct bch_fs *c, struct bch_dev *ca, u64 nbuckets) sizeof(bucket_gens->b[0]) * copy); } - for (unsigned i = 0; i < ARRAY_SIZE(ca->bucket_backpointer_mismatches); i++) { - struct bucket_bitmap *bitmap = &ca->bucket_backpointer_mismatches[i]; - - mutex_lock(&bitmap->lock); - if (bitmap->buckets) { - unsigned long *n = kvcalloc(BITS_TO_LONGS(nbuckets), - sizeof(unsigned long), GFP_KERNEL); - if (!n) { - mutex_unlock(&bitmap->lock); - ret = -BCH_ERR_ENOMEM_backpointer_mismatches_bitmap; - goto err; - } - - memcpy(n, bitmap->buckets, - BITS_TO_LONGS(ca->mi.nbuckets) * sizeof(unsigned long)); - kvfree(bitmap->buckets); - bitmap->buckets = n; - - } - mutex_unlock(&bitmap->lock); - } + ret = bch2_bucket_bitmap_resize(&ca->bucket_backpointer_mismatch, + ca->mi.nbuckets, nbuckets) ?: + bch2_bucket_bitmap_resize(&ca->bucket_backpointer_empty, + ca->mi.nbuckets, nbuckets); rcu_assign_pointer(ca->bucket_gens, bucket_gens); bucket_gens = old_bucket_gens; |
