From 1421bea38ace65f167a73ae3f544205766c1778c Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Wed, 12 Aug 2020 13:48:02 -0400 Subject: [PATCH] bcachefs: Don't block on allocations when only writing to specific device Since the copygc thread is now global and not per device, we're not freeing up space on any one device in bounded time - and indeed we never really were, since rebalance wasn't moving data around between devices with that objective. Signed-off-by: Kent Overstreet Signed-off-by: Kent Overstreet --- fs/bcachefs/io.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c index 0f4c5c3c408c7..5250171498550 100644 --- a/fs/bcachefs/io.c +++ b/fs/bcachefs/io.c @@ -1090,6 +1090,11 @@ again: goto err; } + /* + * The copygc thread is now global, which means it's no longer + * freeing up space on specific disks, which means that + * allocations for specific disks may hang arbitrarily long: + */ wp = bch2_alloc_sectors_start(c, op->target, op->opts.erasure_code, @@ -1099,7 +1104,8 @@ again: op->nr_replicas_required, op->alloc_reserve, op->flags, - (op->flags & BCH_WRITE_ALLOC_NOWAIT) ? NULL : cl); + (op->flags & (BCH_WRITE_ALLOC_NOWAIT| + BCH_WRITE_ONLY_SPECIFIED_DEVS)) ? NULL : cl); EBUG_ON(!wp); if (unlikely(IS_ERR(wp))) { -- 2.30.2