From fbec702944c3315187bcdb13d9bc91abaaeea717 Mon Sep 17 00:00:00 2001 From: paul luse Date: Thu, 17 Jan 2019 10:37:48 -0500 Subject: [PATCH] bdev/crypto: Set QAT alignment requirement For QAT, a single operation can be described at most by one IOV. To assure that we don't get memory buffers that are sub-block sized, set the alignment requirement to the block size of the underlying device. Change-Id: I4071bb89e696fc40e010798bd76520e5fb765217 Signed-off-by: paul luse Reviewed-on: https://review.gerrithub.io/c/440988 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Reviewed-by: Darek Stojaczyk Chandler-Test-Pool: SPDK Automated Test System --- lib/bdev/crypto/vbdev_crypto.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/bdev/crypto/vbdev_crypto.c b/lib/bdev/crypto/vbdev_crypto.c index a03f4b338..b8ae8cbcc 100644 --- a/lib/bdev/crypto/vbdev_crypto.c +++ b/lib/bdev/crypto/vbdev_crypto.c @@ -1430,7 +1430,14 @@ vbdev_crypto_claim(struct spdk_bdev *bdev) vbdev->crypto_bdev.product_name = "crypto"; vbdev->crypto_bdev.write_cache = bdev->write_cache; - vbdev->crypto_bdev.required_alignment = bdev->required_alignment; + if (strcmp(vbdev->drv_name, QAT) == 0) { + vbdev->crypto_bdev.required_alignment = + spdk_max(spdk_u32log2(bdev->blocklen), bdev->required_alignment); + SPDK_NOTICELOG("QAT in use: Required alignment set to %u\n", + vbdev->crypto_bdev.required_alignment); + } else { + vbdev->crypto_bdev.required_alignment = bdev->required_alignment; + } /* Note: CRYPTO_MAX_IO is in units of bytes, optimal_io_boundary is * in units of blocks. */