fio_plugin: check the whether the qpair can be allocated.
If it cannot be allocated, we should return error. Change-Id: I48aa50a8842c35ee112fe7185128b1bc1930176e Signed-off-by: Ziye Yang <optimistyzy@gmail.com> Reviewed-on: https://review.gerrithub.io/386369 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
322cae6af4
commit
cc57c4a9bc
@ -68,6 +68,7 @@ struct spdk_fio_ctrlr {
|
||||
static struct spdk_fio_ctrlr *ctrlr_g;
|
||||
static int td_count;
|
||||
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
static bool g_error;
|
||||
|
||||
struct spdk_fio_qpair {
|
||||
struct fio_file *f;
|
||||
@ -130,6 +131,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
||||
ns_id = atoi(p + 3);
|
||||
if (!ns_id) {
|
||||
SPDK_ERRLOG("namespace id should be >=1, but current value=0\n");
|
||||
g_error = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -140,6 +142,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
||||
fio_ctrlr = calloc(1, sizeof(*fio_ctrlr));
|
||||
if (!fio_ctrlr) {
|
||||
SPDK_ERRLOG("Cannot allocate space for fio_ctrlr\n");
|
||||
g_error = true;
|
||||
return;
|
||||
}
|
||||
fio_ctrlr->opts = *opts;
|
||||
@ -152,6 +155,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
||||
ns = spdk_nvme_ctrlr_get_ns(fio_ctrlr->ctrlr, ns_id);
|
||||
if (ns == NULL) {
|
||||
SPDK_ERRLOG("Cannot get namespace by ns_id=%d\n", ns_id);
|
||||
g_error = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -160,6 +164,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
||||
if ((fio_qpair->f == f) ||
|
||||
((spdk_nvme_transport_id_compare(trid, &fio_qpair->fio_ctrlr->tr_id) == 0) &&
|
||||
(spdk_nvme_ns_get_id(fio_qpair->ns) == ns_id))) {
|
||||
/* Not the error case. Avoid duplicated connection */
|
||||
return;
|
||||
}
|
||||
fio_qpair = fio_qpair->next;
|
||||
@ -168,10 +173,19 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
||||
/* create a new qpair */
|
||||
fio_qpair = calloc(1, sizeof(*fio_qpair));
|
||||
if (!fio_qpair) {
|
||||
g_error = true;
|
||||
SPDK_ERRLOG("Cannot allocate space for fio_qpair\n");
|
||||
return;
|
||||
}
|
||||
|
||||
fio_qpair->qpair = spdk_nvme_ctrlr_alloc_io_qpair(fio_ctrlr->ctrlr, NULL, 0);
|
||||
if (!fio_qpair->qpair) {
|
||||
SPDK_ERRLOG("Cannot allocate nvme io_qpair any more\n");
|
||||
g_error = true;
|
||||
free(fio_qpair);
|
||||
return;
|
||||
}
|
||||
|
||||
fio_qpair->ns = ns;
|
||||
fio_qpair->f = f;
|
||||
fio_qpair->fio_ctrlr = fio_ctrlr;
|
||||
@ -180,6 +194,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
||||
|
||||
f->real_file_size = spdk_nvme_ns_get_size(fio_qpair->ns);
|
||||
if (f->real_file_size <= 0) {
|
||||
g_error = true;
|
||||
SPDK_ERRLOG("Cannot get namespace size by ns=%p\n", ns);
|
||||
return;
|
||||
}
|
||||
@ -200,7 +215,7 @@ static int spdk_fio_setup(struct thread_data *td)
|
||||
struct spdk_env_opts opts;
|
||||
struct fio_file *f;
|
||||
char *p;
|
||||
int rc;
|
||||
int rc = 0;
|
||||
struct spdk_nvme_transport_id trid;
|
||||
struct spdk_fio_ctrlr *fio_ctrlr;
|
||||
char *trid_info;
|
||||
@ -284,13 +299,19 @@ static int spdk_fio_setup(struct thread_data *td)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_error) {
|
||||
log_err("Failed to initialize spdk fio plugin\n");
|
||||
rc = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
td_count++;
|
||||
|
||||
pthread_mutex_unlock(&mutex);
|
||||
|
||||
return 0;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int spdk_fio_open(struct thread_data *td, struct fio_file *f)
|
||||
|
Loading…
x
Reference in New Issue
Block a user