From: Kent Overstreet Date: Wed, 20 Feb 2019 21:00:03 +0000 (-0500) Subject: bcachefs: fix a deadlock on startup X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=86a225c42d44ba966504801c6d953745184ea9cf;p=linux.git bcachefs: fix a deadlock on startup Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c index 04b75367fcde5..fd39eeae5740e 100644 --- a/fs/bcachefs/alloc_background.c +++ b/fs/bcachefs/alloc_background.c @@ -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) diff --git a/fs/bcachefs/journal_io.c b/fs/bcachefs/journal_io.c index e5e50be80126f..1f7bd314f61ee 100644 --- a/fs/bcachefs/journal_io.c +++ b/fs/bcachefs/journal_io.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: