nvmf: Set required ZNS opcodes for NVMe-oF ZNS support
In order to connect to a zoned SPDK NVMe-oF target the ZNS specific identify functions must be implemented and the supported ZNS opcodes must be set accordingly. Enable the zone management send and receive opcodes within the `g_cmds_and_effect_log_page`. If the backing zoned bdev supports the zone append command the `nvmf_get_cmds_and_effects_log_page` function will respect that in the returned data structure. Signed-off-by: Dennis Maisenbacher <dennis.maisenbacher@wdc.com> Change-Id: Id9dd22a8696aa28177cc52e1f3587e10194de910 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16045 Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
a36785df71
commit
2aa7fa7002
@ -2450,22 +2450,32 @@ static const struct spdk_nvme_cmds_and_effect_log_page g_cmds_and_effect_log_pag
|
||||
[SPDK_NVME_OPC_DATASET_MANAGEMENT] = {1, 1, 0, 0, 0, 0, 0, 0},
|
||||
/* COMPARE */
|
||||
[SPDK_NVME_OPC_COMPARE] = {1, 0, 0, 0, 0, 0, 0, 0},
|
||||
/* ZONE MANAGEMENT SEND */
|
||||
[SPDK_NVME_OPC_ZONE_MGMT_SEND] = {1, 1, 0, 0, 0, 0, 0, 0},
|
||||
/* ZONE MANAGEMENT RECEIVE */
|
||||
[SPDK_NVME_OPC_ZONE_MGMT_RECV] = {1, 0, 0, 0, 0, 0, 0, 0},
|
||||
},
|
||||
};
|
||||
|
||||
static void
|
||||
nvmf_get_cmds_and_effects_log_page(struct iovec *iovs, int iovcnt,
|
||||
nvmf_get_cmds_and_effects_log_page(struct spdk_nvmf_ctrlr *ctrlr, struct iovec *iovs, int iovcnt,
|
||||
uint64_t offset, uint32_t length)
|
||||
{
|
||||
uint32_t page_size = sizeof(struct spdk_nvme_cmds_and_effect_log_page);
|
||||
size_t copy_len = 0;
|
||||
struct copy_iovs_ctx copy_ctx;
|
||||
struct spdk_nvme_cmds_and_effect_log_page cmds_and_effect_log_page = g_cmds_and_effect_log_page;
|
||||
struct spdk_nvme_cmds_and_effect_entry csupp_and_lbcc_effect_entry = {1, 1, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
_init_copy_iovs_ctx(©_ctx, iovs, iovcnt);
|
||||
|
||||
if (offset < page_size) {
|
||||
if (ctrlr->subsys->zone_append_supported) {
|
||||
cmds_and_effect_log_page.io_cmds_supported[SPDK_NVME_OPC_ZONE_APPEND] =
|
||||
csupp_and_lbcc_effect_entry;
|
||||
}
|
||||
copy_len = spdk_min(page_size - offset, length);
|
||||
_copy_buf_to_iovs(©_ctx, (char *)(&g_cmds_and_effect_log_page) + offset, copy_len);
|
||||
_copy_buf_to_iovs(©_ctx, (char *)(&cmds_and_effect_log_page) + offset, copy_len);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2603,7 +2613,7 @@ nvmf_ctrlr_get_log_page(struct spdk_nvmf_request *req)
|
||||
goto invalid_log_page;
|
||||
}
|
||||
case SPDK_NVME_LOG_COMMAND_EFFECTS_LOG:
|
||||
nvmf_get_cmds_and_effects_log_page(req->iov, req->iovcnt, offset, len);
|
||||
nvmf_get_cmds_and_effects_log_page(ctrlr, req->iov, req->iovcnt, offset, len);
|
||||
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
||||
case SPDK_NVME_LOG_CHANGED_NS_LIST:
|
||||
nvmf_get_changed_ns_list_log_page(ctrlr, req->iov, req->iovcnt, offset, len, rae);
|
||||
|
Loading…
Reference in New Issue
Block a user