diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-17 19:54:39 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-21 20:15:05 -0400 |
commit | 51e23c9d60a42f8da4d2f4d48c86eb00c4e351ea (patch) | |
tree | 779adda1a815bbce14c634c8e1fdbf568bd30821 | |
parent | 8c3fc7cca38459751489f5015f3282a64e452b7e (diff) |
bcachefs: async objs now support bch_write_ops
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/async_objs.c | 6 | ||||
-rw-r--r-- | fs/bcachefs/async_objs_types.h | 1 | ||||
-rw-r--r-- | fs/bcachefs/io_write.c | 6 | ||||
-rw-r--r-- | fs/bcachefs/io_write_types.h | 4 | ||||
-rw-r--r-- | fs/bcachefs/move.c | 1 |
5 files changed, 17 insertions, 1 deletions
diff --git a/fs/bcachefs/async_objs.c b/fs/bcachefs/async_objs.c index 57e2fe421461..a7cd1f0f0964 100644 --- a/fs/bcachefs/async_objs.c +++ b/fs/bcachefs/async_objs.c @@ -9,6 +9,7 @@ #include "btree_io.h" #include "debug.h" #include "io_read.h" +#include "io_write.h" #include <linux/debugfs.h> @@ -22,6 +23,11 @@ static void rbio_obj_to_text(struct printbuf *out, void *obj) bch2_read_bio_to_text(out, obj); } +static void write_op_obj_to_text(struct printbuf *out, void *obj) +{ + bch2_write_op_to_text(out, obj); +} + static void btree_read_bio_obj_to_text(struct printbuf *out, void *obj) { struct btree_read_bio *rbio = obj; diff --git a/fs/bcachefs/async_objs_types.h b/fs/bcachefs/async_objs_types.h index 310a4f90f49b..8d713c0f5841 100644 --- a/fs/bcachefs/async_objs_types.h +++ b/fs/bcachefs/async_objs_types.h @@ -5,6 +5,7 @@ #define BCH_ASYNC_OBJ_LISTS() \ x(promote) \ x(rbio) \ + x(write_op) \ x(btree_read_bio) \ x(btree_write_bio) diff --git a/fs/bcachefs/io_write.c b/fs/bcachefs/io_write.c index 399df8fede8b..fd4b89d6a96a 100644 --- a/fs/bcachefs/io_write.c +++ b/fs/bcachefs/io_write.c @@ -6,6 +6,7 @@ #include "bcachefs.h" #include "alloc_foreground.h" +#include "async_objs.h" #include "bkey_buf.h" #include "bset.h" #include "btree_update.h" @@ -547,6 +548,7 @@ static void bch2_write_done(struct closure *cl) EBUG_ON(cl->parent); closure_debug_destroy(cl); + async_object_list_del(c, write_op, op->list_idx); if (op->end_io) op->end_io(op); } @@ -1673,6 +1675,8 @@ CLOSURE_CALLBACK(bch2_write) BUG_ON(!op->write_point.v); BUG_ON(bkey_eq(op->pos, POS_MAX)); + async_object_list_add(c, write_op, op, &op->list_idx); + if (op->flags & BCH_WRITE_only_specified_devs) op->flags |= BCH_WRITE_alloc_nowait; @@ -1717,6 +1721,7 @@ err: bch2_disk_reservation_put(c, &op->res); closure_debug_destroy(&op->cl); + async_object_list_del(c, write_op, op->list_idx); if (op->end_io) op->end_io(op); } @@ -1750,6 +1755,7 @@ void bch2_write_op_to_text(struct printbuf *out, struct bch_write_op *op) prt_printf(out, "nr_replicas_required:\t%u\n", op->nr_replicas_required); prt_printf(out, "ref:\t%u\n", closure_nr_remaining(&op->cl)); + prt_printf(out, "ret\t%s\n", bch2_err_str(op->error)); printbuf_indent_sub(out, 2); } diff --git a/fs/bcachefs/io_write_types.h b/fs/bcachefs/io_write_types.h index b4a6a44a45d0..5da4eb8bb6f6 100644 --- a/fs/bcachefs/io_write_types.h +++ b/fs/bcachefs/io_write_types.h @@ -71,6 +71,10 @@ struct bch_write_op { void (*end_io)(struct bch_write_op *); u64 start_time; +#ifdef CONFIG_BCACHEFS_ASYNC_OBJECT_LISTS + unsigned list_idx; +#endif + unsigned written; /* sectors */ u16 flags; s16 error; /* dio write path expects it to hold -ERESTARTSYS... */ diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c index 0dd3bec3acff..79f4722621d5 100644 --- a/fs/bcachefs/move.c +++ b/fs/bcachefs/move.c @@ -109,7 +109,6 @@ static void move_write_done(struct bch_write_op *op) struct printbuf buf = PRINTBUF; bch2_write_op_to_text(&buf, op); - prt_printf(&buf, "ret\t%s\n", bch2_err_str(op->error)); trace_io_move_write_fail(c, buf.buf); printbuf_exit(&buf); } |