From 29ad31c780d1e4e37244140442aaec41c3efb7d6 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 18 Jan 2025 02:05:57 -0500 Subject: [PATCH] bcachefs: Self healing writes are BCH_WRITE_alloc_nowait If a drive is failing and we're moving data off of it, we can't necessairly depend on capacity/disk reservation calculations to avoid deadlocking/blocking on the allocator. And, we don't want to queue up infinite self healing moves anyways. Signed-off-by: Kent Overstreet --- fs/bcachefs/io_read.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/bcachefs/io_read.c b/fs/bcachefs/io_read.c index 7a66feb1c011..bdb554f6db8c 100644 --- a/fs/bcachefs/io_read.c +++ b/fs/bcachefs/io_read.c @@ -188,12 +188,12 @@ static struct bch_read_bio *__promote_alloc(struct btree_trans *trans, goto err; } - struct data_update_opts update_opts = {}; + struct data_update_opts update_opts = { .write_flags = BCH_WRITE_alloc_nowait }; if (!have_io_error(failed)) { update_opts.target = orig->opts.promote_target; update_opts.extra_replicas = 1; - update_opts.write_flags = BCH_WRITE_alloc_nowait|BCH_WRITE_cached; + update_opts.write_flags |= BCH_WRITE_cached; update_opts.write_flags |= BCH_WRITE_only_specified_devs; } else { update_opts.target = orig->opts.foreground_target; -- 2.50.1