bdev: cleaned up module init

Removed duplicated code.

Change-Id: Id50466f97932db580f29c1ca5cc6f5a20c134707
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/375727
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2017-08-25 09:30:10 +02:00 committed by Jim Harris
parent dde6213708
commit 5557843311

View File

@ -361,17 +361,10 @@ spdk_bdev_init_complete(int rc)
} }
static void static void
spdk_bdev_module_init_complete(int rc) spdk_bdev_module_action_complete(void)
{ {
struct spdk_bdev_module_if *m; struct spdk_bdev_module_if *m;
g_bdev_mgr.module_init_complete = true;
if (rc != 0) {
spdk_bdev_init_complete(rc);
return;
}
/* /*
* Check all bdev modules for an examinations in progress. If any * Check all bdev modules for an examinations in progress. If any
* exist, return immediately since we cannot finish bdev subsystem * exist, return immediately since we cannot finish bdev subsystem
@ -383,6 +376,11 @@ spdk_bdev_module_init_complete(int rc)
} }
} }
/*
* Modules already finished initialization - now that all
* the bdev moduless have finished their asynchronous I/O
* processing, the entire bdev layer can be marked as complete.
*/
spdk_bdev_init_complete(0); spdk_bdev_init_complete(0);
} }
@ -390,16 +388,17 @@ static int
spdk_bdev_modules_init(void) spdk_bdev_modules_init(void)
{ {
struct spdk_bdev_module_if *module; struct spdk_bdev_module_if *module;
int rc; int rc = 0;
TAILQ_FOREACH(module, &g_bdev_mgr.bdev_modules, tailq) { TAILQ_FOREACH(module, &g_bdev_mgr.bdev_modules, tailq) {
rc = module->module_init(); rc = module->module_init();
if (rc != 0) { if (rc != 0) {
return rc; break;
} }
} }
return 0; g_bdev_mgr.module_init_complete = true;
return rc;
} }
void void
@ -492,7 +491,13 @@ spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg,
sizeof(struct spdk_bdev_mgmt_channel)); sizeof(struct spdk_bdev_mgmt_channel));
rc = spdk_bdev_modules_init(); rc = spdk_bdev_modules_init();
spdk_bdev_module_init_complete(rc); if (rc != 0) {
SPDK_ERRLOG("bdev modules init failed\n");
spdk_bdev_init_complete(-1);
return;
}
spdk_bdev_module_action_complete();
} }
int int
@ -1508,30 +1513,19 @@ spdk_vbdev_unregister(struct spdk_bdev *vbdev)
void void
spdk_bdev_module_examine_done(struct spdk_bdev_module_if *module) spdk_bdev_module_examine_done(struct spdk_bdev_module_if *module)
{ {
struct spdk_bdev_module_if *m;
assert(module->examine_in_progress > 0); assert(module->examine_in_progress > 0);
module->examine_in_progress--; module->examine_in_progress--;
/* if (!g_bdev_mgr.module_init_complete || g_bdev_mgr.init_complete) {
* Check all bdev modules for an examinations in progress. If any /*
* exist, return immediately since we cannot finish bdev subsystem * Don't finish bdev subsystem initialization if
* initialization until all are completed. * module initialization is still in progress, or
*/ * the subsystem been already initialized.
TAILQ_FOREACH(m, &g_bdev_mgr.bdev_modules, tailq) { */
if (m->examine_in_progress > 0) { return;
return;
}
} }
if (g_bdev_mgr.module_init_complete && !g_bdev_mgr.init_complete) { spdk_bdev_module_action_complete();
/*
* Modules already finished initialization - now that all
* the bdev moduless have finished their asynchronous I/O
* processing, the entire bdev layer can be marked as complete.
*/
spdk_bdev_init_complete(0);
}
} }
int int