]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
fabrics: add fast_io_fail_tmo option
authorHannes Reinecke <hare@suse.de>
Wed, 16 Jun 2021 07:56:07 +0000 (09:56 +0200)
committerHannes Reinecke <hare@suse.de>
Wed, 16 Jun 2021 07:56:07 +0000 (09:56 +0200)
Option to fail fast I/O when connecting to a controller. It is useful
to set a fast-fail timeout for nvme in case upper layer SW wants to
detect unresponsive controllers early (e.g. mdraid).

Ported from nvme-cli.

Signed-off-by: Hannes Reinecke <hare@suse.de>
src/nvme/fabrics.c
src/nvme/fabrics.h
src/nvme/json.c

index 83fbc64bd6f69db06c7ac4b6ee15e08dd562f925..6484564443371f5ebc41d1d940bba88d13e47425 100644 (file)
@@ -154,6 +154,7 @@ static struct nvme_fabrics_config *merge_config(nvme_ctrl_t c,
        UPDATE_CFG_OPTION(ctrl_cfg, cfg, reconnect_delay, 0);
        UPDATE_CFG_OPTION(ctrl_cfg, cfg, ctrl_loss_tmo,
                          NVMF_DEF_CTRL_LOSS_TMO);
+       UPDATE_CFG_OPTION(ctrl_cfg, cfg, fast_io_fail_tmo, 0);
        UPDATE_CFG_OPTION(ctrl_cfg, cfg, tos, -1);
        UPDATE_CFG_OPTION(ctrl_cfg, cfg, duplicate_connect, false);
        UPDATE_CFG_OPTION(ctrl_cfg, cfg, disable_sqflow, false);
@@ -273,6 +274,9 @@ static int build_options(nvme_ctrl_t c, char **argstr)
            (strcmp(transport, "loop") &&
             add_int_argument(argstr, "ctrl_loss_tmo",
                              cfg->ctrl_loss_tmo, false)) ||
+           (strcmp(transport, "loop") &&
+            add_int_argument(argstr, "fast_io_fail_tmo",
+                             cfg->fast_io_fail_tmo, false)) ||
            (strcmp(transport, "loop") &&
             add_int_argument(argstr, "tos", cfg->tos, true)) ||
            add_bool_argument(argstr, "duplicate_connect",
index c130339b15a9b2727ccbdab2878f81ceaeebe131..10ac2e29a59d135f59de50ea651bbb2857e88d92 100644 (file)
@@ -22,6 +22,7 @@
  * @nr_io_queues:      Number of controller IO queues to establish
  * @reconnect_delay:   Time between two consecutive reconnect attempts.
  * @ctrl_loss_tmo:     Override the default controller reconnect attempt timeout in seconds
+ * @fast_io_fail_tmo:  Set the fast I/O fail timeout in seconds.
  * @keep_alive_tmo:    Override the default keep-alive-timeout to this value in seconds
  * @nr_write_queues:   Number of queues to use for exclusively for writing
  * @nr_poll_queues:    Number of queues to reserve for polling completions
@@ -36,6 +37,7 @@ struct nvme_fabrics_config {
        int nr_io_queues;
        int reconnect_delay;
        int ctrl_loss_tmo;
+       int fast_io_fail_tmo;
        int keep_alive_tmo;
        int nr_write_queues;
        int nr_poll_queues;
index c902a3e92efae3a1ebe7e76364af3a70c861c935..307dc7fdb1a978ba7b4e7ec28978d8c1d0d925d3 100644 (file)
@@ -50,6 +50,8 @@ static void json_update_attributes(nvme_ctrl_t c,
                if (!strcmp("ctrl_loss_tmo", key_str) &&
                    cfg->ctrl_loss_tmo != NVMF_DEF_CTRL_LOSS_TMO)
                        cfg->ctrl_loss_tmo = json_object_get_int(val_obj);
+               JSON_UPDATE_INT_OPTION(cfg, key_str,
+                                      fast_io_fail_tmo, val_obj);
                if (!strcmp("tos", key_str) && cfg->tos != -1)
                        cfg->tos = json_object_get_int(val_obj);
                JSON_UPDATE_BOOL_OPTION(cfg, key_str,
@@ -189,9 +191,11 @@ static void json_update_port(struct json_object *ctrl_array, nvme_ctrl_t c)
        JSON_INT_OPTION(cfg, port_obj, queue_size, 0);
        JSON_INT_OPTION(cfg, port_obj, keep_alive_tmo, 0);
        JSON_INT_OPTION(cfg, port_obj, reconnect_delay, 0);
-       if (strcmp(transport, "loop"))
+       if (strcmp(transport, "loop")) {
                JSON_INT_OPTION(cfg, port_obj, ctrl_loss_tmo,
                                NVMF_DEF_CTRL_LOSS_TMO);
+               JSON_INT_OPTION(cfg, port_obj, fast_io_fail_tmo, 0);
+       }
        JSON_INT_OPTION(cfg, port_obj, tos, -1);
        JSON_BOOL_OPTION(cfg, port_obj, duplicate_connect);
        JSON_BOOL_OPTION(cfg, port_obj, disable_sqflow);