From 444d4e8c35d4b9dd7459faba1f12c6c5e71533a7 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Thu, 20 Apr 2023 11:35:26 +0200 Subject: [PATCH] bdev: add common sequence finish callback There are some common operations that need to be done each time a sequence is executed (and more will be added in the following patches), so it makes sense to have a common callback. data_transfer_cpl is used for executing user's callbacks since it's unused at this point. Signed-off-by: Konrad Sztyber Change-Id: I4570acbdbe158512d13c31c0ee0c7bb7bf62d18c Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17678 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris --- lib/bdev/bdev.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index ef33003e6..5f5301635 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -1024,7 +1024,6 @@ bdev_io_submit_sequence_cb(void *ctx, int status) bdev_io->u.bdev.accel_sequence = NULL; bdev_io->internal.accel_sequence = NULL; - TAILQ_REMOVE(&bdev_io->internal.ch->io_accel_exec, bdev_io, internal.link); if (spdk_unlikely(status != 0)) { SPDK_ERRLOG("Failed to execute accel sequence, status=%d\n", status); @@ -1037,7 +1036,16 @@ bdev_io_submit_sequence_cb(void *ctx, int status) } static void -bdev_io_exec_sequence(struct spdk_bdev_io *bdev_io, spdk_accel_completion_cb cb_fn) +bdev_io_exec_sequence_cb(void *ctx, int status) +{ + struct spdk_bdev_io *bdev_io = ctx; + + TAILQ_REMOVE(&bdev_io->internal.ch->io_accel_exec, bdev_io, internal.link); + bdev_io->internal.data_transfer_cpl(bdev_io, status); +} + +static void +bdev_io_exec_sequence(struct spdk_bdev_io *bdev_io, void (*cb_fn)(void *ctx, int status)) { assert(bdev_io_needs_sequence_exec(bdev_io->internal.desc, bdev_io)); assert(bdev_io->type == SPDK_BDEV_IO_TYPE_WRITE || bdev_io->type == SPDK_BDEV_IO_TYPE_READ); @@ -1051,7 +1059,10 @@ bdev_io_exec_sequence(struct spdk_bdev_io *bdev_io, spdk_accel_completion_cb cb_ } TAILQ_INSERT_TAIL(&bdev_io->internal.ch->io_accel_exec, bdev_io, internal.link); - spdk_accel_sequence_finish(bdev_io->internal.accel_sequence, cb_fn, bdev_io); + bdev_io->internal.data_transfer_cpl = cb_fn; + + spdk_accel_sequence_finish(bdev_io->internal.accel_sequence, + bdev_io_exec_sequence_cb, bdev_io); } static void @@ -3105,8 +3116,6 @@ bdev_io_complete_parent_sequence_cb(void *ctx, int status) /* u.bdev.accel_sequence should have already been cleared at this point */ assert(bdev_io->u.bdev.accel_sequence == NULL); assert(bdev_io->internal.status == SPDK_BDEV_IO_STATUS_SUCCESS); - - TAILQ_REMOVE(&bdev_io->internal.ch->io_accel_exec, bdev_io, internal.link); bdev_io->internal.accel_sequence = NULL; if (spdk_unlikely(status != 0)) { @@ -6969,8 +6978,6 @@ bdev_io_complete_sequence_cb(void *ctx, int status) /* u.bdev.accel_sequence should have already been cleared at this point */ assert(bdev_io->u.bdev.accel_sequence == NULL); assert(bdev_io->internal.status == SPDK_BDEV_IO_STATUS_SUCCESS); - - TAILQ_REMOVE(&bdev_io->internal.ch->io_accel_exec, bdev_io, internal.link); bdev_io->internal.accel_sequence = NULL; if (spdk_unlikely(status != 0)) {