bdev/nvme: Move per controller settings into a option structure

The following patches will enable us to specify I/O error resiliency
options per nvme_ctrlr as global options. To do it easier, move
per controller options about I/O error resiliency into struct nvme_ctrlr_opts.

prchk_flags is not exactly for resiliency but move it into struct
nvme_ctrlr_opts too.

Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: I85fd1738bb6e293cd804b086ade82274485f213d
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11829
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2022-03-04 13:51:53 +09:00 committed by Tomasz Zawadzki
parent df32eb112b
commit 00a7998254
4 changed files with 163 additions and 155 deletions

View File

@ -747,7 +747,7 @@ nvme_io_path_is_failed(struct nvme_io_path *io_path)
} }
if (nvme_ctrlr->resetting) { if (nvme_ctrlr->resetting) {
if (nvme_ctrlr->reconnect_delay_sec != 0) { if (nvme_ctrlr->opts.reconnect_delay_sec != 0) {
return false; return false;
} else { } else {
return true; return true;
@ -1319,13 +1319,13 @@ bdev_nvme_check_ctrlr_loss_timeout(struct nvme_ctrlr *nvme_ctrlr)
{ {
int32_t elapsed; int32_t elapsed;
if (nvme_ctrlr->ctrlr_loss_timeout_sec == 0 || if (nvme_ctrlr->opts.ctrlr_loss_timeout_sec == 0 ||
nvme_ctrlr->ctrlr_loss_timeout_sec == -1) { nvme_ctrlr->opts.ctrlr_loss_timeout_sec == -1) {
return false; return false;
} }
elapsed = (spdk_get_ticks() - nvme_ctrlr->reset_start_tsc) / spdk_get_ticks_hz(); elapsed = (spdk_get_ticks() - nvme_ctrlr->reset_start_tsc) / spdk_get_ticks_hz();
if (elapsed >= nvme_ctrlr->ctrlr_loss_timeout_sec) { if (elapsed >= nvme_ctrlr->opts.ctrlr_loss_timeout_sec) {
return true; return true;
} else { } else {
return false; return false;
@ -1337,12 +1337,12 @@ bdev_nvme_check_fast_io_fail_timeout(struct nvme_ctrlr *nvme_ctrlr)
{ {
uint32_t elapsed; uint32_t elapsed;
if (nvme_ctrlr->fast_io_fail_timeout_sec == 0) { if (nvme_ctrlr->opts.fast_io_fail_timeout_sec == 0) {
return false; return false;
} }
elapsed = (spdk_get_ticks() - nvme_ctrlr->reset_start_tsc) / spdk_get_ticks_hz(); elapsed = (spdk_get_ticks() - nvme_ctrlr->reset_start_tsc) / spdk_get_ticks_hz();
if (elapsed >= nvme_ctrlr->fast_io_fail_timeout_sec) { if (elapsed >= nvme_ctrlr->opts.fast_io_fail_timeout_sec) {
return true; return true;
} else { } else {
return false; return false;
@ -1364,7 +1364,7 @@ bdev_nvme_check_op_after_reset(struct nvme_ctrlr *nvme_ctrlr, bool success)
if (nvme_ctrlr_can_be_unregistered(nvme_ctrlr)) { if (nvme_ctrlr_can_be_unregistered(nvme_ctrlr)) {
/* Complete pending destruct after reset completes. */ /* Complete pending destruct after reset completes. */
return OP_COMPLETE_PENDING_DESTRUCT; return OP_COMPLETE_PENDING_DESTRUCT;
} else if (success || nvme_ctrlr->reconnect_delay_sec == 0) { } else if (success || nvme_ctrlr->opts.reconnect_delay_sec == 0) {
nvme_ctrlr->reset_start_tsc = 0; nvme_ctrlr->reset_start_tsc = 0;
return OP_NONE; return OP_NONE;
} else if (bdev_nvme_check_ctrlr_loss_timeout(nvme_ctrlr)) { } else if (bdev_nvme_check_ctrlr_loss_timeout(nvme_ctrlr)) {
@ -1420,7 +1420,7 @@ bdev_nvme_start_reconnect_delay_timer(struct nvme_ctrlr *nvme_ctrlr)
assert(nvme_ctrlr->reconnect_delay_timer == NULL); assert(nvme_ctrlr->reconnect_delay_timer == NULL);
nvme_ctrlr->reconnect_delay_timer = SPDK_POLLER_REGISTER(bdev_nvme_reconnect_delay_timer_expired, nvme_ctrlr->reconnect_delay_timer = SPDK_POLLER_REGISTER(bdev_nvme_reconnect_delay_timer_expired,
nvme_ctrlr, nvme_ctrlr,
nvme_ctrlr->reconnect_delay_sec * SPDK_SEC_TO_USEC); nvme_ctrlr->opts.reconnect_delay_sec * SPDK_SEC_TO_USEC);
} }
static void static void
@ -2582,7 +2582,7 @@ nvme_bdev_create(struct nvme_ctrlr *nvme_ctrlr, struct nvme_ns *nvme_ns)
bdev->opal = nvme_ctrlr->opal_dev != NULL; bdev->opal = nvme_ctrlr->opal_dev != NULL;
rc = nvme_disk_create(&bdev->disk, nvme_ctrlr->nbdev_ctrlr->name, nvme_ctrlr->ctrlr, rc = nvme_disk_create(&bdev->disk, nvme_ctrlr->nbdev_ctrlr->name, nvme_ctrlr->ctrlr,
nvme_ns->ns, nvme_ctrlr->prchk_flags, bdev); nvme_ns->ns, nvme_ctrlr->opts.prchk_flags, bdev);
if (rc != 0) { if (rc != 0) {
SPDK_ERRLOG("Failed to create NVMe disk\n"); SPDK_ERRLOG("Failed to create NVMe disk\n");
pthread_mutex_destroy(&bdev->mutex); pthread_mutex_destroy(&bdev->mutex);
@ -3429,10 +3429,7 @@ nvme_ctrlr_create(struct spdk_nvme_ctrlr *ctrlr,
} }
if (ctx != NULL) { if (ctx != NULL) {
nvme_ctrlr->prchk_flags = ctx->prchk_flags; memcpy(&nvme_ctrlr->opts, &ctx->bdev_opts, sizeof(ctx->bdev_opts));
nvme_ctrlr->ctrlr_loss_timeout_sec = ctx->ctrlr_loss_timeout_sec;
nvme_ctrlr->reconnect_delay_sec = ctx->reconnect_delay_sec;
nvme_ctrlr->fast_io_fail_timeout_sec = ctx->fast_io_fail_timeout_sec;
} }
nvme_ctrlr->adminq_timer_poller = SPDK_POLLER_REGISTER(bdev_nvme_poll_adminq, nvme_ctrlr, nvme_ctrlr->adminq_timer_poller = SPDK_POLLER_REGISTER(bdev_nvme_poll_adminq, nvme_ctrlr,
@ -3944,14 +3941,11 @@ bdev_nvme_create(struct spdk_nvme_transport_id *trid,
const char *base_name, const char *base_name,
const char **names, const char **names,
uint32_t count, uint32_t count,
uint32_t prchk_flags,
spdk_bdev_create_nvme_fn cb_fn, spdk_bdev_create_nvme_fn cb_fn,
void *cb_ctx, void *cb_ctx,
struct spdk_nvme_ctrlr_opts *drv_opts, struct spdk_nvme_ctrlr_opts *drv_opts,
bool multipath, struct nvme_ctrlr_opts *bdev_opts,
int32_t ctrlr_loss_timeout_sec, bool multipath)
uint32_t reconnect_delay_sec,
uint32_t fast_io_fail_timeout_sec)
{ {
struct nvme_probe_skip_entry *entry, *tmp; struct nvme_probe_skip_entry *entry, *tmp;
struct nvme_async_probe_ctx *ctx; struct nvme_async_probe_ctx *ctx;
@ -3965,8 +3959,10 @@ bdev_nvme_create(struct spdk_nvme_transport_id *trid,
return -EEXIST; return -EEXIST;
} }
if (!bdev_nvme_check_multipath_params(ctrlr_loss_timeout_sec, reconnect_delay_sec, if (bdev_opts != NULL &&
fast_io_fail_timeout_sec)) { !bdev_nvme_check_multipath_params(bdev_opts->ctrlr_loss_timeout_sec,
bdev_opts->reconnect_delay_sec,
bdev_opts->fast_io_fail_timeout_sec)) {
return -EINVAL; return -EINVAL;
} }
@ -3979,11 +3975,11 @@ bdev_nvme_create(struct spdk_nvme_transport_id *trid,
ctx->count = count; ctx->count = count;
ctx->cb_fn = cb_fn; ctx->cb_fn = cb_fn;
ctx->cb_ctx = cb_ctx; ctx->cb_ctx = cb_ctx;
ctx->prchk_flags = prchk_flags;
ctx->trid = *trid; ctx->trid = *trid;
ctx->ctrlr_loss_timeout_sec = ctrlr_loss_timeout_sec;
ctx->reconnect_delay_sec = reconnect_delay_sec; if (bdev_opts) {
ctx->fast_io_fail_timeout_sec = fast_io_fail_timeout_sec; memcpy(&ctx->bdev_opts, bdev_opts, sizeof(*bdev_opts));
}
if (trid->trtype == SPDK_NVME_TRANSPORT_PCIE) { if (trid->trtype == SPDK_NVME_TRANSPORT_PCIE) {
TAILQ_FOREACH_SAFE(entry, &g_skipped_nvme_ctrlrs, tailq, tmp) { TAILQ_FOREACH_SAFE(entry, &g_skipped_nvme_ctrlrs, tailq, tmp) {
@ -4365,9 +4361,9 @@ discovery_log_page_cb(void *cb_arg, int rc, const struct spdk_nvme_cpl *cpl,
} }
spdk_nvme_ctrlr_get_default_ctrlr_opts(&new_ctx->drv_opts, sizeof(new_ctx->drv_opts)); spdk_nvme_ctrlr_get_default_ctrlr_opts(&new_ctx->drv_opts, sizeof(new_ctx->drv_opts));
snprintf(new_ctx->drv_opts.hostnqn, sizeof(new_ctx->drv_opts.hostnqn), "%s", ctx->hostnqn); snprintf(new_ctx->drv_opts.hostnqn, sizeof(new_ctx->drv_opts.hostnqn), "%s", ctx->hostnqn);
rc = bdev_nvme_create(&new_ctx->trid, new_ctx->name, NULL, 0, 0, rc = bdev_nvme_create(&new_ctx->trid, new_ctx->name, NULL, 0,
discovery_attach_controller_done, new_ctx, discovery_attach_controller_done, new_ctx,
&new_ctx->drv_opts, true, 0, 0, 0); &new_ctx->drv_opts, NULL, true);
if (rc == 0) { if (rc == 0) {
TAILQ_INSERT_TAIL(&ctx->nvm_entry_ctxs, new_ctx, tailq); TAILQ_INSERT_TAIL(&ctx->nvm_entry_ctxs, new_ctx, tailq);
ctx->attach_in_progress++; ctx->attach_in_progress++;
@ -5703,12 +5699,13 @@ nvme_ctrlr_config_json(struct spdk_json_write_ctx *w,
spdk_json_write_named_string(w, "name", nvme_ctrlr->nbdev_ctrlr->name); spdk_json_write_named_string(w, "name", nvme_ctrlr->nbdev_ctrlr->name);
nvme_bdev_dump_trid_json(trid, w); nvme_bdev_dump_trid_json(trid, w);
spdk_json_write_named_bool(w, "prchk_reftag", spdk_json_write_named_bool(w, "prchk_reftag",
(nvme_ctrlr->prchk_flags & SPDK_NVME_IO_FLAGS_PRCHK_REFTAG) != 0); (nvme_ctrlr->opts.prchk_flags & SPDK_NVME_IO_FLAGS_PRCHK_REFTAG) != 0);
spdk_json_write_named_bool(w, "prchk_guard", spdk_json_write_named_bool(w, "prchk_guard",
(nvme_ctrlr->prchk_flags & SPDK_NVME_IO_FLAGS_PRCHK_GUARD) != 0); (nvme_ctrlr->opts.prchk_flags & SPDK_NVME_IO_FLAGS_PRCHK_GUARD) != 0);
spdk_json_write_named_int32(w, "ctrlr_loss_timeout_sec", nvme_ctrlr->ctrlr_loss_timeout_sec); spdk_json_write_named_int32(w, "ctrlr_loss_timeout_sec", nvme_ctrlr->opts.ctrlr_loss_timeout_sec);
spdk_json_write_named_uint32(w, "reconnect_delay_sec", nvme_ctrlr->reconnect_delay_sec); spdk_json_write_named_uint32(w, "reconnect_delay_sec", nvme_ctrlr->opts.reconnect_delay_sec);
spdk_json_write_named_uint32(w, "fast_io_fail_timeout_sec", nvme_ctrlr->fast_io_fail_timeout_sec); spdk_json_write_named_uint32(w, "fast_io_fail_timeout_sec",
nvme_ctrlr->opts.fast_io_fail_timeout_sec);
spdk_json_write_object_end(w); spdk_json_write_object_end(w);

View File

@ -52,17 +52,21 @@ typedef void (*spdk_bdev_create_nvme_fn)(void *ctx, size_t bdev_count, int rc);
typedef void (*spdk_bdev_nvme_start_discovery_fn)(void *ctx, int rc); typedef void (*spdk_bdev_nvme_start_discovery_fn)(void *ctx, int rc);
typedef void (*spdk_bdev_nvme_stop_discovery_fn)(void *ctx); typedef void (*spdk_bdev_nvme_stop_discovery_fn)(void *ctx);
struct nvme_ctrlr_opts {
uint32_t prchk_flags;
int32_t ctrlr_loss_timeout_sec;
uint32_t reconnect_delay_sec;
uint32_t fast_io_fail_timeout_sec;
};
struct nvme_async_probe_ctx { struct nvme_async_probe_ctx {
struct spdk_nvme_probe_ctx *probe_ctx; struct spdk_nvme_probe_ctx *probe_ctx;
const char *base_name; const char *base_name;
const char **names; const char **names;
uint32_t count; uint32_t count;
uint32_t prchk_flags;
int32_t ctrlr_loss_timeout_sec;
uint32_t reconnect_delay_sec;
uint32_t fast_io_fail_timeout_sec;
struct spdk_poller *poller; struct spdk_poller *poller;
struct spdk_nvme_transport_id trid; struct spdk_nvme_transport_id trid;
struct nvme_ctrlr_opts bdev_opts;
struct spdk_nvme_ctrlr_opts drv_opts; struct spdk_nvme_ctrlr_opts drv_opts;
spdk_bdev_create_nvme_fn cb_fn; spdk_bdev_create_nvme_fn cb_fn;
void *cb_ctx; void *cb_ctx;
@ -114,12 +118,9 @@ struct nvme_ctrlr {
uint32_t fast_io_fail_timedout : 1; uint32_t fast_io_fail_timedout : 1;
uint32_t destruct : 1; uint32_t destruct : 1;
uint32_t ana_log_page_updating : 1; uint32_t ana_log_page_updating : 1;
/**
* PI check flags. This flags is set to NVMe controllers created only struct nvme_ctrlr_opts opts;
* through bdev_nvme_attach_controller RPC or .INI config file. Hot added
* NVMe controllers are not included.
*/
uint32_t prchk_flags;
RB_HEAD(nvme_ns_tree, nvme_ns) namespaces; RB_HEAD(nvme_ns_tree, nvme_ns) namespaces;
struct spdk_opal_dev *opal_dev; struct spdk_opal_dev *opal_dev;
@ -148,10 +149,6 @@ struct nvme_ctrlr {
struct nvme_async_probe_ctx *probe_ctx; struct nvme_async_probe_ctx *probe_ctx;
uint32_t reconnect_delay_sec;
int32_t ctrlr_loss_timeout_sec;
uint32_t fast_io_fail_timeout_sec;
pthread_mutex_t mutex; pthread_mutex_t mutex;
}; };
@ -265,14 +262,11 @@ int bdev_nvme_create(struct spdk_nvme_transport_id *trid,
const char *base_name, const char *base_name,
const char **names, const char **names,
uint32_t count, uint32_t count,
uint32_t prchk_flags,
spdk_bdev_create_nvme_fn cb_fn, spdk_bdev_create_nvme_fn cb_fn,
void *cb_ctx, void *cb_ctx,
struct spdk_nvme_ctrlr_opts *drv_opts, struct spdk_nvme_ctrlr_opts *drv_opts,
bool multipath, struct nvme_ctrlr_opts *bdev_opts,
int32_t ctrlr_loss_timeout_sec, bool multipath);
uint32_t reconnect_delay_sec,
uint32_t fast_io_fail_timeout_sec);
int bdev_nvme_start_discovery(struct spdk_nvme_transport_id *trid, const char *base_name, int bdev_nvme_start_discovery(struct spdk_nvme_transport_id *trid, const char *base_name,
struct spdk_nvme_ctrlr_opts *drv_opts, struct spdk_nvme_ctrlr_opts *drv_opts,

View File

@ -181,11 +181,8 @@ struct rpc_bdev_nvme_attach_controller {
char *hostnqn; char *hostnqn;
char *hostaddr; char *hostaddr;
char *hostsvcid; char *hostsvcid;
uint32_t prchk_flags;
char *multipath; char *multipath;
int32_t ctrlr_loss_timeout_sec; struct nvme_ctrlr_opts bdev_opts;
uint32_t reconnect_delay_sec;
uint32_t fast_io_fail_timeout_sec;
struct spdk_nvme_ctrlr_opts drv_opts; struct spdk_nvme_ctrlr_opts drv_opts;
}; };
@ -248,16 +245,16 @@ static const struct spdk_json_object_decoder rpc_bdev_nvme_attach_controller_dec
{"hostaddr", offsetof(struct rpc_bdev_nvme_attach_controller, hostaddr), spdk_json_decode_string, true}, {"hostaddr", offsetof(struct rpc_bdev_nvme_attach_controller, hostaddr), spdk_json_decode_string, true},
{"hostsvcid", offsetof(struct rpc_bdev_nvme_attach_controller, hostsvcid), spdk_json_decode_string, true}, {"hostsvcid", offsetof(struct rpc_bdev_nvme_attach_controller, hostsvcid), spdk_json_decode_string, true},
{"prchk_reftag", offsetof(struct rpc_bdev_nvme_attach_controller, prchk_flags), bdev_nvme_decode_reftag, true}, {"prchk_reftag", offsetof(struct rpc_bdev_nvme_attach_controller, bdev_opts.prchk_flags), bdev_nvme_decode_reftag, true},
{"prchk_guard", offsetof(struct rpc_bdev_nvme_attach_controller, prchk_flags), bdev_nvme_decode_guard, true}, {"prchk_guard", offsetof(struct rpc_bdev_nvme_attach_controller, bdev_opts.prchk_flags), bdev_nvme_decode_guard, true},
{"hdgst", offsetof(struct rpc_bdev_nvme_attach_controller, drv_opts.header_digest), spdk_json_decode_bool, true}, {"hdgst", offsetof(struct rpc_bdev_nvme_attach_controller, drv_opts.header_digest), spdk_json_decode_bool, true},
{"ddgst", offsetof(struct rpc_bdev_nvme_attach_controller, drv_opts.data_digest), spdk_json_decode_bool, true}, {"ddgst", offsetof(struct rpc_bdev_nvme_attach_controller, drv_opts.data_digest), spdk_json_decode_bool, true},
{"fabrics_connect_timeout_us", offsetof(struct rpc_bdev_nvme_attach_controller, drv_opts.fabrics_connect_timeout_us), spdk_json_decode_uint64, true}, {"fabrics_connect_timeout_us", offsetof(struct rpc_bdev_nvme_attach_controller, drv_opts.fabrics_connect_timeout_us), spdk_json_decode_uint64, true},
{"multipath", offsetof(struct rpc_bdev_nvme_attach_controller, multipath), spdk_json_decode_string, true}, {"multipath", offsetof(struct rpc_bdev_nvme_attach_controller, multipath), spdk_json_decode_string, true},
{"num_io_queues", offsetof(struct rpc_bdev_nvme_attach_controller, drv_opts.num_io_queues), spdk_json_decode_uint32, true}, {"num_io_queues", offsetof(struct rpc_bdev_nvme_attach_controller, drv_opts.num_io_queues), spdk_json_decode_uint32, true},
{"ctrlr_loss_timeout_sec", offsetof(struct rpc_bdev_nvme_attach_controller, ctrlr_loss_timeout_sec), spdk_json_decode_int32, true}, {"ctrlr_loss_timeout_sec", offsetof(struct rpc_bdev_nvme_attach_controller, bdev_opts.ctrlr_loss_timeout_sec), spdk_json_decode_int32, true},
{"reconnect_delay_sec", offsetof(struct rpc_bdev_nvme_attach_controller, reconnect_delay_sec), spdk_json_decode_uint32, true}, {"reconnect_delay_sec", offsetof(struct rpc_bdev_nvme_attach_controller, bdev_opts.reconnect_delay_sec), spdk_json_decode_uint32, true},
{"fast_io_fail_timeout_sec", offsetof(struct rpc_bdev_nvme_attach_controller, fast_io_fail_timeout_sec), spdk_json_decode_uint32, true}, {"fast_io_fail_timeout_sec", offsetof(struct rpc_bdev_nvme_attach_controller, bdev_opts.fast_io_fail_timeout_sec), spdk_json_decode_uint32, true},
}; };
#define NVME_MAX_BDEVS_PER_RPC 128 #define NVME_MAX_BDEVS_PER_RPC 128
@ -495,7 +492,7 @@ rpc_bdev_nvme_attach_controller(struct spdk_jsonrpc_request *request,
goto cleanup; goto cleanup;
} }
if (ctx->req.prchk_flags) { if (ctx->req.bdev_opts.prchk_flags) {
spdk_jsonrpc_send_error_response_fmt(request, -EINVAL, spdk_jsonrpc_send_error_response_fmt(request, -EINVAL,
"A controller named %s already exists. To add a path, do not specify PI options.\n", "A controller named %s already exists. To add a path, do not specify PI options.\n",
ctx->req.name); ctx->req.name);
@ -516,10 +513,9 @@ rpc_bdev_nvme_attach_controller(struct spdk_jsonrpc_request *request,
ctx->request = request; ctx->request = request;
ctx->count = NVME_MAX_BDEVS_PER_RPC; ctx->count = NVME_MAX_BDEVS_PER_RPC;
rc = bdev_nvme_create(&trid, ctx->req.name, ctx->names, ctx->count, ctx->req.prchk_flags, rc = bdev_nvme_create(&trid, ctx->req.name, ctx->names, ctx->count,
rpc_bdev_nvme_attach_controller_done, ctx, &ctx->req.drv_opts, rpc_bdev_nvme_attach_controller_done, ctx, &ctx->req.drv_opts,
multipath, ctx->req.ctrlr_loss_timeout_sec, &ctx->req.bdev_opts, multipath);
ctx->req.reconnect_delay_sec, ctx->req.fast_io_fail_timeout_sec);
if (rc) { if (rc) {
spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc)); spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
goto cleanup; goto cleanup;

View File

@ -1758,8 +1758,8 @@ test_pending_reset(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -1889,8 +1889,8 @@ test_attach_ctrlr(void)
g_ut_attach_ctrlr_status = -EIO; g_ut_attach_ctrlr_status = -EIO;
g_ut_attach_bdev_count = 0; g_ut_attach_bdev_count = 0;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -1904,8 +1904,8 @@ test_attach_ctrlr(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -1932,8 +1932,8 @@ test_attach_ctrlr(void)
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -1968,8 +1968,8 @@ test_attach_ctrlr(void)
g_ut_register_bdev_status = -EINVAL; g_ut_register_bdev_status = -EINVAL;
g_ut_attach_bdev_count = 0; g_ut_attach_bdev_count = 0;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2022,8 +2022,8 @@ test_aer_cb(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 3; g_ut_attach_bdev_count = 3;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2228,8 +2228,8 @@ test_submit_nvme_cmd(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2320,8 +2320,8 @@ test_add_remove_trid(void)
ctrlr1 = ut_attach_ctrlr(&path1.trid, 0, false, false); ctrlr1 = ut_attach_ctrlr(&path1.trid, 0, false, false);
SPDK_CU_ASSERT_FATAL(ctrlr1 != NULL); SPDK_CU_ASSERT_FATAL(ctrlr1 != NULL);
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2335,8 +2335,8 @@ test_add_remove_trid(void)
ctrlr2 = ut_attach_ctrlr(&path2.trid, 0, false, false); ctrlr2 = ut_attach_ctrlr(&path2.trid, 0, false, false);
SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL); SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL);
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2365,8 +2365,8 @@ test_add_remove_trid(void)
ctrlr3 = ut_attach_ctrlr(&path3.trid, 0, false, false); ctrlr3 = ut_attach_ctrlr(&path3.trid, 0, false, false);
SPDK_CU_ASSERT_FATAL(ctrlr3 != NULL); SPDK_CU_ASSERT_FATAL(ctrlr3 != NULL);
rc = bdev_nvme_create(&path3.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path3.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2412,8 +2412,8 @@ test_add_remove_trid(void)
ctrlr1 = ut_attach_ctrlr(&path1.trid, 0, false, false); ctrlr1 = ut_attach_ctrlr(&path1.trid, 0, false, false);
SPDK_CU_ASSERT_FATAL(ctrlr1 != NULL); SPDK_CU_ASSERT_FATAL(ctrlr1 != NULL);
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2427,8 +2427,8 @@ test_add_remove_trid(void)
ctrlr2 = ut_attach_ctrlr(&path2.trid, 0, false, false); ctrlr2 = ut_attach_ctrlr(&path2.trid, 0, false, false);
SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL); SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL);
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2458,6 +2458,7 @@ static void
test_abort(void) test_abort(void)
{ {
struct spdk_nvme_transport_id trid = {}; struct spdk_nvme_transport_id trid = {};
struct nvme_ctrlr_opts opts = {};
struct spdk_nvme_ctrlr *ctrlr; struct spdk_nvme_ctrlr *ctrlr;
struct nvme_ctrlr *nvme_ctrlr; struct nvme_ctrlr *nvme_ctrlr;
const int STRING_SIZE = 32; const int STRING_SIZE = 32;
@ -2485,8 +2486,11 @@ test_abort(void)
set_thread(1); set_thread(1);
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, opts.ctrlr_loss_timeout_sec = -1;
attach_ctrlr_done, NULL, NULL, false, -1, 1, 0); opts.reconnect_delay_sec = 1;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, &opts, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2734,8 +2738,8 @@ test_bdev_unregister(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 2; g_ut_attach_bdev_count = 2;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2860,8 +2864,8 @@ test_init_ana_log_page(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 5; g_ut_attach_bdev_count = 5;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -2961,8 +2965,8 @@ test_reconnect_qpair(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3093,8 +3097,8 @@ test_create_bdev_ctrlr(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 0; g_ut_attach_bdev_count = 0;
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3115,8 +3119,8 @@ test_create_bdev_ctrlr(void)
ctrlr2->cdata.cntlid = ctrlr1->cdata.cntlid; ctrlr2->cdata.cntlid = ctrlr1->cdata.cntlid;
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3133,8 +3137,8 @@ test_create_bdev_ctrlr(void)
ctrlr2 = ut_attach_ctrlr(&path2.trid, 0, true, true); ctrlr2 = ut_attach_ctrlr(&path2.trid, 0, true, true);
SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL); SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL);
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3166,8 +3170,8 @@ test_create_bdev_ctrlr(void)
ctrlr2 = ut_attach_ctrlr(&path2.trid, 0, true, true); ctrlr2 = ut_attach_ctrlr(&path2.trid, 0, true, true);
SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL); SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL);
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3176,8 +3180,8 @@ test_create_bdev_ctrlr(void)
spdk_delay_us(g_opts.nvme_adminq_poll_period_us); spdk_delay_us(g_opts.nvme_adminq_poll_period_us);
poll_threads(); poll_threads();
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3271,8 +3275,8 @@ test_add_multi_ns_to_bdev(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 3; g_ut_attach_bdev_count = 3;
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, 32, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, 32,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3297,8 +3301,8 @@ test_add_multi_ns_to_bdev(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 2; g_ut_attach_bdev_count = 2;
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, 32, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, 32,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3374,8 +3378,8 @@ test_add_multi_ns_to_bdev(void)
ctrlr1->ns[0].uuid = &uuid1; ctrlr1->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, 32, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, 32,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3391,8 +3395,8 @@ test_add_multi_ns_to_bdev(void)
ctrlr2->ns[0].uuid = &uuid1; ctrlr2->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, 32, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, 32,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3478,8 +3482,8 @@ test_add_multi_io_paths_to_nbdev_ch(void)
ctrlr1->ns[0].uuid = &uuid1; ctrlr1->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3493,8 +3497,8 @@ test_add_multi_io_paths_to_nbdev_ch(void)
ctrlr2->ns[0].uuid = &uuid1; ctrlr2->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3541,8 +3545,8 @@ test_add_multi_io_paths_to_nbdev_ch(void)
ctrlr3->ns[0].uuid = &uuid1; ctrlr3->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path3.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path3.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3621,8 +3625,8 @@ test_admin_path(void)
ctrlr1->ns[0].uuid = &uuid1; ctrlr1->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3636,8 +3640,8 @@ test_admin_path(void)
ctrlr2->ns[0].uuid = &uuid1; ctrlr2->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3750,8 +3754,8 @@ test_reset_bdev_ctrlr(void)
ctrlr1 = ut_attach_ctrlr(&path1.trid, 1, true, true); ctrlr1 = ut_attach_ctrlr(&path1.trid, 1, true, true);
SPDK_CU_ASSERT_FATAL(ctrlr1 != NULL); SPDK_CU_ASSERT_FATAL(ctrlr1 != NULL);
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -3763,8 +3767,8 @@ test_reset_bdev_ctrlr(void)
ctrlr2 = ut_attach_ctrlr(&path2.trid, 1, true, true); ctrlr2 = ut_attach_ctrlr(&path2.trid, 1, true, true);
SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL); SPDK_CU_ASSERT_FATAL(ctrlr2 != NULL);
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -4027,6 +4031,7 @@ static void
test_retry_io_if_ana_state_is_updating(void) test_retry_io_if_ana_state_is_updating(void)
{ {
struct nvme_path_id path = {}; struct nvme_path_id path = {};
struct nvme_ctrlr_opts opts = {};
struct spdk_nvme_ctrlr *ctrlr; struct spdk_nvme_ctrlr *ctrlr;
struct nvme_bdev_ctrlr *nbdev_ctrlr; struct nvme_bdev_ctrlr *nbdev_ctrlr;
struct nvme_ctrlr *nvme_ctrlr; struct nvme_ctrlr *nvme_ctrlr;
@ -4052,8 +4057,11 @@ test_retry_io_if_ana_state_is_updating(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE, 0, opts.ctrlr_loss_timeout_sec = -1;
attach_ctrlr_done, NULL, NULL, false, -1, 1, 0); opts.reconnect_delay_sec = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, &opts, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -4180,8 +4188,8 @@ test_retry_io_for_io_path_error(void)
ctrlr1->ns[0].uuid = &uuid1; ctrlr1->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -4275,8 +4283,8 @@ test_retry_io_for_io_path_error(void)
ctrlr2->ns[0].uuid = &uuid1; ctrlr2->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -4383,8 +4391,8 @@ test_retry_io_count(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -4569,8 +4577,8 @@ test_concurrent_read_ana_log_page(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -4664,8 +4672,8 @@ test_retry_io_for_ana_error(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -4811,8 +4819,8 @@ test_retry_admin_passthru_for_path_error(void)
ctrlr1->ns[0].uuid = &uuid1; ctrlr1->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path1.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -4893,8 +4901,8 @@ test_retry_admin_passthru_for_path_error(void)
ctrlr2->ns[0].uuid = &uuid1; ctrlr2->ns[0].uuid = &uuid1;
rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path2.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, true, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, true);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -4985,8 +4993,8 @@ test_retry_admin_passthru_by_count(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE, 0, rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, false, 0, 0, 0); attach_ctrlr_done, NULL, NULL, NULL, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -5109,6 +5117,7 @@ static void
test_retry_io_if_ctrlr_is_resetting(void) test_retry_io_if_ctrlr_is_resetting(void)
{ {
struct nvme_path_id path = {}; struct nvme_path_id path = {};
struct nvme_ctrlr_opts opts = {};
struct spdk_nvme_ctrlr *ctrlr; struct spdk_nvme_ctrlr *ctrlr;
struct nvme_bdev_ctrlr *nbdev_ctrlr; struct nvme_bdev_ctrlr *nbdev_ctrlr;
struct nvme_ctrlr *nvme_ctrlr; struct nvme_ctrlr *nvme_ctrlr;
@ -5134,8 +5143,11 @@ test_retry_io_if_ctrlr_is_resetting(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE, 0, opts.ctrlr_loss_timeout_sec = -1;
attach_ctrlr_done, NULL, NULL, false, -1, 1, 0); opts.reconnect_delay_sec = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, &opts, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -5269,6 +5281,7 @@ static void
test_retry_admin_passthru_if_ctrlr_is_resetting(void) test_retry_admin_passthru_if_ctrlr_is_resetting(void)
{ {
struct nvme_path_id path = {}; struct nvme_path_id path = {};
struct nvme_ctrlr_opts opts = {};
struct spdk_nvme_ctrlr *ctrlr; struct spdk_nvme_ctrlr *ctrlr;
struct nvme_bdev_ctrlr *nbdev_ctrlr; struct nvme_bdev_ctrlr *nbdev_ctrlr;
struct nvme_ctrlr *nvme_ctrlr; struct nvme_ctrlr *nvme_ctrlr;
@ -5293,8 +5306,11 @@ test_retry_admin_passthru_if_ctrlr_is_resetting(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE, 0, opts.ctrlr_loss_timeout_sec = -1;
attach_ctrlr_done, NULL, NULL, false, -1, 1, 0); opts.reconnect_delay_sec = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, &opts, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);
@ -5404,8 +5420,8 @@ test_reconnect_ctrlr(void)
nvme_ctrlr = nvme_ctrlr_get_by_name("nvme0"); nvme_ctrlr = nvme_ctrlr_get_by_name("nvme0");
SPDK_CU_ASSERT_FATAL(nvme_ctrlr != NULL); SPDK_CU_ASSERT_FATAL(nvme_ctrlr != NULL);
nvme_ctrlr->ctrlr_loss_timeout_sec = 2; nvme_ctrlr->opts.ctrlr_loss_timeout_sec = 2;
nvme_ctrlr->reconnect_delay_sec = 1; nvme_ctrlr->opts.reconnect_delay_sec = 1;
ch1 = spdk_get_io_channel(nvme_ctrlr); ch1 = spdk_get_io_channel(nvme_ctrlr);
SPDK_CU_ASSERT_FATAL(ch1 != NULL); SPDK_CU_ASSERT_FATAL(ch1 != NULL);
@ -5550,8 +5566,8 @@ test_retry_failover_ctrlr(void)
nvme_ctrlr = nvme_ctrlr_get_by_name("nvme0"); nvme_ctrlr = nvme_ctrlr_get_by_name("nvme0");
SPDK_CU_ASSERT_FATAL(nvme_ctrlr != NULL); SPDK_CU_ASSERT_FATAL(nvme_ctrlr != NULL);
nvme_ctrlr->ctrlr_loss_timeout_sec = -1; nvme_ctrlr->opts.ctrlr_loss_timeout_sec = -1;
nvme_ctrlr->reconnect_delay_sec = 1; nvme_ctrlr->opts.reconnect_delay_sec = 1;
rc = bdev_nvme_add_secondary_trid(nvme_ctrlr, &ctrlr, &trid2); rc = bdev_nvme_add_secondary_trid(nvme_ctrlr, &ctrlr, &trid2);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
@ -5641,6 +5657,7 @@ static void
test_fail_path(void) test_fail_path(void)
{ {
struct nvme_path_id path = {}; struct nvme_path_id path = {};
struct nvme_ctrlr_opts opts = {};
struct spdk_nvme_ctrlr *ctrlr; struct spdk_nvme_ctrlr *ctrlr;
struct nvme_bdev_ctrlr *nbdev_ctrlr; struct nvme_bdev_ctrlr *nbdev_ctrlr;
struct nvme_ctrlr *nvme_ctrlr; struct nvme_ctrlr *nvme_ctrlr;
@ -5676,8 +5693,12 @@ test_fail_path(void)
g_ut_attach_ctrlr_status = 0; g_ut_attach_ctrlr_status = 0;
g_ut_attach_bdev_count = 1; g_ut_attach_bdev_count = 1;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE, 0, opts.ctrlr_loss_timeout_sec = 4;
attach_ctrlr_done, NULL, NULL, false, 4, 1, 2); opts.reconnect_delay_sec = 1;
opts.fast_io_fail_timeout_sec = 2;
rc = bdev_nvme_create(&path.trid, "nvme0", attached_names, STRING_SIZE,
attach_ctrlr_done, NULL, NULL, &opts, false);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
spdk_delay_us(1000); spdk_delay_us(1000);