]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bcachefs: fix bch2_dev_buckets_resize()
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 28 Apr 2025 16:09:53 +0000 (12:09 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 28 Apr 2025 20:46:13 +0000 (16:46 -0400)
The resize memcpy path was totally busted.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/buckets.c

index 4ef261e8db4f5cce6394886ce56c7ed3e58eca1b..e1efae43982a87da54a221b9bff782aa187c2035 100644 (file)
@@ -1307,13 +1307,11 @@ int bch2_dev_buckets_resize(struct bch_fs *c, struct bch_dev *ca, u64 nbuckets)
        old_bucket_gens = rcu_dereference_protected(ca->bucket_gens, 1);
 
        if (resize) {
-               bucket_gens->nbuckets = min(bucket_gens->nbuckets,
-                                           old_bucket_gens->nbuckets);
-               bucket_gens->nbuckets_minus_first =
-                       bucket_gens->nbuckets - bucket_gens->first_bucket;
+               u64 copy = min(bucket_gens->nbuckets,
+                              old_bucket_gens->nbuckets);
                memcpy(bucket_gens->b,
                       old_bucket_gens->b,
-                      bucket_gens->nbuckets);
+                      sizeof(bucket_gens->b[0]) * copy);
        }
 
        rcu_assign_pointer(ca->bucket_gens, bucket_gens);