Commit 13f914ec authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet
Browse files

bcachefs: Kill bch2_ec_mem_alloc()



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: default avatarKent Overstreet <kent.overstreet@gmail.com>
parent 36f035e9
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -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);

	/*
+5 −1
Original line number Diff line number Diff line
@@ -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
+0 −40
Original line number Diff line number Diff line
@@ -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;
+0 −2
Original line number Diff line number Diff line
@@ -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 *);