From 12492cb927f1bc4b7c7924aa1773e1bdec054c3e Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Wed, 8 Mar 2023 12:30:10 +0100 Subject: [PATCH] bdev/crypto: add crypto_io_fail() There are lots of places when we need to abort accel sequence and complete bdev_io with a failed status, so move that code to a dedicated function. Signed-off-by: Konrad Sztyber Change-Id: I5f6f4146c736d9c8e04b5667117d6e7ed824a654 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17088 Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Aleksey Marchuk Reviewed-by: Artur Paszkiewicz --- module/bdev/crypto/vbdev_crypto.c | 36 +++++++++++++++++-------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/module/bdev/crypto/vbdev_crypto.c b/module/bdev/crypto/vbdev_crypto.c index 6f92de5fc..89c12648c 100644 --- a/module/bdev/crypto/vbdev_crypto.c +++ b/module/bdev/crypto/vbdev_crypto.c @@ -76,6 +76,17 @@ static void vbdev_crypto_examine(struct spdk_bdev *bdev); static int vbdev_crypto_claim(const char *bdev_name); static void vbdev_crypto_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io); +static void +crypto_io_fail(struct crypto_bdev_io *crypto_io) +{ + struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(crypto_io); + + /* This function can only be used to fail an IO that hasn't been sent to the base bdev, + * otherwise accel sequence might have already been executed/aborted. */ + spdk_accel_sequence_abort(crypto_io->seq); + spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); +} + static void crypto_write(struct crypto_io_channel *crypto_ch, struct spdk_bdev_io *bdev_io) { @@ -101,8 +112,7 @@ crypto_write(struct crypto_io_channel *crypto_ch, struct spdk_bdev_io *bdev_io) vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_ENCRYPT_DONE); } else { SPDK_ERRLOG("Failed to submit bdev_io!\n"); - spdk_accel_sequence_abort(crypto_io->seq); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + crypto_io_fail(crypto_io); } } } @@ -155,8 +165,7 @@ crypto_encrypt(struct crypto_io_channel *crypto_ch, struct spdk_bdev_io *bdev_io vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_NEW); } else { SPDK_ERRLOG("Failed to submit bdev_io!\n"); - spdk_accel_sequence_abort(crypto_io->seq); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + crypto_io_fail(crypto_io); } return; @@ -219,8 +228,7 @@ vbdev_crypto_queue_io(struct spdk_bdev_io *bdev_io, enum crypto_io_resubmit_stat &crypto_io->bdev_io_wait); if (rc != 0) { SPDK_ERRLOG("Queue io failed in vbdev_crypto_queue_io, rc=%d.\n", rc); - spdk_accel_sequence_abort(crypto_io->seq); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + crypto_io_fail(crypto_io); } } @@ -246,8 +254,7 @@ crypto_read(struct crypto_io_channel *crypto_ch, struct spdk_bdev_io *bdev_io) vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_DECRYPT_DONE); } else { SPDK_ERRLOG("Failed to submit bdev_io!\n"); - spdk_accel_sequence_abort(crypto_io->seq); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + crypto_io_fail(crypto_io); } } } @@ -266,8 +273,7 @@ crypto_read_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io, int rc; if (!success) { - spdk_accel_sequence_abort(crypto_io->seq); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + crypto_io_fail(crypto_io); return; } @@ -283,8 +289,7 @@ crypto_read_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io, vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_NEW); } else { SPDK_ERRLOG("Failed to submit bdev_io!\n"); - spdk_accel_sequence_abort(crypto_io->seq); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + crypto_io_fail(crypto_io); } return; @@ -351,8 +356,8 @@ vbdev_crypto_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bde case SPDK_BDEV_IO_TYPE_WRITE_ZEROES: default: SPDK_ERRLOG("crypto: unknown I/O type %d\n", bdev_io->type); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); - return; + rc = -EINVAL; + break; } if (rc != 0) { @@ -361,8 +366,7 @@ vbdev_crypto_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bde vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_NEW); } else { SPDK_ERRLOG("Failed to submit bdev_io!\n"); - spdk_accel_sequence_abort(crypto_io->seq); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + crypto_io_fail(crypto_io); } } }