nvme-fabrics: allow discovery subsystems accept a kato
authorSagi Grimberg <sagi@grimberg.me>
Fri, 12 Jul 2019 18:02:09 +0000 (11:02 -0700)
committerSagi Grimberg <sagi@grimberg.me>
Thu, 12 Sep 2019 15:50:46 +0000 (08:50 -0700)
This modifies the behavior of discovery subsystems to accept
a kato as a preparation to support discovery log change
events. This also means that now every discovery controller
will have a default kato value, and for non-persistent connections
the host needs to pass in a zero kato value (keep_alive_tmo=0).

Reviewed-by: Minwoo Im <minwoo.im.dev@gmail.com>
Reviewed-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
drivers/nvme/host/fabrics.c

index 145c210..74b8818 100644 (file)
@@ -381,8 +381,8 @@ int nvmf_connect_admin_queue(struct nvme_ctrl *ctrl)
         * Set keep-alive timeout in seconds granularity (ms * 1000)
         * and add a grace period for controller kato enforcement
         */
-       cmd.connect.kato = ctrl->opts->discovery_nqn ? 0 :
-               cpu_to_le32((ctrl->kato + NVME_KATO_GRACE) * 1000);
+       cmd.connect.kato = ctrl->kato ?
+               cpu_to_le32((ctrl->kato + NVME_KATO_GRACE) * 1000) : 0;
 
        if (ctrl->opts->disable_sqflow)
                cmd.connect.cattr |= NVME_CONNECT_DISABLE_SQFLOW;
@@ -740,13 +740,6 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
                                pr_warn("keep_alive_tmo 0 won't execute keep alives!!!\n");
                        }
                        opts->kato = token;
-
-                       if (opts->discovery_nqn && opts->kato) {
-                               pr_err("Discovery controllers cannot accept KATO != 0\n");
-                               ret = -EINVAL;
-                               goto out;
-                       }
-
                        break;
                case NVMF_OPT_CTRL_LOSS_TMO:
                        if (match_int(args, &token)) {
@@ -883,7 +876,6 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
        }
 
        if (opts->discovery_nqn) {
-               opts->kato = 0;
                opts->nr_io_queues = 0;
                opts->nr_write_queues = 0;
                opts->nr_poll_queues = 0;