diff options
Diffstat (limited to 'lib/libnvmf/nvmf_transport.c')
-rw-r--r-- | lib/libnvmf/nvmf_transport.c | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/lib/libnvmf/nvmf_transport.c b/lib/libnvmf/nvmf_transport.c index 1a8505f2a993..b105c17d2efb 100644 --- a/lib/libnvmf/nvmf_transport.c +++ b/lib/libnvmf/nvmf_transport.c @@ -236,16 +236,36 @@ nvmf_send_controller_data(const struct nvmf_capsule *nc, const void *buf, } int -nvmf_kernel_handoff_params(struct nvmf_qpair *qp, - struct nvmf_handoff_qpair_params *qparams) +nvmf_kernel_handoff_params(struct nvmf_qpair *qp, nvlist_t **nvlp) { - memset(qparams, 0, sizeof(*qparams)); - qparams->admin = qp->nq_admin; - qparams->sq_flow_control = qp->nq_flow_control; - qparams->qsize = qp->nq_qsize; - qparams->sqhd = qp->nq_sqhd; - qparams->sqtail = qp->nq_sqtail; - return (qp->nq_association->na_ops->kernel_handoff_params(qp, qparams)); + nvlist_t *nvl; + int error; + + nvl = nvlist_create(0); + nvlist_add_bool(nvl, "admin", qp->nq_admin); + nvlist_add_bool(nvl, "sq_flow_control", qp->nq_flow_control); + nvlist_add_number(nvl, "qsize", qp->nq_qsize); + nvlist_add_number(nvl, "sqhd", qp->nq_sqhd); + if (!qp->nq_association->na_controller) + nvlist_add_number(nvl, "sqtail", qp->nq_sqtail); + qp->nq_association->na_ops->kernel_handoff_params(qp, nvl); + error = nvlist_error(nvl); + if (error != 0) { + nvlist_destroy(nvl); + return (error); + } + + *nvlp = nvl; + return (0); +} + +int +nvmf_populate_dle(struct nvmf_qpair *qp, struct nvme_discovery_log_entry *dle) +{ + struct nvmf_association *na = qp->nq_association; + + dle->trtype = na->na_trtype; + return (na->na_ops->populate_dle(qp, dle)); } const char * @@ -267,3 +287,21 @@ nvmf_transport_type(uint8_t trtype) return (buf); } } + +int +nvmf_pack_ioc_nvlist(struct nvmf_ioc_nv *nv, nvlist_t *nvl) +{ + int error; + + memset(nv, 0, sizeof(*nv)); + + error = nvlist_error(nvl); + if (error) + return (error); + + nv->data = nvlist_pack(nvl, &nv->size); + if (nv->data == NULL) + return (ENOMEM); + + return (0); +} |