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 <konrad.sztyber@intel.com>
Change-Id: I5f6f4146c736d9c8e04b5667117d6e7ed824a654
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17088
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
This commit is contained in:
Konrad Sztyber 2023-03-08 12:30:10 +01:00 committed by Ben Walker
parent 454ee6be5e
commit 12492cb927

View File

@ -76,6 +76,17 @@ static void vbdev_crypto_examine(struct spdk_bdev *bdev);
static int vbdev_crypto_claim(const char *bdev_name); 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 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 static void
crypto_write(struct crypto_io_channel *crypto_ch, struct spdk_bdev_io *bdev_io) 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); vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_ENCRYPT_DONE);
} else { } else {
SPDK_ERRLOG("Failed to submit bdev_io!\n"); SPDK_ERRLOG("Failed to submit bdev_io!\n");
spdk_accel_sequence_abort(crypto_io->seq); crypto_io_fail(crypto_io);
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
} }
} }
} }
@ -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); vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_NEW);
} else { } else {
SPDK_ERRLOG("Failed to submit bdev_io!\n"); SPDK_ERRLOG("Failed to submit bdev_io!\n");
spdk_accel_sequence_abort(crypto_io->seq); crypto_io_fail(crypto_io);
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
} }
return; 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); &crypto_io->bdev_io_wait);
if (rc != 0) { if (rc != 0) {
SPDK_ERRLOG("Queue io failed in vbdev_crypto_queue_io, rc=%d.\n", rc); SPDK_ERRLOG("Queue io failed in vbdev_crypto_queue_io, rc=%d.\n", rc);
spdk_accel_sequence_abort(crypto_io->seq); crypto_io_fail(crypto_io);
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
} }
} }
@ -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); vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_DECRYPT_DONE);
} else { } else {
SPDK_ERRLOG("Failed to submit bdev_io!\n"); SPDK_ERRLOG("Failed to submit bdev_io!\n");
spdk_accel_sequence_abort(crypto_io->seq); crypto_io_fail(crypto_io);
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
} }
} }
} }
@ -266,8 +273,7 @@ crypto_read_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io,
int rc; int rc;
if (!success) { if (!success) {
spdk_accel_sequence_abort(crypto_io->seq); crypto_io_fail(crypto_io);
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
return; 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); vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_NEW);
} else { } else {
SPDK_ERRLOG("Failed to submit bdev_io!\n"); SPDK_ERRLOG("Failed to submit bdev_io!\n");
spdk_accel_sequence_abort(crypto_io->seq); crypto_io_fail(crypto_io);
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
} }
return; 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: case SPDK_BDEV_IO_TYPE_WRITE_ZEROES:
default: default:
SPDK_ERRLOG("crypto: unknown I/O type %d\n", bdev_io->type); SPDK_ERRLOG("crypto: unknown I/O type %d\n", bdev_io->type);
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); rc = -EINVAL;
return; break;
} }
if (rc != 0) { 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); vbdev_crypto_queue_io(bdev_io, CRYPTO_IO_NEW);
} else { } else {
SPDK_ERRLOG("Failed to submit bdev_io!\n"); SPDK_ERRLOG("Failed to submit bdev_io!\n");
spdk_accel_sequence_abort(crypto_io->seq); crypto_io_fail(crypto_io);
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
} }
} }
} }