From fb1ace6700a2443d91182cc2fc3e12dbd863e69c Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Mon, 26 Jul 2021 10:19:45 -0700 Subject: [PATCH] nvmf: In zcopy, delay setting req->data until end of start operation The data buffer isn't available at the beginning. Change-Id: Ieeb1a297ff52dfdc6cd999d04862a0cd96483650 Signed-off-by: Ben Walker Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8932 Reviewed-by: Jim Harris Reviewed-by: Changpeng Liu Reviewed-by: Aleksey Marchuk Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins --- lib/nvmf/ctrlr.c | 3 --- lib/nvmf/ctrlr_bdev.c | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 65562bf28..529b8b901 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -3601,9 +3601,6 @@ spdk_nvmf_request_zcopy_start(struct spdk_nvmf_request *req) goto end; } - /* backward compatible */ - req->data = req->iov[0].iov_base; - /* Set iovcnt to be the maximum number of * iovs that the ZCOPY can use */ diff --git a/lib/nvmf/ctrlr_bdev.c b/lib/nvmf/ctrlr_bdev.c index 5710cadbb..d301689d5 100644 --- a/lib/nvmf/ctrlr_bdev.c +++ b/lib/nvmf/ctrlr_bdev.c @@ -816,11 +816,15 @@ nvmf_bdev_ctrlr_start_zcopy_complete(struct spdk_bdev_io *bdev_io, bool success, spdk_bdev_io_get_iovec(bdev_io, &iov, &iovcnt); assert(iovcnt <= NVMF_REQ_MAX_BUFFERS); + assert(iovcnt > 0); req->iovcnt = iovcnt; assert(req->iov == iov); + /* backward compatible */ + req->data = req->iov[0].iov_base; + req->zcopy_bdev_io = bdev_io; /* Preserve the bdev_io for the end zcopy */ spdk_nvmf_request_complete(req);