mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-26 04:16:39 +00:00
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 <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
9f115ce9e9
commit
1421bea38a
1 changed files with 7 additions and 1 deletions
|
@ -1090,6 +1090,11 @@ static void __bch2_write(struct closure *cl)
|
|||
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 @@ static void __bch2_write(struct closure *cl)
|
|||
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))) {
|
||||
|
|
Loading…
Reference in a new issue