diff --git a/include/spdk/ftl.h b/include/spdk/ftl.h index 33ba2abec..0c37ef39f 100644 --- a/include/spdk/ftl.h +++ b/include/spdk/ftl.h @@ -117,8 +117,6 @@ struct spdk_ftl_dev_init_opts { /* Thread responsible for core tasks execution */ struct spdk_thread *core_thread; - /* Thread responsible for read requests */ - struct spdk_thread *read_thread; /* Device's config */ const struct spdk_ftl_conf *conf; diff --git a/lib/ftl/ftl_core.c b/lib/ftl/ftl_core.c index 3f2f5c37d..b1f81a7a9 100644 --- a/lib/ftl/ftl_core.c +++ b/lib/ftl/ftl_core.c @@ -396,23 +396,13 @@ ftl_check_core_thread(const struct spdk_ftl_dev *dev) return dev->core_thread.thread == spdk_get_thread(); } -static bool -ftl_check_read_thread(const struct spdk_ftl_dev *dev) -{ - return dev->read_thread.thread == spdk_get_thread(); -} - struct spdk_io_channel * ftl_get_io_channel(const struct spdk_ftl_dev *dev) { if (ftl_check_core_thread(dev)) { return dev->core_thread.ioch; } - if (ftl_check_read_thread(dev)) { - return dev->read_thread.ioch; - } - assert(0); return NULL; } @@ -2037,10 +2027,10 @@ ftl_io_read(struct ftl_io *io) { struct spdk_ftl_dev *dev = io->dev; - if (ftl_check_read_thread(dev)) { + if (ftl_check_core_thread(dev)) { ftl_io_call_foreach_child(io, ftl_io_read_leaf); } else { - spdk_thread_send_msg(ftl_get_read_thread(dev), _ftl_io_read, io); + spdk_thread_send_msg(ftl_get_core_thread(dev), _ftl_io_read, io); } } @@ -2246,27 +2236,6 @@ ftl_process_retry_queue(struct spdk_ftl_dev *dev) } } -int -ftl_task_read(void *ctx) -{ - struct ftl_thread *thread = ctx; - struct spdk_ftl_dev *dev = thread->dev; - - if (dev->halt) { - if (ftl_shutdown_complete(dev)) { - spdk_poller_unregister(&thread->poller); - return 0; - } - } - - if (!TAILQ_EMPTY(&dev->retry_queue)) { - ftl_process_retry_queue(dev); - return 1; - } - - return 0; -} - int ftl_task_core(void *ctx) { @@ -2283,6 +2252,11 @@ ftl_task_core(void *ctx) ftl_process_writes(dev); ftl_process_relocs(dev); + if (!TAILQ_EMPTY(&dev->retry_queue)) { + ftl_process_retry_queue(dev); + return 1; + } + return 0; } diff --git a/lib/ftl/ftl_core.h b/lib/ftl/ftl_core.h index dce5b3f9e..51a51401c 100644 --- a/lib/ftl/ftl_core.h +++ b/lib/ftl/ftl_core.h @@ -229,7 +229,6 @@ struct spdk_ftl_dev { /* Threads */ struct ftl_thread core_thread; - struct ftl_thread read_thread; /* Devices' list */ STAILQ_ENTRY(spdk_ftl_dev) stailq; @@ -301,12 +300,6 @@ ftl_get_core_thread(const struct spdk_ftl_dev *dev) return dev->core_thread.thread; } -static inline struct spdk_thread * -ftl_get_read_thread(const struct spdk_ftl_dev *dev) -{ - return dev->read_thread.thread; -} - static inline size_t ftl_get_num_bands(const struct spdk_ftl_dev *dev) { diff --git a/lib/ftl/ftl_init.c b/lib/ftl/ftl_init.c index b16d1207e..ad5248a6b 100644 --- a/lib/ftl/ftl_init.c +++ b/lib/ftl/ftl_init.c @@ -492,7 +492,7 @@ ftl_init_bands_state(struct spdk_ftl_dev *dev) } static void -_ftl_dev_init_thread(void *ctx) +_ftl_dev_init_core_thread(void *ctx) { struct ftl_thread *thread = ctx; struct spdk_ftl_dev *dev = thread->dev; @@ -507,35 +507,20 @@ _ftl_dev_init_thread(void *ctx) } static int -ftl_dev_init_thread(struct spdk_ftl_dev *dev, struct ftl_thread *thread, - struct spdk_thread *spdk_thread, spdk_poller_fn fn, uint64_t period_us) +ftl_dev_init_core_thread(struct spdk_ftl_dev *dev, const struct spdk_ftl_dev_init_opts *opts) { + struct ftl_thread *thread = &dev->core_thread; + + if (!opts->core_thread) { + return -1; + } + thread->dev = dev; - thread->poller_fn = fn; - thread->thread = spdk_thread; - thread->period_us = period_us; - - spdk_thread_send_msg(spdk_thread, _ftl_dev_init_thread, thread); - return 0; -} - -static int -ftl_dev_init_threads(struct spdk_ftl_dev *dev, const struct spdk_ftl_dev_init_opts *opts) -{ - if (!opts->core_thread || !opts->read_thread) { - return -1; - } - - if (ftl_dev_init_thread(dev, &dev->core_thread, opts->core_thread, ftl_task_core, 0)) { - SPDK_ERRLOG("Unable to initialize core thread\n"); - return -1; - } - - if (ftl_dev_init_thread(dev, &dev->read_thread, opts->read_thread, ftl_task_read, 0)) { - SPDK_ERRLOG("Unable to initialize read thread\n"); - return -1; - } + thread->poller_fn = ftl_task_core; + thread->thread = opts->core_thread; + thread->period_us = 0; + spdk_thread_send_msg(opts->core_thread, _ftl_dev_init_core_thread, thread); return 0; } @@ -834,8 +819,8 @@ ftl_dev_init_state(struct ftl_dev_init_ctx *init_ctx) ftl_dev_update_bands(dev); - if (ftl_dev_init_threads(dev, &init_ctx->opts)) { - SPDK_ERRLOG("Unable to initialize device threads\n"); + if (ftl_dev_init_core_thread(dev, &init_ctx->opts)) { + SPDK_ERRLOG("Unable to initialize device thread\n"); goto fail; } @@ -1131,9 +1116,6 @@ ftl_dev_free_sync(struct spdk_ftl_dev *dev) if (dev->core_thread.thread) { ftl_dev_free_thread(dev, &dev->core_thread); } - if (dev->read_thread.thread) { - ftl_dev_free_thread(dev, &dev->read_thread); - } if (dev->bands) { for (i = 0; i < ftl_get_num_bands(dev); ++i) { @@ -1322,7 +1304,7 @@ ftl_halt_poller(void *ctx) { struct spdk_ftl_dev *dev = ctx; - if (!dev->core_thread.poller && !dev->read_thread.poller) { + if (!dev->core_thread.poller) { spdk_poller_unregister(&dev->fini_ctx.poller); if (ftl_dev_has_nv_cache(dev)) { diff --git a/module/bdev/ftl/bdev_ftl.c b/module/bdev/ftl/bdev_ftl.c index c6f430e8a..02e754bfe 100644 --- a/module/bdev/ftl/bdev_ftl.c +++ b/module/bdev/ftl/bdev_ftl.c @@ -592,7 +592,7 @@ bdev_ftl_create_bdev(const struct ftl_bdev_init_opts *bdev_opts, opts.conf = &bdev_opts->ftl_conf; /* TODO: set threads based on config */ - opts.core_thread = opts.read_thread = spdk_get_thread(); + opts.core_thread = spdk_get_thread(); rc = spdk_ftl_dev_init(&opts, bdev_ftl_create_cb, ftl_bdev); if (rc) {