bdev: Remove poller abstraction

Use the new one from io_channel.h.

Change-Id: I7bf6729caf6eeebcb58450a36119601957ad5da4
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/388290
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Ben Walker 2017-11-17 14:49:36 -07:00 committed by Jim Harris
parent 3aba1a5690
commit 44770c2a11
13 changed files with 41 additions and 149 deletions

View File

@ -22,6 +22,11 @@ framework (include/spdk/event.h) to the I/O channel library
(include/spdk/io_channel.h). This allows code that doesn't depend on the event (include/spdk/io_channel.h). This allows code that doesn't depend on the event
framework to request registration and unregistration of pollers. framework to request registration and unregistration of pollers.
### Block Device Abstraction Layer (bdev)
The poller abstraction was removed from the bdev layer. There is now a general purpose
abstraction for pollers available in include/spdk/io_channel.h
## v17.10: Logical Volumes ## v17.10: Logical Volumes
### New dependencies ### New dependencies

View File

@ -60,7 +60,7 @@ struct spdk_fio_msg {
/* A polling function */ /* A polling function */
struct spdk_fio_poller { struct spdk_fio_poller {
spdk_bdev_poller_fn cb_fn; spdk_poller_fn cb_fn;
void *cb_arg; void *cb_arg;
uint64_t period_microseconds; uint64_t period_microseconds;
@ -93,7 +93,7 @@ struct spdk_fio_thread {
unsigned int iocq_size; // number of iocq entries allocated unsigned int iocq_size; // number of iocq entries allocated
}; };
static __thread struct spdk_fio_thread *g_thread; static struct spdk_fio_thread *g_init_thread = NULL;
static bool g_spdk_env_initialized = false; static bool g_spdk_env_initialized = false;
static int spdk_fio_init(struct thread_data *td); static int spdk_fio_init(struct thread_data *td);
@ -131,15 +131,9 @@ spdk_fio_start_poller(void *thread_ctx,
void *arg, void *arg,
uint64_t period_microseconds) uint64_t period_microseconds)
{ {
struct spdk_fio_thread *fio_thread; struct spdk_fio_thread *fio_thread = thread_ctx;
struct spdk_fio_poller *fio_poller; struct spdk_fio_poller *fio_poller;
fio_thread = g_thread;
if (!fio_thread) {
SPDK_ERRLOG("Expected local thread to be initialized, but it was not.\n");
return NULL;
}
fio_poller = calloc(1, sizeof(*fio_poller)); fio_poller = calloc(1, sizeof(*fio_poller));
if (!fio_poller) { if (!fio_poller) {
SPDK_ERRLOG("Unable to allocate poller\n"); SPDK_ERRLOG("Unable to allocate poller\n");
@ -155,40 +149,19 @@ spdk_fio_start_poller(void *thread_ctx,
return (struct spdk_poller *)fio_poller; return (struct spdk_poller *)fio_poller;
} }
static void
spdk_fio_bdev_start_poller(struct spdk_bdev_poller **ppoller,
spdk_bdev_poller_fn fn,
void *arg,
uint64_t period_microseconds)
{
*ppoller = (struct spdk_bdev_poller *)spdk_poller_register(fn, arg, period_microseconds);
}
static void static void
spdk_fio_stop_poller(struct spdk_poller *poller, void *thread_ctx) spdk_fio_stop_poller(struct spdk_poller *poller, void *thread_ctx)
{ {
struct spdk_fio_poller *fio_poller; struct spdk_fio_poller *fio_poller;
struct spdk_fio_thread *fio_thread; struct spdk_fio_thread *fio_thread = thread_ctx;
fio_poller = (struct spdk_fio_poller *)poller; fio_poller = (struct spdk_fio_poller *)poller;
fio_thread = g_thread;
if (!fio_thread) {
SPDK_ERRLOG("Expected local thread to be initialized, but it was not.\n");
return;
}
TAILQ_REMOVE(&fio_thread->pollers, fio_poller, link); TAILQ_REMOVE(&fio_thread->pollers, fio_poller, link);
free(fio_poller); free(fio_poller);
} }
static void
spdk_fio_bdev_stop_poller(struct spdk_bdev_poller **ppoller)
{
spdk_poller_unregister((struct spdk_poller **)ppoller);
}
static int static int
spdk_fio_init_thread(struct thread_data *td) spdk_fio_init_thread(struct thread_data *td)
{ {
@ -230,9 +203,6 @@ spdk_fio_init_thread(struct thread_data *td)
TAILQ_INIT(&fio_thread->targets); TAILQ_INIT(&fio_thread->targets);
/* Cache the thread in a thread-local variable for easy access */
g_thread = fio_thread;
return 0; return 0;
} }
@ -291,15 +261,13 @@ spdk_fio_init_env(struct thread_data *td)
return -1; return -1;
} }
fio_thread = td->io_ops_data; g_init_thread = fio_thread = td->io_ops_data;
/* Initialize the copy engine */ /* Initialize the copy engine */
spdk_copy_engine_initialize(); spdk_copy_engine_initialize();
/* Initialize the bdev layer */ /* Initialize the bdev layer */
spdk_bdev_initialize(spdk_fio_bdev_init_done, &done, spdk_bdev_initialize(spdk_fio_bdev_init_done, &done);
spdk_fio_bdev_start_poller,
spdk_fio_bdev_stop_poller);
do { do {
/* Handle init and all cleanup events */ /* Handle init and all cleanup events */
@ -421,8 +389,6 @@ spdk_fio_cleanup_thread(struct spdk_fio_thread *fio_thread)
while (spdk_fio_poll_thread(fio_thread) > 0) {} while (spdk_fio_poll_thread(fio_thread) > 0) {}
g_thread = NULL;
spdk_free_thread(); spdk_free_thread();
spdk_ring_free(fio_thread->ring); spdk_ring_free(fio_thread->ring);
free(fio_thread->iocq); free(fio_thread->iocq);
@ -700,7 +666,7 @@ spdk_fio_finish_env(void)
size_t count; size_t count;
/* the same thread that called spdk_fio_init_env */ /* the same thread that called spdk_fio_init_env */
fio_thread = g_thread; fio_thread = g_init_thread;
spdk_bdev_finish(spdk_fio_module_finish_done, &done); spdk_bdev_finish(spdk_fio_module_finish_done, &done);

View File

@ -113,29 +113,16 @@ struct spdk_bdev_io_stat {
uint64_t num_write_ops; uint64_t num_write_ops;
}; };
struct spdk_bdev_poller;
typedef void (*spdk_bdev_init_cb)(void *cb_arg, int rc); typedef void (*spdk_bdev_init_cb)(void *cb_arg, int rc);
typedef void (*spdk_bdev_fini_cb)(void *cb_arg); typedef void (*spdk_bdev_fini_cb)(void *cb_arg);
typedef void (*spdk_bdev_poller_fn)(void *arg);
typedef void (*spdk_bdev_poller_start_cb)(struct spdk_bdev_poller **ppoller,
spdk_bdev_poller_fn fn,
void *arg,
uint64_t period_microseconds);
typedef void (*spdk_bdev_poller_stop_cb)(struct spdk_bdev_poller **ppoller);
/** /**
* Initialize block device modules. * Initialize block device modules.
* *
* \param cb_fn Called when the initialization is complete. * \param cb_fn Called when the initialization is complete.
* \param cb_arg Argument passed to function cb_fn. * \param cb_arg Argument passed to function cb_fn.
* \param start_poller_fn This function is called to request starting a poller.
* \param stop_poller_fn This function is called to request stopping a poller.
*/ */
void spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg, void spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg);
spdk_bdev_poller_start_cb start_poller_fn,
spdk_bdev_poller_stop_cb stop_poller_fn);
/** /**
* Perform cleanup work to remove the registered block device modules. * Perform cleanup work to remove the registered block device modules.

View File

@ -396,29 +396,6 @@ int spdk_bdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *d
struct spdk_bdev_module_if *module); struct spdk_bdev_module_if *module);
void spdk_bdev_module_release_bdev(struct spdk_bdev *bdev); void spdk_bdev_module_release_bdev(struct spdk_bdev *bdev);
/**
* Start a poller on the current thread to periodically call fn.
*
* \param[out] ppoller Will be filled with initialized poller pointer.
* \param fn Function to run periodically.
* \param arg Argument to be passed to fn.
* \param period_microseconds Delay between calls of the poller function,
* or 0 to call as frequently as possible.
*
* The user must call spdk_bdev_poller_stop() to clean up the resources allocated by this function.
*/
void spdk_bdev_poller_start(struct spdk_bdev_poller **ppoller,
spdk_bdev_poller_fn fn,
void *arg,
uint64_t period_microseconds);
/**
* Stop a poller started by spdk_bdev_poller_start().
*
* \param ppoller Poller to stop.
*/
void spdk_bdev_poller_stop(struct spdk_bdev_poller **ppoller);
/** /**
* Allocate a buffer for given bdev_io. Allocation will happen * Allocate a buffer for given bdev_io. Allocation will happen
* only if the bdev_io has no assigned SGL yet. The buffer will be * only if the bdev_io has no assigned SGL yet. The buffer will be

View File

@ -312,7 +312,7 @@ bdev_aio_create_cb(void *io_device, void *ctx_buf)
return -1; return -1;
} }
spdk_bdev_poller_start(&ch->poller, bdev_aio_poll, ch, 0); ch->poller = spdk_poller_register(bdev_aio_poll, ch, 0);
return 0; return 0;
} }
@ -322,7 +322,7 @@ bdev_aio_destroy_cb(void *io_device, void *ctx_buf)
struct bdev_aio_io_channel *io_channel = ctx_buf; struct bdev_aio_io_channel *io_channel = ctx_buf;
io_destroy(io_channel->io_ctx); io_destroy(io_channel->io_ctx);
spdk_bdev_poller_stop(&io_channel->poller); spdk_poller_unregister(&io_channel->poller);
} }
static struct spdk_io_channel * static struct spdk_io_channel *

View File

@ -51,7 +51,7 @@ struct bdev_aio_task {
struct bdev_aio_io_channel { struct bdev_aio_io_channel {
io_context_t io_ctx; io_context_t io_ctx;
struct spdk_bdev_poller *poller; struct spdk_poller *poller;
}; };
struct file_disk { struct file_disk {

View File

@ -75,9 +75,6 @@ struct spdk_bdev_mgr {
TAILQ_HEAD(, spdk_bdev) bdevs; TAILQ_HEAD(, spdk_bdev) bdevs;
spdk_bdev_poller_start_cb start_poller_fn;
spdk_bdev_poller_stop_cb stop_poller_fn;
bool init_complete; bool init_complete;
bool module_init_complete; bool module_init_complete;
@ -89,8 +86,6 @@ struct spdk_bdev_mgr {
static struct spdk_bdev_mgr g_bdev_mgr = { static struct spdk_bdev_mgr g_bdev_mgr = {
.bdev_modules = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.bdev_modules), .bdev_modules = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.bdev_modules),
.bdevs = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.bdevs), .bdevs = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.bdevs),
.start_poller_fn = NULL,
.stop_poller_fn = NULL,
.init_complete = false, .init_complete = false,
.module_init_complete = false, .module_init_complete = false,
}; };
@ -456,26 +451,8 @@ spdk_bdev_modules_init(void)
g_bdev_mgr.module_init_complete = true; g_bdev_mgr.module_init_complete = true;
return rc; return rc;
} }
void void
spdk_bdev_poller_start(struct spdk_bdev_poller **ppoller, spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg)
spdk_bdev_poller_fn fn,
void *arg,
uint64_t period_microseconds)
{
g_bdev_mgr.start_poller_fn(ppoller, fn, arg, period_microseconds);
}
void
spdk_bdev_poller_stop(struct spdk_bdev_poller **ppoller)
{
g_bdev_mgr.stop_poller_fn(ppoller);
}
void
spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg,
spdk_bdev_poller_start_cb start_poller_fn,
spdk_bdev_poller_stop_cb stop_poller_fn)
{ {
int cache_size; int cache_size;
int rc = 0; int rc = 0;
@ -486,9 +463,6 @@ spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg,
g_init_cb_fn = cb_fn; g_init_cb_fn = cb_fn;
g_init_cb_arg = cb_arg; g_init_cb_arg = cb_arg;
g_bdev_mgr.start_poller_fn = start_poller_fn;
g_bdev_mgr.stop_poller_fn = stop_poller_fn;
snprintf(mempool_name, sizeof(mempool_name), "bdev_io_%d", getpid()); snprintf(mempool_name, sizeof(mempool_name), "bdev_io_%d", getpid());
g_bdev_mgr.bdev_io_pool = spdk_mempool_create(mempool_name, g_bdev_mgr.bdev_io_pool = spdk_mempool_create(mempool_name,

View File

@ -62,7 +62,7 @@ struct nvme_ctrlr {
char *name; char *name;
int ref; int ref;
struct spdk_bdev_poller *adminq_timer_poller; struct spdk_poller *adminq_timer_poller;
/** linked list pointer for device list */ /** linked list pointer for device list */
TAILQ_ENTRY(nvme_ctrlr) tailq; TAILQ_ENTRY(nvme_ctrlr) tailq;
@ -78,7 +78,7 @@ struct nvme_bdev {
struct nvme_io_channel { struct nvme_io_channel {
struct spdk_nvme_qpair *qpair; struct spdk_nvme_qpair *qpair;
struct spdk_bdev_poller *poller; struct spdk_poller *poller;
bool collect_spin_stat; bool collect_spin_stat;
uint64_t spin_ticks; uint64_t spin_ticks;
@ -129,7 +129,7 @@ static int g_timeout = 0;
static int g_nvme_adminq_poll_timeout_us = 0; static int g_nvme_adminq_poll_timeout_us = 0;
static bool g_nvme_hotplug_enabled = false; static bool g_nvme_hotplug_enabled = false;
static int g_nvme_hotplug_poll_timeout_us = 0; static int g_nvme_hotplug_poll_timeout_us = 0;
static struct spdk_bdev_poller *g_hotplug_poller; static struct spdk_poller *g_hotplug_poller;
static pthread_mutex_t g_bdev_nvme_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t g_bdev_nvme_mutex = PTHREAD_MUTEX_INITIALIZER;
static TAILQ_HEAD(, nvme_ctrlr) g_nvme_ctrlrs = TAILQ_HEAD_INITIALIZER(g_nvme_ctrlrs); static TAILQ_HEAD(, nvme_ctrlr) g_nvme_ctrlrs = TAILQ_HEAD_INITIALIZER(g_nvme_ctrlrs);
@ -249,7 +249,7 @@ bdev_nvme_destruct(void *ctx)
TAILQ_REMOVE(&g_nvme_ctrlrs, nvme_ctrlr, tailq); TAILQ_REMOVE(&g_nvme_ctrlrs, nvme_ctrlr, tailq);
pthread_mutex_unlock(&g_bdev_nvme_mutex); pthread_mutex_unlock(&g_bdev_nvme_mutex);
spdk_io_device_unregister(nvme_ctrlr->ctrlr, bdev_nvme_unregister_cb); spdk_io_device_unregister(nvme_ctrlr->ctrlr, bdev_nvme_unregister_cb);
spdk_bdev_poller_stop(&nvme_ctrlr->adminq_timer_poller); spdk_poller_unregister(&nvme_ctrlr->adminq_timer_poller);
free(nvme_ctrlr->name); free(nvme_ctrlr->name);
free(nvme_ctrlr); free(nvme_ctrlr);
return 0; return 0;
@ -532,7 +532,7 @@ bdev_nvme_create_cb(void *io_device, void *ctx_buf)
return -1; return -1;
} }
spdk_bdev_poller_start(&ch->poller, bdev_nvme_poll, ch, 0); ch->poller = spdk_poller_register(bdev_nvme_poll, ch, 0);
return 0; return 0;
} }
@ -542,7 +542,7 @@ bdev_nvme_destroy_cb(void *io_device, void *ctx_buf)
struct nvme_io_channel *ch = ctx_buf; struct nvme_io_channel *ch = ctx_buf;
spdk_nvme_ctrlr_free_io_qpair(ch->qpair); spdk_nvme_ctrlr_free_io_qpair(ch->qpair);
spdk_bdev_poller_stop(&ch->poller); spdk_poller_unregister(&ch->poller);
} }
static struct spdk_io_channel * static struct spdk_io_channel *
@ -871,7 +871,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
return; return;
} }
spdk_bdev_poller_start(&nvme_ctrlr->adminq_timer_poller, bdev_nvme_poll_adminq, ctrlr, nvme_ctrlr->adminq_timer_poller = spdk_poller_register(bdev_nvme_poll_adminq, ctrlr,
g_nvme_adminq_poll_timeout_us); g_nvme_adminq_poll_timeout_us);
TAILQ_INSERT_TAIL(&g_nvme_ctrlrs, nvme_ctrlr, tailq); TAILQ_INSERT_TAIL(&g_nvme_ctrlrs, nvme_ctrlr, tailq);
@ -1100,7 +1100,7 @@ bdev_nvme_library_init(void)
} }
if (g_nvme_hotplug_enabled) { if (g_nvme_hotplug_enabled) {
spdk_bdev_poller_start(&g_hotplug_poller, bdev_nvme_hotplug, NULL, g_hotplug_poller = spdk_poller_register(bdev_nvme_hotplug, NULL,
g_nvme_hotplug_poll_timeout_us); g_nvme_hotplug_poll_timeout_us);
} }
@ -1115,7 +1115,7 @@ bdev_nvme_library_fini(void)
struct nvme_bdev *nvme_bdev, *btmp; struct nvme_bdev *nvme_bdev, *btmp;
if (g_nvme_hotplug_enabled) { if (g_nvme_hotplug_enabled) {
spdk_bdev_poller_stop(&g_hotplug_poller); spdk_poller_unregister(&g_hotplug_poller);
} }
TAILQ_FOREACH_SAFE(nvme_bdev, &g_nvme_bdevs, link, btmp) { TAILQ_FOREACH_SAFE(nvme_bdev, &g_nvme_bdevs, link, btmp) {

View File

@ -68,7 +68,7 @@ struct bdev_rbd_io_channel {
struct pollfd pfd; struct pollfd pfd;
rbd_image_t image; rbd_image_t image;
struct bdev_rbd *disk; struct bdev_rbd *disk;
struct spdk_bdev_poller *poller; struct spdk_poller *poller;
}; };
static void static void
@ -417,7 +417,7 @@ bdev_rbd_create_cb(void *io_device, void *ctx_buf)
goto err; goto err;
} }
spdk_bdev_poller_start(&ch->poller, bdev_rbd_io_poll, ch, 0); ch->poller = spdk_poller_register(bdev_rbd_io_poll, ch, 0);
return 0; return 0;
@ -433,7 +433,7 @@ bdev_rbd_destroy_cb(void *io_device, void *ctx_buf)
bdev_rbd_free_channel(io_channel); bdev_rbd_free_channel(io_channel);
spdk_bdev_poller_stop(&io_channel->poller); spdk_poller_unregister(&io_channel->poller);
} }
static struct spdk_io_channel * static struct spdk_io_channel *

View File

@ -547,7 +547,7 @@ bdev_virtio_create_cb(void *io_device, void *ctx_buf)
ch->vdev = vdev; ch->vdev = vdev;
ch->vq = vq; ch->vq = vq;
spdk_bdev_poller_start(&vq->poller, bdev_virtio_poll, ch, 0); vq->poller = spdk_poller_register(bdev_virtio_poll, ch, 0);
return 0; return 0;
} }
@ -559,7 +559,7 @@ bdev_virtio_destroy_cb(void *io_device, void *ctx_buf)
struct virtio_dev *vdev = io_channel->vdev; struct virtio_dev *vdev = io_channel->vdev;
struct virtqueue *vq = io_channel->vq; struct virtqueue *vq = io_channel->vq;
spdk_bdev_poller_stop(&vq->poller); spdk_poller_unregister(&vq->poller);
virtio_dev_release_queue(vdev, vq->vq_queue_index); virtio_dev_release_queue(vdev, vq->vq_queue_index);
} }
@ -604,7 +604,7 @@ scan_target_finish(struct virtio_scsi_scan_base *base)
return; return;
} }
spdk_bdev_poller_stop(&base->vq->poller); spdk_poller_unregister(&base->vq->poller);
base->vq->poller_ctx = NULL; base->vq->poller_ctx = NULL;
virtio_dev_release_queue(base->vdev, base->vq->vq_queue_index); virtio_dev_release_queue(base->vdev, base->vq->vq_queue_index);
@ -627,7 +627,7 @@ scan_target_finish(struct virtio_scsi_scan_base *base)
ctrlq = base->vdev->vqs[VIRTIO_SCSI_CONTROLQ]; ctrlq = base->vdev->vqs[VIRTIO_SCSI_CONTROLQ];
ctrlq->poller_ctx = ctrlq_ring; ctrlq->poller_ctx = ctrlq_ring;
spdk_bdev_poller_start(&ctrlq->poller, bdev_virtio_ctrlq_poll, base->vdev, CTRLQ_POLL_PERIOD_US); ctrlq->poller = spdk_poller_register(bdev_virtio_ctrlq_poll, base->vdev, CTRLQ_POLL_PERIOD_US);
spdk_io_device_register(base->vdev, bdev_virtio_create_cb, bdev_virtio_destroy_cb, spdk_io_device_register(base->vdev, bdev_virtio_create_cb, bdev_virtio_destroy_cb,
sizeof(struct bdev_virtio_io_channel)); sizeof(struct bdev_virtio_io_channel));
@ -1094,7 +1094,7 @@ bdev_virtio_scsi_free(struct virtio_dev *vdev)
if (virtio_dev_queue_is_acquired(vdev, VIRTIO_SCSI_REQUESTQ)) { if (virtio_dev_queue_is_acquired(vdev, VIRTIO_SCSI_REQUESTQ)) {
vq = vdev->vqs[VIRTIO_SCSI_REQUESTQ]; vq = vdev->vqs[VIRTIO_SCSI_REQUESTQ];
spdk_bdev_poller_stop(&vq->poller); spdk_poller_unregister(&vq->poller);
spdk_dma_free(vq->poller_ctx); spdk_dma_free(vq->poller_ctx);
vq->poller_ctx = NULL; vq->poller_ctx = NULL;
virtio_dev_release_queue(vdev, VIRTIO_SCSI_REQUESTQ); virtio_dev_release_queue(vdev, VIRTIO_SCSI_REQUESTQ);
@ -1145,7 +1145,7 @@ bdev_virtio_scsi_scan(struct virtio_dev *vdev, virtio_create_device_cb cb_fn, vo
vq = vdev->vqs[VIRTIO_SCSI_REQUESTQ]; vq = vdev->vqs[VIRTIO_SCSI_REQUESTQ];
base->vq = vq; base->vq = vq;
vq->poller_ctx = base; vq->poller_ctx = base;
spdk_bdev_poller_start(&vq->poller, bdev_scan_poll, base, 0); vq->poller = spdk_poller_register(bdev_scan_poll, base, 0);
rc = scan_target(base); rc = scan_target(base);
if (rc) { if (rc) {
SPDK_ERRLOG("Failed to start target scan.\n"); SPDK_ERRLOG("Failed to start target scan.\n");
@ -1218,7 +1218,7 @@ virtio_scsi_dev_unregister_cb(void *io_device)
if (virtio_dev_queue_is_acquired(vdev, VIRTIO_SCSI_CONTROLQ)) { if (virtio_dev_queue_is_acquired(vdev, VIRTIO_SCSI_CONTROLQ)) {
vq = vdev->vqs[VIRTIO_SCSI_CONTROLQ]; vq = vdev->vqs[VIRTIO_SCSI_CONTROLQ];
spdk_bdev_poller_stop(&vq->poller); spdk_poller_unregister(&vq->poller);
send_ring = vq->poller_ctx; send_ring = vq->poller_ctx;
/* bdevs built on top of this vdev mustn't be destroyed with outstanding I/O. */ /* bdevs built on top of this vdev mustn't be destroyed with outstanding I/O. */
assert(spdk_ring_count(send_ring) == 0); assert(spdk_ring_count(send_ring) == 0);

View File

@ -188,7 +188,7 @@ struct virtqueue {
struct spdk_thread *owner_thread; struct spdk_thread *owner_thread;
/** Response poller. */ /** Response poller. */
struct spdk_bdev_poller *poller; struct spdk_poller *poller;
/** Context for response poller. */ /** Context for response poller. */
void *poller_ctx; void *poller_ctx;

View File

@ -46,27 +46,10 @@ spdk_bdev_initialize_complete(void *cb_arg, int rc)
spdk_subsystem_init_next(rc); spdk_subsystem_init_next(rc);
} }
static void
spdk_bdev_subsystem_start_poller(struct spdk_bdev_poller **ppoller,
spdk_bdev_poller_fn fn,
void *arg,
uint64_t period_microseconds)
{
*ppoller = (struct spdk_bdev_poller *)spdk_poller_register(fn, arg, period_microseconds);
}
static void
spdk_bdev_subsystem_stop_poller(struct spdk_bdev_poller **ppoller)
{
spdk_poller_unregister((struct spdk_poller **)ppoller);
}
static void static void
spdk_bdev_subsystem_initialize(void) spdk_bdev_subsystem_initialize(void)
{ {
spdk_bdev_initialize(spdk_bdev_initialize_complete, NULL, spdk_bdev_initialize(spdk_bdev_initialize_complete, NULL);
spdk_bdev_subsystem_start_poller,
spdk_bdev_subsystem_stop_poller);
} }
static void static void

View File

@ -202,7 +202,7 @@ setup_test(void)
bool done = false; bool done = false;
allocate_threads(BDEV_UT_NUM_THREADS); allocate_threads(BDEV_UT_NUM_THREADS);
spdk_bdev_initialize(bdev_init_cb, &done, NULL, NULL); spdk_bdev_initialize(bdev_init_cb, &done);
register_bdev(); register_bdev();
spdk_bdev_open(&g_bdev.bdev, true, NULL, NULL, &g_desc); spdk_bdev_open(&g_bdev.bdev, true, NULL, NULL, &g_desc);
} }