diff --git a/fabrics.c b/fabrics.c index 1e164228a9..86b0e15a10 100644 --- a/fabrics.c +++ b/fabrics.c @@ -178,13 +178,21 @@ static int nvme_add_ctrl(nvme_host_t h, nvme_ctrl_t c, int ret; retry: + /* + * __create_discover_ctrl and callers depend on errno being set + * in the error case. + */ + errno = 0; ret = nvmf_add_ctrl(h, c, cfg); - if (ret == EAGAIN || (ret == EINTR && !nvme_sigint_received)) { - printf("nvmf_add_ctrl returned '%s'\n", strerror(ret)); + if (!ret) + return 0; + + if (errno == EAGAIN || (errno == EINTR && !nvme_sigint_received)) { + print_debug("nvmf_add_ctrl returned '%s'\n", strerror(errno)); goto retry; } - return ret; + return -errno; } static nvme_ctrl_t __create_discover_ctrl(nvme_root_t r, nvme_host_t h, @@ -205,9 +213,7 @@ static nvme_ctrl_t __create_discover_ctrl(nvme_root_t r, nvme_host_t h, strcmp(trcfg->subsysnqn, NVME_DISC_SUBSYS_NAME)); tmo = set_discovery_kato(cfg); - errno = 0; ret = nvme_add_ctrl(h, c, cfg); - cfg->keep_alive_tmo = tmo; if (ret) { nvme_free_ctrl(c); @@ -1079,10 +1085,8 @@ int nvmf_connect(const char *desc, int argc, char **argv) return -errno; h = nvme_lookup_host(r, hnqn, hid); - if (!h) { - errno = ENOMEM; - goto out_free; - } + if (!h) + return -ENOMEM; if (hostkey) nvme_host_set_dhchap_key(h, hostkey); if (!trsvcid) @@ -1103,37 +1107,33 @@ int nvmf_connect(const char *desc, int argc, char **argv) c = lookup_ctrl(h, &trcfg); if (c && nvme_ctrl_get_name(c) && !cfg.duplicate_connect) { fprintf(stderr, "already connected\n"); - errno = EALREADY; - goto out_free; + return -EALREADY; } c = nvme_create_ctrl(r, subsysnqn, transport, traddr, cfg.host_traddr, cfg.host_iface, trsvcid); - if (!c) { - errno = ENOMEM; - goto out_free; - } + if (!c) + return -ENOMEM; if (ctrlkey) nvme_ctrl_set_dhchap_key(c, ctrlkey); nvme_parse_tls_args(keyring, tls_key, tls_key_identity, &cfg, c); - errno = 0; ret = nvme_add_ctrl(h, c, &cfg); - if (ret) + if (ret) { fprintf(stderr, "could not add new controller: %s\n", - nvme_strerror(errno)); - else { - errno = 0; - if (flags != -EINVAL) - nvme_show_connect_msg(c, flags); + nvme_strerror(-ret)); + return ret; } -out_free: + /* always print connected device */ + nvme_show_connect_msg(c, flags); + if (dump_config) nvme_dump_config(r); - return -errno; + + return 0; } static nvme_ctrl_t lookup_nvme_ctrl(nvme_root_t r, const char *name) diff --git a/util/logging.c b/util/logging.c index e05483916a..8b40c14fce 100644 --- a/util/logging.c +++ b/util/logging.c @@ -116,8 +116,9 @@ int nvme_submit_passthru(int fd, unsigned long ioctl_cmd, if (!dry_run) { retry: err = ioctl(fd, ioctl_cmd, cmd); - if (err == EAGAIN || (err == EINTR && !nvme_sigint_received)) { - nvme_log_retry(err); + if (err && (errno == EAGAIN || + (errno == EINTR && !nvme_sigint_received))) { + nvme_log_retry(errno); goto retry; } } @@ -148,8 +149,9 @@ int nvme_submit_passthru64(int fd, unsigned long ioctl_cmd, if (!dry_run) { retry: err = ioctl(fd, ioctl_cmd, cmd); - if (err == EAGAIN || (err == EINTR && !nvme_sigint_received)) { - nvme_log_retry(err); + if (err && (errno == EAGAIN || + (errno == EINTR && !nvme_sigint_received))) { + nvme_log_retry(errno); goto retry; } }