nvme: add extended reservation data structure definition

Rename some fields to let the name is consistent with
specification.

Change-Id: Ie63fb69465f1448a8ffbb99eaa8f356371fa4af1
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/432972
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Changpeng Liu 2018-11-13 01:23:13 -05:00 committed by Jim Harris
parent 3c98150821
commit d49bbbf053
2 changed files with 47 additions and 21 deletions

View File

@ -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);

View File

@ -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