diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 541c47f56..eab00ddcc 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -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);