bcachefs: Kill bch2_ec_mem_alloc()
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 27 Dec 2021 03:27:10 +0000 (22:27 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:20 +0000 (17:09 -0400)
bch2_ec_mem_alloc() was only used by GC, and there's no real need to
preallocate the stripes radix tree since we can cope fine with memory
allocation failure when we use the radix tree. This deletes a fair bit
of code, and it's also needed for the upcoming patch because
bch2_btree_iter_peek_prev() won't be working before journal replay
completes (and using it was incorrect previously, as well).

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/btree_gc.c
fs/bcachefs/buckets.c
fs/bcachefs/ec.c
fs/bcachefs/ec.h

index fcad6e38a599d5e75f94d6830d265b4ec2885d2f..12f2faca4fa3e0e440ccfb02251c674f69655596 100644 (file)
@@ -1270,7 +1270,6 @@ static int bch2_gc_start(struct bch_fs *c,
 {
        struct bch_dev *ca = NULL;
        unsigned i;
-       int ret;
 
        BUG_ON(c->usage_gc);
 
@@ -1302,12 +1301,6 @@ static int bch2_gc_start(struct bch_fs *c,
                }
        }
 
-       ret = bch2_ec_mem_alloc(c, true);
-       if (ret) {
-               bch_err(c, "error allocating ec gc mem");
-               return ret;
-       }
-
        percpu_down_write(&c->mark_lock);
 
        /*
index 917575597ce5c1a6f828f1add01dcffcd64ef10b..a0b455b343acc2c85b0e47d079d8137e1ddee0e8 100644 (file)
@@ -1094,7 +1094,11 @@ static int bch2_mark_stripe(struct btree_trans *trans,
                        spin_unlock(&c->ec_stripes_heap_lock);
                }
        } else {
-               struct gc_stripe *m = genradix_ptr(&c->gc_stripes, idx);
+               struct gc_stripe *m =
+                       genradix_ptr_alloc(&c->gc_stripes, idx, GFP_KERNEL);
+
+               if (!m)
+                       return -ENOMEM;
 
                /*
                 * This will be wrong when we bring back runtime gc: we should
index 05f55b74d6413c79d1429dc628e3aca2a5b97002..16e1fb845ce5e80c548bfd8e54c2cce6bc78c48c 100644 (file)
@@ -1608,46 +1608,6 @@ int bch2_stripes_read(struct bch_fs *c)
        return ret;
 }
 
-int bch2_ec_mem_alloc(struct bch_fs *c, bool gc)
-{
-       struct btree_trans trans;
-       struct btree_iter iter;
-       struct bkey_s_c k;
-       size_t i, idx = 0;
-       int ret = 0;
-
-       bch2_trans_init(&trans, c, 0, 0);
-       bch2_trans_iter_init(&trans, &iter, BTREE_ID_stripes, POS(0, U64_MAX), 0);
-
-       k = bch2_btree_iter_prev(&iter);
-       ret = bkey_err(k);
-       if (!ret && k.k)
-               idx = k.k->p.offset + 1;
-
-       bch2_trans_iter_exit(&trans, &iter);
-       bch2_trans_exit(&trans);
-       if (ret)
-               return ret;
-
-       if (!idx)
-               return 0;
-
-       if (!gc &&
-           !init_heap(&c->ec_stripes_heap, roundup_pow_of_two(idx),
-                      GFP_KERNEL))
-               return -ENOMEM;
-#if 0
-       ret = genradix_prealloc(&c->stripes[gc], idx, GFP_KERNEL);
-#else
-       for (i = 0; i < idx; i++)
-               if (!gc
-                   ? !genradix_ptr_alloc(&c->stripes, i, GFP_KERNEL)
-                   : !genradix_ptr_alloc(&c->gc_stripes, i, GFP_KERNEL))
-                       return -ENOMEM;
-#endif
-       return 0;
-}
-
 void bch2_stripes_heap_to_text(struct printbuf *out, struct bch_fs *c)
 {
        ec_stripes_heap *h = &c->ec_stripes_heap;
index 468141072bb47bdee6bd3e2f0ac71b1621fa006c..78d468c7680a2f167070297392dbcabba1204f95 100644 (file)
@@ -217,8 +217,6 @@ void bch2_stripes_heap_start(struct bch_fs *);
 
 int bch2_stripes_read(struct bch_fs *);
 
-int bch2_ec_mem_alloc(struct bch_fs *, bool);
-
 void bch2_stripes_heap_to_text(struct printbuf *, struct bch_fs *);
 void bch2_new_stripes_to_text(struct printbuf *, struct bch_fs *);