From 56fe6fdf859720561ee99047a41f6412e58d4081 Mon Sep 17 00:00:00 2001 From: John Levon Date: Wed, 4 Jan 2023 10:01:30 +0000 Subject: [PATCH] lib/nvmf: relocate iov utility code Move the IOV handling code in ctrlr.c to the top of the file, for subsequent use. Signed-off-by: John Levon Change-Id: Ibddde1cb964d8aaecf4673ffa6d4147d0a48020c Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16120 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Reviewed-by: Thanos Makatos Reviewed-by: Changpeng Liu --- lib/nvmf/ctrlr.c | 126 +++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 9b75ec888..605b8ff1f 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -51,6 +51,69 @@ static struct spdk_nvmf_custom_admin_cmd g_nvmf_custom_admin_cmd_hdlrs[SPDK_NVME static void _nvmf_request_complete(void *ctx); +struct copy_iovs_ctx { + struct iovec *iovs; + int iovcnt; + int cur_iov_idx; + size_t cur_iov_offset; +}; + +static void +_clear_iovs(struct iovec *iovs, int iovcnt) +{ + int iov_idx = 0; + struct iovec *iov; + + while (iov_idx < iovcnt) { + iov = &iovs[iov_idx]; + memset(iov->iov_base, 0, iov->iov_len); + iov_idx++; + } +} + +static void +_init_copy_iovs_ctx(struct copy_iovs_ctx *copy_ctx, struct iovec *iovs, int iovcnt) +{ + copy_ctx->iovs = iovs; + copy_ctx->iovcnt = iovcnt; + copy_ctx->cur_iov_idx = 0; + copy_ctx->cur_iov_offset = 0; +} + +static size_t +_copy_buf_to_iovs(struct copy_iovs_ctx *copy_ctx, const void *buf, size_t buf_len) +{ + size_t len, iov_remain_len, copied_len = 0; + struct iovec *iov; + + if (buf_len == 0) { + return 0; + } + + while (copy_ctx->cur_iov_idx < copy_ctx->iovcnt) { + iov = ©_ctx->iovs[copy_ctx->cur_iov_idx]; + iov_remain_len = iov->iov_len - copy_ctx->cur_iov_offset; + if (iov_remain_len == 0) { + copy_ctx->cur_iov_idx++; + copy_ctx->cur_iov_offset = 0; + continue; + } + + len = spdk_min(iov_remain_len, buf_len - copied_len); + memcpy((char *)iov->iov_base + copy_ctx->cur_iov_offset, + (const char *)buf + copied_len, + len); + copied_len += len; + copy_ctx->cur_iov_offset += len; + + if (buf_len == copied_len) { + return copied_len; + } + } + + return copied_len; +} + static inline void nvmf_invalid_connect_response(struct spdk_nvmf_fabric_connect_rsp *rsp, uint8_t iattr, uint16_t ipo) @@ -2052,69 +2115,6 @@ nvmf_ctrlr_async_event_request(struct spdk_nvmf_request *req) return SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS; } -struct copy_iovs_ctx { - struct iovec *iovs; - int iovcnt; - int cur_iov_idx; - size_t cur_iov_offset; -}; - -static void -_clear_iovs(struct iovec *iovs, int iovcnt) -{ - int iov_idx = 0; - struct iovec *iov; - - while (iov_idx < iovcnt) { - iov = &iovs[iov_idx]; - memset(iov->iov_base, 0, iov->iov_len); - iov_idx++; - } -} - -static void -_init_copy_iovs_ctx(struct copy_iovs_ctx *copy_ctx, struct iovec *iovs, int iovcnt) -{ - copy_ctx->iovs = iovs; - copy_ctx->iovcnt = iovcnt; - copy_ctx->cur_iov_idx = 0; - copy_ctx->cur_iov_offset = 0; -} - -static size_t -_copy_buf_to_iovs(struct copy_iovs_ctx *copy_ctx, const void *buf, size_t buf_len) -{ - size_t len, iov_remain_len, copied_len = 0; - struct iovec *iov; - - if (buf_len == 0) { - return 0; - } - - while (copy_ctx->cur_iov_idx < copy_ctx->iovcnt) { - iov = ©_ctx->iovs[copy_ctx->cur_iov_idx]; - iov_remain_len = iov->iov_len - copy_ctx->cur_iov_offset; - if (iov_remain_len == 0) { - copy_ctx->cur_iov_idx++; - copy_ctx->cur_iov_offset = 0; - continue; - } - - len = spdk_min(iov_remain_len, buf_len - copied_len); - memcpy((char *)iov->iov_base + copy_ctx->cur_iov_offset, - (const char *)buf + copied_len, - len); - copied_len += len; - copy_ctx->cur_iov_offset += len; - - if (buf_len == copied_len) { - return copied_len; - } - } - - return copied_len; -} - static void nvmf_get_firmware_slot_log_page(struct iovec *iovs, int iovcnt, uint64_t offset, uint32_t length) {