bcachefs: Ensure we only allocate one EC bucket per writepoint
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 23 Jul 2020 15:31:01 +0000 (11:31 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:43 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_foreground.c

index 926c67e870435260d0cf5e1fa3a79f4096f13949..169ddfad7ea04c35d8d5dc3416d1747545a22b9d 100644 (file)
@@ -578,18 +578,22 @@ open_bucket_add_buckets(struct bch_fs *c,
                __clear_bit(ob->ptr.dev, devs.d);
 
        if (erasure_code) {
-               get_buckets_from_writepoint(c, ptrs, wp, &devs,
-                                           nr_replicas, nr_effective,
-                                           have_cache, flags, true);
-               if (*nr_effective >= nr_replicas)
-                       return 0;
+               if (!ec_open_bucket(c, ptrs)) {
+                       get_buckets_from_writepoint(c, ptrs, wp, &devs,
+                                                   nr_replicas, nr_effective,
+                                                   have_cache, flags, true);
+                       if (*nr_effective >= nr_replicas)
+                               return 0;
+               }
 
-               bucket_alloc_from_stripe(c, ptrs, wp, &devs,
-                                        target, erasure_code,
-                                        nr_replicas, nr_effective,
-                                        have_cache, flags);
-               if (*nr_effective >= nr_replicas)
-                       return 0;
+               if (!ec_open_bucket(c, ptrs)) {
+                       bucket_alloc_from_stripe(c, ptrs, wp, &devs,
+                                                target, erasure_code,
+                                                nr_replicas, nr_effective,
+                                                have_cache, flags);
+                       if (*nr_effective >= nr_replicas)
+                               return 0;
+               }
        }
 
        get_buckets_from_writepoint(c, ptrs, wp, &devs,