bcachefs: fix a deadlock on startup
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
3c5fa33a55
commit
86a225c42d
@ -1678,7 +1678,6 @@ int bch2_fs_allocator_start(struct bch_fs *c)
|
||||
{
|
||||
struct bch_dev *ca;
|
||||
unsigned i;
|
||||
bool wrote;
|
||||
int ret;
|
||||
|
||||
down_read(&c->gc_lock);
|
||||
@ -1697,8 +1696,7 @@ int bch2_fs_allocator_start(struct bch_fs *c)
|
||||
}
|
||||
|
||||
set_bit(BCH_FS_ALLOCATOR_RUNNING, &c->flags);
|
||||
|
||||
return bch2_alloc_write(c, false, &wrote);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bch2_fs_allocator_background_init(struct bch_fs *c)
|
||||
|
@ -888,9 +888,18 @@ err:
|
||||
static unsigned journal_dev_buckets_available(struct journal *j,
|
||||
struct journal_device *ja)
|
||||
{
|
||||
struct bch_fs *c = container_of(j, struct bch_fs, journal);
|
||||
unsigned next = (ja->cur_idx + 1) % 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
|
||||
* will make another bucket available:
|
||||
|
Loading…
x
Reference in New Issue
Block a user