Commit 86a225c4 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: fix a deadlock on startup

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 3c5fa33a
...@@ -1678,7 +1678,6 @@ int bch2_fs_allocator_start(struct bch_fs *c) ...@@ -1678,7 +1678,6 @@ int bch2_fs_allocator_start(struct bch_fs *c)
{ {
struct bch_dev *ca; struct bch_dev *ca;
unsigned i; unsigned i;
bool wrote;
int ret; int ret;
down_read(&c->gc_lock); down_read(&c->gc_lock);
...@@ -1697,8 +1696,7 @@ int bch2_fs_allocator_start(struct bch_fs *c) ...@@ -1697,8 +1696,7 @@ int bch2_fs_allocator_start(struct bch_fs *c)
} }
set_bit(BCH_FS_ALLOCATOR_RUNNING, &c->flags); set_bit(BCH_FS_ALLOCATOR_RUNNING, &c->flags);
return 0;
return bch2_alloc_write(c, false, &wrote);
} }
void bch2_fs_allocator_background_init(struct bch_fs *c) void bch2_fs_allocator_background_init(struct bch_fs *c)
......
...@@ -888,9 +888,18 @@ int bch2_journal_replay(struct bch_fs *c, struct list_head *list) ...@@ -888,9 +888,18 @@ int bch2_journal_replay(struct bch_fs *c, struct list_head *list)
static unsigned journal_dev_buckets_available(struct journal *j, static unsigned journal_dev_buckets_available(struct journal *j,
struct journal_device *ja) struct journal_device *ja)
{ {
struct bch_fs *c = container_of(j, struct bch_fs, journal);
unsigned next = (ja->cur_idx + 1) % ja->nr; unsigned next = (ja->cur_idx + 1) % ja->nr;
unsigned available = (ja->last_idx + ja->nr - next) % ja->nr; unsigned available = (ja->last_idx + ja->nr - next) % ja->nr;
/*
* Allocator startup needs some journal space before we can do journal
* replay:
*/
if (available &&
test_bit(BCH_FS_ALLOCATOR_STARTED, &c->flags))
available--;
/* /*
* Don't use the last bucket unless writing the new last_seq * Don't use the last bucket unless writing the new last_seq
* will make another bucket available: * will make another bucket available:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment