From: Hannes Reinecke Date: Wed, 16 Jun 2021 07:44:59 +0000 (+0200) Subject: fabrics: blank out invalid arguments in build_options() X-Git-Tag: v1.0-rc0~127^2~2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=671cfdfdf12bd1ba4938df7a14157a13e29fbfd5;p=users%2Fsagi%2Flibnvme.git fabrics: blank out invalid arguments in build_options() Not all options are valid under all circumstances; eg for discovery some options like 'nr_io_queues' are invalid. So mask out invalid options to avoid a failure when creating a controller. Signed-off-by: Hannes Reinecke --- diff --git a/src/nvme/fabrics.c b/src/nvme/fabrics.c index 19cc1881..83fbc64b 100644 --- a/src/nvme/fabrics.c +++ b/src/nvme/fabrics.c @@ -216,6 +216,7 @@ static int build_options(nvme_ctrl_t c, char **argstr) struct nvme_fabrics_config *cfg = nvme_ctrl_get_config(c); const char *transport = nvme_ctrl_get_transport(c); const char *hostnqn, *hostid; + bool discover = false; if (!transport) { nvme_msg(LOG_ERR, "need a transport (-t) argument\n"); @@ -229,6 +230,9 @@ static int build_options(nvme_ctrl_t c, char **argstr) errno = EINVAL; return -1; } + /* Use the default ctrl loss timeout if unset */ + if (cfg->ctrl_loss_tmo == -1) + cfg->ctrl_loss_tmo = NVMF_DEF_CTRL_LOSS_TMO; } /* always specify nqn as first arg - this will init the string */ @@ -237,8 +241,10 @@ static int build_options(nvme_ctrl_t c, char **argstr) errno = ENOMEM; return -1; } - - + if (!strcmp(nvme_ctrl_get_subsysnqn(c), NVME_DISC_SUBSYS_NAME)) + discover = true; + hostnqn = nvme_ctrl_get_hostnqn(c); + hostid = nvme_ctrl_get_hostid(c); if (add_argument(argstr, "transport", transport) || add_argument(argstr, "traddr", nvme_ctrl_get_traddr(c)) || @@ -246,14 +252,22 @@ static int build_options(nvme_ctrl_t c, char **argstr) nvme_ctrl_get_host_traddr(c)) || add_argument(argstr, "trsvcid", nvme_ctrl_get_trsvcid(c)) || - add_argument(argstr, "hostnqn", - nvme_ctrl_get_hostnqn(c)) || - add_argument(argstr, "hostid", - nvme_ctrl_get_hostid(c)) || - add_int_argument(argstr, "nr_write_queues", - cfg->nr_write_queues, false) || - add_int_argument(argstr, "nr_poll_queues", - cfg->nr_poll_queues, false) || + (hostnqn && add_argument(argstr, "hostnqn", hostnqn)) || + (hostid && add_argument(argstr, "hostid", hostid)) || + (!discover && + add_int_argument(argstr, "nr_io_queues", + cfg->nr_io_queues, false)) || + (!discover && + add_int_argument(argstr, "nr_write_queues", + cfg->nr_write_queues, false)) || + (!discover && + add_int_argument(argstr, "nr_poll_queues", + cfg->nr_poll_queues, false)) || + (!discover && + add_int_argument(argstr, "queue_size", + cfg->queue_size, false)) || + add_int_argument(argstr, "keep_alive_tmo", + cfg->keep_alive_tmo, false) || add_int_argument(argstr, "reconnect_delay", cfg->reconnect_delay, false) || (strcmp(transport, "loop") && @@ -268,14 +282,8 @@ static int build_options(nvme_ctrl_t c, char **argstr) (!strcmp(transport, "tcp") && add_bool_argument(argstr, "hdr_digest", cfg->hdr_digest)) || (!strcmp(transport, "tcp") && - add_bool_argument(argstr, "data_digest", cfg->data_digest)) || - add_int_argument(argstr, "queue_size", cfg->queue_size, false) || - add_int_argument(argstr, "keep_alive_tmo", - cfg->keep_alive_tmo, false) || - add_int_argument(argstr, "nr_io_queues", - cfg->nr_io_queues, false)) { + add_bool_argument(argstr, "data_digest", cfg->data_digest))) { free(*argstr); - errno = ENOMEM; return -1; }