[PATCH 1/1 nvmecli] fabrics: add new --skip-cid-gen flag to connect cmd

Max Gurtovoy
2021-11-08T14:47:34Z

Setting this flag will enable NVME_QUIRK_SKIP_CID_GEN quirk and will
actually add the ability to ignore the command id generation for other
transport alongside PCI transport that is possible today.

Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
---
Documentation/nvme-connect.html | 15 ++++++++++++++-
fabrics.c | 10 ++++++----
2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/Documentation/nvme-connect.html b/Documentation/nvme-connect.html
index 8e25db9..d0a53d6 100644
--- a/Documentation/nvme-connect.html
+++ b/Documentation/nvme-connect.html
@@ -767,7 +767,8 @@ nvme-connect(1) Manual Page
[--duplicate-connect | -D]
[--disable-sqflow | -d]
[--hdr-digest | -g]
- [--data-digest | -G]
+ [--data-digest | -G]
+ [--skip-cid-gen | -p]



@@ -1028,6 +1029,18 @@ cellspacing="0" cellpadding="4">
Generates/verifies data digest (TCP).


+
+-p
+
+
+--skip-cid-gen
+
+
+
+ Skip command id generation control that was added to protect against buggy
+ fabric controllers.
+
+



diff --git a/fabrics.c b/fabrics.c
index 012bcb8..02a4108 100644
--- a/fabrics.c
+++ b/fabrics.c
@@ -72,6 +72,7 @@ static const char *nvmf_dup_connect = "allow duplicate connections between same
static const char *nvmf_disable_sqflow = "disable controller sq flow control (default false)";
static const char *nvmf_hdr_digest = "enable transport protocol header digest (TCP transport)";
static const char *nvmf_data_digest = "enable transport protocol data digest (TCP transport)";
+static const char *nvmf_skip_cid_gen = "skip command id generation control (default false)";
static const char *nvmf_config_file = "Use specified JSON configuration file or 'none' to disable";

#define NVMF_OPTS(c) \
@@ -93,7 +94,8 @@ static const char *nvmf_config_file = "Use specified JSON configuration file or
OPT_FLAG("duplicate-connect", 'D', &c.duplicate_connect, nvmf_dup_connect), \
OPT_FLAG("disable-sqflow", 'd', &c.disable_sqflow, nvmf_disable_sqflow), \
OPT_FLAG("hdr-digest", 'g', &c.hdr_digest, nvmf_hdr_digest), \
- OPT_FLAG("data-digest", 'G', &c.data_digest, nvmf_data_digest) \
+ OPT_FLAG("data-digest", 'G', &c.data_digest, nvmf_data_digest), \
+ OPT_FLAG("skip-cid-gen", 'p', &c.skip_cid_gen, nvmf_skip_cid_gen) \

static void space_strip_len(int max, char *str)
@@ -363,7 +365,7 @@ static int discover_from_conf_file(nvme_host_t h, const char *desc,
if (!c)
goto next;
errno = 0;
- ret = nvmf_add_ctrl(h, c, &cfg, false);
+ ret = nvmf_add_ctrl(h, c, &cfg, false, false);
if (!ret) {
__discover(c, &cfg, raw, connect,
persistent, flags);
@@ -513,7 +515,7 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
ret = errno;
goto out_free;
}
- ret = nvmf_add_ctrl(h, c, &cfg, false);
+ ret = nvmf_add_ctrl(h, c, &cfg, false, false);
if (ret) {
nvme_msg(LOG_ERR,
"failed to add controller, error %d\n", errno);
@@ -626,7 +628,7 @@ int nvmf_connect(const char *desc, int argc, char **argv)
}

errno = 0;
- ret = nvmf_add_ctrl(h, c, &cfg, cfg.disable_sqflow);
+ ret = nvmf_add_ctrl(h, c, &cfg, cfg.disable_sqflow, cfg.skip_cid_gen);
if (ret)
nvme_msg(LOG_ERR, "no controller found\n");
out_free:
--
2.18.1