diff --git a/include/spdk/nvme_spec.h b/include/spdk/nvme_spec.h index dfa810e08..64ef1bb8b 100644 --- a/include/spdk/nvme_spec.h +++ b/include/spdk/nvme_spec.h @@ -1891,6 +1891,11 @@ struct spdk_nvme_cdata_oacs { uint16_t oacs_rsvd : 6; }; +struct spdk_nvme_cdata_fuses { + uint16_t compare_and_write : 1; + uint16_t reserved : 15; +}; + struct __attribute__((packed)) spdk_nvme_ctrlr_data { /* bytes 0-255: controller capabilities and features */ @@ -2181,10 +2186,7 @@ struct __attribute__((packed)) spdk_nvme_ctrlr_data { struct spdk_nvme_cdata_oncs oncs; /** fused operation support */ - struct { - uint16_t compare_and_write : 1; - uint16_t reserved : 15; - } fuses; + struct spdk_nvme_cdata_fuses fuses; /** format nvm attributes */ struct { diff --git a/include/spdk/nvmf_transport.h b/include/spdk/nvmf_transport.h index 9dcb4b14a..19e61d94b 100644 --- a/include/spdk/nvmf_transport.h +++ b/include/spdk/nvmf_transport.h @@ -184,6 +184,7 @@ struct spdk_nvmf_ctrlr_data { uint8_t ieee[3]; struct spdk_nvme_cdata_oacs oacs; struct spdk_nvme_cdata_oncs oncs; + struct spdk_nvme_cdata_fuses fuses; struct spdk_nvme_cdata_sgls sgls; struct spdk_nvme_cdata_nvmf_specific nvmf_specific; }; diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 5278d4fd6..b066fbbe4 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -291,6 +291,7 @@ nvmf_ctrlr_cdata_init(struct spdk_nvmf_transport *transport, struct spdk_nvmf_su cdata->ieee[1] = 0xd2; cdata->ieee[2] = 0x5c; cdata->oncs.reservations = 1; + cdata->fuses.compare_and_write = 1; cdata->sgls.supported = 1; cdata->sgls.keyed_sgl = 1; cdata->sgls.sgl_offset = 1; @@ -2635,7 +2636,7 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c cdata->elpe = 127; cdata->maxcmd = transport->opts.max_queue_depth; cdata->sgls = ctrlr->cdata.sgls; - cdata->fuses.compare_and_write = 1; + cdata->fuses = ctrlr->cdata.fuses; cdata->acwu = 0; /* ACWU is 0-based. */ if (subsystem->flags.ana_reporting) { cdata->mnan = subsystem->max_nsid;