bdev: Move event subsystem initialization to event_bdev

This breaks the dependency on the event subsystem logic.

Change-Id: Ic47a219bc1e272c3421b265f74bba959e1aa5f62
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/365730
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Ben Walker 2017-06-14 16:37:15 -07:00 committed by Jim Harris
parent aacd61d54a
commit 90779f58c7
3 changed files with 46 additions and 8 deletions

View File

@ -41,7 +41,6 @@
#include "spdk/stdinc.h"
#include "spdk/event.h"
#include "spdk/scsi_spec.h"
#include "spdk/nvme_spec.h"
@ -107,7 +106,9 @@ struct spdk_bdev_io_stat {
uint64_t num_write_ops;
};
void spdk_bdev_initialize(void);
typedef void (*spdk_bdev_init_cb)(void *cb_arg, int rc);
void spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg);
int spdk_bdev_finish(void);
void spdk_bdev_config_text(FILE *fp);

View File

@ -44,7 +44,6 @@
#include "spdk/scsi_spec.h"
#include "spdk_internal/bdev.h"
#include "spdk_internal/event.h"
#include "spdk_internal/log.h"
#include "spdk/string.h"
@ -82,6 +81,8 @@ static struct spdk_bdev_mgr g_bdev_mgr = {
static struct spdk_bdev_module_if *g_next_bdev_module;
static struct spdk_bdev_module_if *g_next_vbdev_module;
static spdk_bdev_init_cb g_cb_fn = NULL;
static void *g_cb_arg = NULL;
struct spdk_bdev_mgmt_channel {
need_buf_tailq_t need_buf_small;
@ -298,13 +299,25 @@ spdk_bdev_mgmt_channel_destroy(void *io_device, void *ctx_buf)
}
}
static void
spdk_bdev_init_complete(int rc)
{
spdk_bdev_init_cb cb_fn = g_cb_fn;
void *cb_arg = g_cb_arg;
g_cb_fn = NULL;
g_cb_arg = NULL;
cb_fn(cb_arg, rc);
}
void
spdk_bdev_module_init_next(int rc)
{
if (rc) {
assert(g_next_bdev_module != NULL);
SPDK_ERRLOG("Failed to init bdev module: %s\n", g_next_bdev_module->module_name);
spdk_subsystem_init_next(rc);
spdk_bdev_init_complete(rc);
return;
}
@ -327,7 +340,7 @@ spdk_vbdev_module_init_next(int rc)
if (rc) {
assert(g_next_vbdev_module != NULL);
SPDK_ERRLOG("Failed to init vbdev module: %s\n", g_next_vbdev_module->module_name);
spdk_subsystem_init_next(rc);
spdk_bdev_init_complete(rc);
return;
}
@ -340,16 +353,21 @@ spdk_vbdev_module_init_next(int rc)
if (g_next_vbdev_module) {
g_next_vbdev_module->module_init();
} else {
spdk_subsystem_init_next(0);
spdk_bdev_init_complete(rc);;
}
}
void
spdk_bdev_initialize(void)
spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg)
{
int cache_size;
int rc = 0;
assert(cb_fn != NULL);
g_cb_fn = cb_fn;
g_cb_arg = cb_arg;
g_bdev_mgr.bdev_io_pool = spdk_mempool_create("blockdev_io",
SPDK_BDEV_IO_POOL_SIZE,
sizeof(struct spdk_bdev_io) +

View File

@ -37,5 +37,24 @@
#include "spdk_internal/event.h"
SPDK_SUBSYSTEM_REGISTER(bdev, spdk_bdev_initialize, spdk_bdev_finish, spdk_bdev_config_text)
static void
spdk_bdev_initialize_complete(void *cb_arg, int rc)
{
spdk_subsystem_init_next(rc);
}
static void
spdk_bdev_subsystem_initialize(void)
{
spdk_bdev_initialize(spdk_bdev_initialize_complete, NULL);
}
static int
spdk_bdev_subsystem_finish(void)
{
return spdk_bdev_finish();
}
SPDK_SUBSYSTEM_REGISTER(bdev, spdk_bdev_subsystem_initialize,
spdk_bdev_subsystem_finish, spdk_bdev_config_text)
SPDK_SUBSYSTEM_DEPEND(bdev, copy)