From: Kent Overstreet Date: Sat, 18 Jan 2025 07:05:57 +0000 (-0500) Subject: bcachefs: Self healing writes are BCH_WRITE_alloc_nowait X-Git-Tag: v6.15-rc1~146^2~157 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=29ad31c780d1e4e37244140442aaec41c3efb7d6;p=thirdparty%2Fkernel%2Flinux.git 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 --- diff --git a/fs/bcachefs/io_read.c b/fs/bcachefs/io_read.c index 7a66feb1c011e..bdb554f6db8c6 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;