diff --git a/examples/nvme/reserve/reserve.c b/examples/nvme/reserve/reserve.c index 4e0d54e2e..b63203987 100644 --- a/examples/nvme/reserve/reserve.c +++ b/examples/nvme/reserve/reserve.c @@ -170,7 +170,7 @@ reservation_ns_report(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpa int ret, i; uint8_t *payload; struct spdk_nvme_reservation_status_data *status; - struct spdk_nvme_reservation_ctrlr_data *cdata; + struct spdk_nvme_registered_ctrlr_data *cdata; struct spdk_nvme_ns *ns; ns = spdk_nvme_ctrlr_get_ns(ctrlr, ns_id); @@ -204,17 +204,18 @@ reservation_ns_report(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpa } status = (struct spdk_nvme_reservation_status_data *)payload; - fprintf(stdout, "Reservation Generation Counter %u\n", status->generation); - fprintf(stdout, "Reservation type %u\n", status->type); - fprintf(stdout, "Reservation Number of Registered Controllers %u\n", status->nr_regctl); - fprintf(stdout, "Reservation Persist Through Power Loss State %u\n", status->ptpl_state); - for (i = 0; i < status->nr_regctl; i++) { - cdata = (struct spdk_nvme_reservation_ctrlr_data *)(payload + sizeof(struct - spdk_nvme_reservation_status_data) * (i + 1)); - fprintf(stdout, "Controller ID %u\n", cdata->ctrlr_id); + fprintf(stdout, "Reservation Generation Counter %u\n", status->gen); + fprintf(stdout, "Reservation type %u\n", status->rtype); + fprintf(stdout, "Reservation Number of Registered Controllers %u\n", status->regctl); + fprintf(stdout, "Reservation Persist Through Power Loss State %u\n", status->ptpls); + for (i = 0; i < status->regctl; i++) { + cdata = (struct spdk_nvme_registered_ctrlr_data *)(payload + + sizeof(struct spdk_nvme_reservation_status_data) + + sizeof(struct spdk_nvme_registered_ctrlr_data) * i); + fprintf(stdout, "Controller ID %u\n", cdata->cntlid); fprintf(stdout, "Controller Reservation Status %u\n", cdata->rcsts.status); - fprintf(stdout, "Controller Host ID 0x%"PRIx64"\n", cdata->host_id); - fprintf(stdout, "Controller Reservation Key 0x%"PRIx64"\n", cdata->key); + fprintf(stdout, "Controller Host ID 0x%"PRIx64"\n", cdata->hostid); + fprintf(stdout, "Controller Reservation Key 0x%"PRIx64"\n", cdata->rkey); } spdk_dma_free(payload); diff --git a/include/spdk/nvme_spec.h b/include/spdk/nvme_spec.h index 6b180b3f5..7a6df872f 100644 --- a/include/spdk/nvme_spec.h +++ b/include/spdk/nvme_spec.h @@ -1640,32 +1640,57 @@ enum spdk_nvme_reservation_acquire_action { struct __attribute__((packed)) spdk_nvme_reservation_status_data { /** reservation action generation counter */ - uint32_t generation; + uint32_t gen; /** reservation type */ - uint8_t type; + uint8_t rtype; /** number of registered controllers */ - uint16_t nr_regctl; + uint16_t regctl; uint16_t reserved1; /** persist through power loss state */ - uint8_t ptpl_state; + uint8_t ptpls; uint8_t reserved[14]; }; SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_reservation_status_data) == 24, "Incorrect size"); -struct __attribute__((packed)) spdk_nvme_reservation_ctrlr_data { - uint16_t ctrlr_id; +struct __attribute__((packed)) spdk_nvme_reservation_status_extended_data { + struct spdk_nvme_reservation_status_data data; + uint8_t reserved[40]; +}; +SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_reservation_status_extended_data) == 64, + "Incorrect size"); + +struct __attribute__((packed)) spdk_nvme_registered_ctrlr_data { + /** controller id */ + uint16_t cntlid; /** reservation status */ struct { uint8_t status : 1; uint8_t reserved1 : 7; } rcsts; uint8_t reserved2[5]; - /** host identifier */ - uint64_t host_id; + /** 64-bit host identifier */ + uint64_t hostid; /** reservation key */ - uint64_t key; + uint64_t rkey; }; -SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_reservation_ctrlr_data) == 24, "Incorrect size"); +SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_registered_ctrlr_data) == 24, "Incorrect size"); + +struct __attribute__((packed)) spdk_nvme_registered_ctrlr_extended_data { + /** controller id */ + uint16_t cntlid; + /** reservation status */ + struct { + uint8_t status : 1; + uint8_t reserved1 : 7; + } rcsts; + uint8_t reserved2[5]; + /** reservation key */ + uint64_t rkey; + /** 128-bit host identifier */ + uint8_t hostid[16]; + uint8_t reserved3[32]; +}; +SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_registered_ctrlr_extended_data) == 64, "Incorrect size"); /** * Change persist through power loss state for