lib/nvme: change api for io message
API changes in this patch: 1) nvme_io_msg_ctrlr_start => nvme_io_msg_ctrlr_register 2) nvme_io_msg_ctrlr_stop with (shutdown == false) => nvme_io_msg_ctrlr_unregister 3) nvme_io_msg_ctrlr_stop with (shutdown == true) => nvme_io_msg_ctrlr_detach Change-Id: I60153ebbfb0d0b22575128d106f9333c3887213d Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/474096 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
b078bc8e42
commit
9eb0ffa90c
@ -69,7 +69,7 @@ spdk_nvme_detach(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
nvme_ctrlr_proc_put_ref(ctrlr);
|
nvme_ctrlr_proc_put_ref(ctrlr);
|
||||||
|
|
||||||
if (nvme_ctrlr_get_ref_count(ctrlr) == 0) {
|
if (nvme_ctrlr_get_ref_count(ctrlr) == 0) {
|
||||||
nvme_io_msg_ctrlr_stop(ctrlr, NULL, true);
|
nvme_io_msg_ctrlr_detach(ctrlr);
|
||||||
if (nvme_ctrlr_shared(ctrlr)) {
|
if (nvme_ctrlr_shared(ctrlr)) {
|
||||||
TAILQ_REMOVE(&g_spdk_nvme_driver->shared_attached_ctrlrs, ctrlr, tailq);
|
TAILQ_REMOVE(&g_spdk_nvme_driver->shared_attached_ctrlrs, ctrlr, tailq);
|
||||||
} else {
|
} else {
|
||||||
|
@ -778,14 +778,14 @@ spdk_nvme_cuse_register(struct spdk_nvme_ctrlr *ctrlr, const char *dev_path)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = nvme_io_msg_ctrlr_start(ctrlr, &cuse_nvme_io_msg_producer);
|
rc = nvme_io_msg_ctrlr_register(ctrlr, &cuse_nvme_io_msg_producer);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = nvme_cuse_start(ctrlr, dev_path);
|
rc = nvme_cuse_start(ctrlr, dev_path);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
nvme_io_msg_ctrlr_stop(ctrlr, &cuse_nvme_io_msg_producer, false);
|
nvme_io_msg_ctrlr_unregister(ctrlr, &cuse_nvme_io_msg_producer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
@ -796,7 +796,7 @@ spdk_nvme_cuse_unregister(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
{
|
{
|
||||||
nvme_cuse_stop(ctrlr);
|
nvme_cuse_stop(ctrlr);
|
||||||
|
|
||||||
nvme_io_msg_ctrlr_stop(ctrlr, &cuse_nvme_io_msg_producer, false);
|
nvme_io_msg_ctrlr_unregister(ctrlr, &cuse_nvme_io_msg_producer);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
@ -107,7 +107,8 @@ spdk_nvme_io_msg_process(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
nvme_io_msg_ctrlr_start(struct spdk_nvme_ctrlr *ctrlr, struct nvme_io_msg_producer *io_msg_producer)
|
nvme_io_msg_ctrlr_register(struct spdk_nvme_ctrlr *ctrlr,
|
||||||
|
struct nvme_io_msg_producer *io_msg_producer)
|
||||||
{
|
{
|
||||||
if (io_msg_producer == NULL) {
|
if (io_msg_producer == NULL) {
|
||||||
SPDK_ERRLOG("io_msg_producer cannot be NULL\n");
|
SPDK_ERRLOG("io_msg_producer cannot be NULL\n");
|
||||||
@ -144,26 +145,12 @@ nvme_io_msg_ctrlr_start(struct spdk_nvme_ctrlr *ctrlr, struct nvme_io_msg_produc
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nvme_io_msg_ctrlr_stop(struct spdk_nvme_ctrlr *ctrlr, struct nvme_io_msg_producer *io_msg_producer,
|
nvme_io_msg_ctrlr_detach(struct spdk_nvme_ctrlr *ctrlr)
|
||||||
bool shutdown)
|
|
||||||
{
|
{
|
||||||
if (STAILQ_EMPTY(&ctrlr->io_producers) && shutdown) {
|
if (ctrlr->external_io_msgs) {
|
||||||
/* Shutdown path with no producers registered = io msg ctrlr not started */
|
spdk_ring_free(ctrlr->external_io_msgs);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (io_msg_producer != NULL) {
|
|
||||||
STAILQ_REMOVE(&ctrlr->io_producers, io_msg_producer, nvme_io_msg_producer, link);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!STAILQ_EMPTY(&ctrlr->io_producers) && !shutdown) {
|
|
||||||
/* There are still some registered producers */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(ctrlr->external_io_msgs);
|
|
||||||
spdk_ring_free(ctrlr->external_io_msgs);
|
|
||||||
|
|
||||||
if (ctrlr->external_io_msgs_qpair) {
|
if (ctrlr->external_io_msgs_qpair) {
|
||||||
spdk_nvme_ctrlr_free_io_qpair(ctrlr->external_io_msgs_qpair);
|
spdk_nvme_ctrlr_free_io_qpair(ctrlr->external_io_msgs_qpair);
|
||||||
ctrlr->external_io_msgs_qpair = NULL;
|
ctrlr->external_io_msgs_qpair = NULL;
|
||||||
@ -171,3 +158,16 @@ nvme_io_msg_ctrlr_stop(struct spdk_nvme_ctrlr *ctrlr, struct nvme_io_msg_produce
|
|||||||
|
|
||||||
pthread_mutex_destroy(&ctrlr->external_io_msgs_lock);
|
pthread_mutex_destroy(&ctrlr->external_io_msgs_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nvme_io_msg_ctrlr_unregister(struct spdk_nvme_ctrlr *ctrlr,
|
||||||
|
struct nvme_io_msg_producer *io_msg_producer)
|
||||||
|
{
|
||||||
|
if (io_msg_producer != NULL) {
|
||||||
|
STAILQ_REMOVE(&ctrlr->io_producers, io_msg_producer, nvme_io_msg_producer, link);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (STAILQ_EMPTY(&ctrlr->io_producers)) {
|
||||||
|
nvme_io_msg_ctrlr_detach(ctrlr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -78,9 +78,10 @@ int nvme_io_msg_send(struct spdk_nvme_ctrlr *ctrlr, uint32_t nsid, spdk_nvme_io_
|
|||||||
*/
|
*/
|
||||||
int spdk_nvme_io_msg_process(struct spdk_nvme_ctrlr *ctrlr);
|
int spdk_nvme_io_msg_process(struct spdk_nvme_ctrlr *ctrlr);
|
||||||
|
|
||||||
int nvme_io_msg_ctrlr_start(struct spdk_nvme_ctrlr *ctrlr,
|
int nvme_io_msg_ctrlr_register(struct spdk_nvme_ctrlr *ctrlr,
|
||||||
struct nvme_io_msg_producer *io_msg_producer);
|
struct nvme_io_msg_producer *io_msg_producer);
|
||||||
void nvme_io_msg_ctrlr_stop(struct spdk_nvme_ctrlr *ctrlr,
|
void nvme_io_msg_ctrlr_unregister(struct spdk_nvme_ctrlr *ctrlr,
|
||||||
struct nvme_io_msg_producer *io_msg_producer, bool shutdown);
|
struct nvme_io_msg_producer *io_msg_producer);
|
||||||
|
void nvme_io_msg_ctrlr_detach(struct spdk_nvme_ctrlr *ctrlr);
|
||||||
|
|
||||||
#endif /* SPDK_NVME_IO_MSG_H_ */
|
#endif /* SPDK_NVME_IO_MSG_H_ */
|
||||||
|
@ -60,8 +60,7 @@ DEFINE_STUB(nvme_transport_ctrlr_construct, struct spdk_nvme_ctrlr *,
|
|||||||
(const struct spdk_nvme_transport_id *trid,
|
(const struct spdk_nvme_transport_id *trid,
|
||||||
const struct spdk_nvme_ctrlr_opts *opts,
|
const struct spdk_nvme_ctrlr_opts *opts,
|
||||||
void *devhandle), NULL);
|
void *devhandle), NULL);
|
||||||
DEFINE_STUB_V(nvme_io_msg_ctrlr_stop, (struct spdk_nvme_ctrlr *ctrlr,
|
DEFINE_STUB_V(nvme_io_msg_ctrlr_detach, (struct spdk_nvme_ctrlr *ctrlr));
|
||||||
struct nvme_io_msg_producer *io_msg_producer, bool shutdown));
|
|
||||||
|
|
||||||
static bool ut_destruct_called = false;
|
static bool ut_destruct_called = false;
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user