From 49564357578eb86c9b867faa5b021e0eb7532fdb Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Sun, 13 Dec 2020 22:22:54 +0900 Subject: [PATCH] bdev/nvme: Call bdev_nvme_readv() directly when buffer is already allocated bdev_nvme_submit_request() calls bdev_nvme_get_buf_cb() directly when the buffer is already allocated. This is for performance improvement but will be helpful for the upcoming multipath feature to retry read I/O submission because buffer should be allocated only once. By reading the code a little more critically, bdev_nvme_submit_request() can call bdev_nvme_readv() directly in this case, and do in this patch. Signed-off-by: Shuhei Matsumoto Change-Id: I005c70deabf7fbfe84b7029e9ef103ae122605e1 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5558 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Aleksey Marchuk --- module/bdev/nvme/bdev_nvme.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 2c042a0aa..cce57598a 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -642,12 +642,20 @@ _bdev_nvme_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_ switch (bdev_io->type) { case SPDK_BDEV_IO_TYPE_READ: if (bdev_io->u.bdev.iovs && bdev_io->u.bdev.iovs[0].iov_base) { - bdev_nvme_get_buf_cb(ch, bdev_io, true); + return bdev_nvme_readv(nbdev->nvme_ns->ns, + nvme_ch->qpair, + nbdev_io, + bdev_io->u.bdev.iovs, + bdev_io->u.bdev.iovcnt, + bdev_io->u.bdev.md_buf, + bdev_io->u.bdev.num_blocks, + bdev_io->u.bdev.offset_blocks, + bdev->dif_check_flags); } else { spdk_bdev_io_get_buf(bdev_io, bdev_nvme_get_buf_cb, bdev_io->u.bdev.num_blocks * bdev->blocklen); + return 0; } - return 0; case SPDK_BDEV_IO_TYPE_WRITE: return bdev_nvme_writev(nbdev->nvme_ns->ns,