lib/nvme: Fix Abort Command Limit to process as 0's based value

SPDK NVMe driver had processed ACL as 1's based value by mistake,
and SPDK NVMe-oF target sets ACL to 0. Hence If NVMe driver connects
to SPDK NVMe-oF transport, spdk_nvme_ctrlr_cmd_abort() always queued
abort request.

Fix this bug to process ACL as 0's based value in
spdk_nvme_ctrlr_cmd_abort(). Besides, initialize ACL explicitly to
0 in spdk_nvmf_ctrlr_identify_ctrlr() for clarification.

Signed-off-by: Michael Haeuptle <michael.haeuptle@hpe.com>
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Id4f3a469776cdab88bcc6f41e7893885a7b78d8c
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2513
Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Michael Haeuptle <michaelhaeuptle@gmail.com>
This commit is contained in:
Shuhei Matsumoto 2020-05-19 02:15:02 +09:00 committed by Tomasz Zawadzki
parent 10c4193363
commit 9d4751a550
2 changed files with 4 additions and 1 deletions

View File

@ -628,7 +628,8 @@ spdk_nvme_ctrlr_cmd_abort(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair
cmd->cdw10_bits.abort.sqid = sqid;
cmd->cdw10_bits.abort.cid = cid;
if (ctrlr->outstanding_aborts >= ctrlr->cdata.acl) {
/* ACL is a 0's based value. */
if (ctrlr->outstanding_aborts >= ctrlr->cdata.acl + 1U) {
STAILQ_INSERT_TAIL(&ctrlr->queued_aborts, req, stailq);
rc = 0;
} else {

View File

@ -1872,6 +1872,8 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c
cdata->cmic.multi_host = 1;
cdata->oaes.ns_attribute_notices = 1;
cdata->ctratt.host_id_exhid_supported = 1;
/* TODO: Concurrent execution of multiple abort commands. */
cdata->acl = 0;
cdata->aerl = 0;
cdata->frmw.slot1_ro = 1;
cdata->frmw.num_slots = 1;