From f74fdce93ddc76980dc8e81fb915f6388a26b884 Mon Sep 17 00:00:00 2001 From: Jacek Kalwas Date: Sat, 28 Mar 2020 01:47:16 +0100 Subject: [PATCH] nvmf: allow to override KAS Useful for transport specific layer to inform that Keep Alive is not supported or to adjust granularity. Signed-off-by: Jacek Kalwas Change-Id: I636fda3eadcb96cd8a4b79570fc4e3cc6a58fe93 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1545 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- include/spdk/nvmf_transport.h | 1 + lib/nvmf/ctrlr.c | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/spdk/nvmf_transport.h b/include/spdk/nvmf_transport.h index 6f63b341ab9..8288c836741 100644 --- a/include/spdk/nvmf_transport.h +++ b/include/spdk/nvmf_transport.h @@ -173,6 +173,7 @@ struct spdk_nvmf_listener { * A subset of struct spdk_nvme_ctrlr_data that are emulated by a fabrics device. */ struct spdk_nvmf_ctrlr_data { + uint16_t kas; struct spdk_nvme_cdata_nvmf_specific nvmf_specific; }; diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index e1399129980..13a265002e0 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -304,12 +304,15 @@ spdk_nvmf_ctrlr_create(struct spdk_nvmf_subsystem *subsystem, } /* - * KAS: this field indicates the granularity of the Keep Alive Timer in 100ms units - * keep-alive timeout in milliseconds + * KAS: This field indicates the granularity of the Keep Alive Timer in 100ms units. + * If this field is cleared to 0h, then Keep Alive is not supported. */ - ctrlr->feat.keep_alive_timer.bits.kato = spdk_divide_round_up(connect_cmd->kato, - KAS_DEFAULT_VALUE * KAS_TIME_UNIT_IN_MS) * - KAS_DEFAULT_VALUE * KAS_TIME_UNIT_IN_MS; + if (transport->cdata.kas) { + ctrlr->feat.keep_alive_timer.bits.kato = spdk_divide_round_up(connect_cmd->kato, + KAS_DEFAULT_VALUE * KAS_TIME_UNIT_IN_MS) * + KAS_DEFAULT_VALUE * KAS_TIME_UNIT_IN_MS; + } + ctrlr->feat.async_event_configuration.bits.ns_attr_notice = 1; ctrlr->feat.volatile_write_cache.bits.wce = 1; @@ -1816,6 +1819,7 @@ nvmf_ctrlr_populate_oacs(struct spdk_nvmf_ctrlr *ctrlr, void spdk_nvmf_ctrlr_data_init(struct spdk_nvmf_transport_opts *opts, struct spdk_nvmf_ctrlr_data *cdata) { + cdata->kas = KAS_DEFAULT_VALUE; cdata->nvmf_specific.ioccsz = sizeof(struct spdk_nvme_cmd) / 16; cdata->nvmf_specific.ioccsz += opts->in_capsule_data_size / 16; cdata->nvmf_specific.iorcsz = sizeof(struct spdk_nvme_cpl) / 16; @@ -1857,7 +1861,7 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c if (subsystem->subtype == SPDK_NVMF_SUBTYPE_NVME) { spdk_strcpy_pad(cdata->mn, spdk_nvmf_subsystem_get_mn(subsystem), sizeof(cdata->mn), ' '); spdk_strcpy_pad(cdata->sn, spdk_nvmf_subsystem_get_sn(subsystem), sizeof(cdata->sn), ' '); - cdata->kas = KAS_DEFAULT_VALUE; + cdata->kas = transport->cdata.kas; cdata->rab = 6; cdata->cmic.multi_port = 1;