]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
fabrics: ensure zero kato for non-persistent controllers
authorDaniel Wagner <dwagner@suse.de>
Fri, 25 Feb 2022 12:57:05 +0000 (13:57 +0100)
committerDaniel Wagner <dwagner@suse.de>
Tue, 1 Mar 2022 07:58:40 +0000 (08:58 +0100)
Add a helper function that sets the default kato value for the
discovery controllers. Along with ensuring a non-zero kato value
(i.e. NVMF_DEF_DISC_TMO) is passed to a persistent discovery
controller, it also ensures a zero kato value is passed to a
non-persistent discovery controller, as mandated by the NVMe spec.

Signed-off-by: Martin George <marting@netapp.com>
[dwagner: ported from monolithic branch]
Signed-off-by: Daniel Wagner <dwagner@suse.de>
fabrics.c

index 40f82f870c72384abc49163f64e17fe032047dfa..e4dd3a589631f30a883d4ecc703d2c2948467af8 100644 (file)
--- a/fabrics.c
+++ b/fabrics.c
@@ -47,6 +47,8 @@
 #define MAX_DISC_ARGS          32
 #define MAX_DISC_RETRIES       10
 
+#define NVMF_DEF_DISC_TMO      30
+
 /* Name of file to output log pages in their raw format */
 static char *raw;
 static bool persistent;
@@ -113,6 +115,16 @@ static void space_strip_len(int max, char *str)
        }
 }
 
+static void set_discovery_kato(struct nvme_fabrics_config *cfg)
+{
+       /* Set kato to NVMF_DEF_DISC_TMO for persistent controllers */
+       if (persistent && !cfg->keep_alive_tmo)
+               cfg->keep_alive_tmo = NVMF_DEF_DISC_TMO;
+       /* Set kato to zero for non-persistent controllers */
+       else if (!persistent && (cfg->keep_alive_tmo > 0))
+               cfg->keep_alive_tmo = 0;
+}
+
 static void print_discovery_log(struct nvmf_discovery_log *log, int numrec)
 {
        int i;
@@ -384,11 +396,11 @@ static int discover_from_conf_file(nvme_root_t r, nvme_host_t h,
                ret = argconfig_parse(argc, argv, desc, opts);
                if (ret)
                        goto next;
-               if (persistent && !cfg.keep_alive_tmo)
-                       cfg.keep_alive_tmo = 30;
                if (!transport && !traddr)
                        goto next;
 
+               set_discovery_kato(&cfg);
+
                c = nvme_create_ctrl(r, subsysnqn, transport, traddr,
                                     cfg.host_traddr, cfg.host_iface, trsvcid);
                if (!c)
@@ -468,8 +480,8 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
                return ret;
        }
 
-       if (persistent && !cfg.keep_alive_tmo)
-               cfg.keep_alive_tmo = 30;
+       set_discovery_kato(&cfg);
+
        if (!hostnqn)
                hostnqn = hnqn = nvmf_hostnqn_from_file();
        if (!hostid)