bdev: remove differentiation between bdev and vbdev modules
We still will sort the bdev_module list so that modules with an examine() callback are initialized first. This ensures they have a chance to initialize before later modules start registering physical block devices. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I792cfb41b0abe030fe2486a2c872cbf329735932 Reviewed-on: https://review.gerrithub.io/369486 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
7fefd60fab
commit
f71447e80d
@ -50,12 +50,8 @@
|
|||||||
* To implement a backend block device driver, a number of functions
|
* To implement a backend block device driver, a number of functions
|
||||||
* dictated by struct spdk_bdev_fn_table must be provided.
|
* dictated by struct spdk_bdev_fn_table must be provided.
|
||||||
*
|
*
|
||||||
* The module should register itself using SPDK_BDEV_MODULE_REGISTER or
|
* The module should register itself using SPDK_BDEV_MODULE_REGISTER to
|
||||||
* SPDK_VBDEV_MODULE_REGISTER to define the parameters for the module.
|
* define the parameters for the module.
|
||||||
*
|
|
||||||
* Use SPDK_BDEV_MODULE_REGISTER for all block backends that are real disks.
|
|
||||||
* Any virtual backends such as RAID, partitioning, etc. should use
|
|
||||||
* SPDK_VBDEV_MODULE_REGISTER.
|
|
||||||
*
|
*
|
||||||
* <hr>
|
* <hr>
|
||||||
*
|
*
|
||||||
@ -223,7 +219,11 @@ struct spdk_bdev {
|
|||||||
|
|
||||||
bool bdev_opened_for_write;
|
bool bdev_opened_for_write;
|
||||||
|
|
||||||
struct spdk_bdev_module_if *vbdev_claim_module;
|
/**
|
||||||
|
* Pointer to the module that has claimed this bdev for purposes of creating virtual
|
||||||
|
* bdevs on top of it. Set to NULL if the bdev has not been claimed.
|
||||||
|
*/
|
||||||
|
struct spdk_bdev_module_if *claim_module;
|
||||||
|
|
||||||
/** List of open descriptors for this block device. */
|
/** List of open descriptors for this block device. */
|
||||||
TAILQ_HEAD(, spdk_bdev_desc) open_descs;
|
TAILQ_HEAD(, spdk_bdev_desc) open_descs;
|
||||||
@ -382,11 +382,11 @@ void spdk_vbdev_register(struct spdk_bdev *vbdev, struct spdk_bdev **base_bdevs,
|
|||||||
int base_bdev_count);
|
int base_bdev_count);
|
||||||
void spdk_vbdev_unregister(struct spdk_bdev *vbdev);
|
void spdk_vbdev_unregister(struct spdk_bdev *vbdev);
|
||||||
|
|
||||||
void spdk_vbdev_module_examine_done(struct spdk_bdev_module_if *module);
|
void spdk_bdev_module_examine_done(struct spdk_bdev_module_if *module);
|
||||||
|
|
||||||
int spdk_vbdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc,
|
int spdk_bdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc,
|
||||||
struct spdk_bdev_module_if *module);
|
struct spdk_bdev_module_if *module);
|
||||||
void spdk_vbdev_module_release_bdev(struct spdk_bdev *bdev);
|
void spdk_bdev_module_release_bdev(struct spdk_bdev *bdev);
|
||||||
|
|
||||||
void spdk_bdev_poller_start(struct spdk_bdev_poller **ppoller,
|
void spdk_bdev_poller_start(struct spdk_bdev_poller **ppoller,
|
||||||
spdk_bdev_poller_fn fn,
|
spdk_bdev_poller_fn fn,
|
||||||
@ -428,7 +428,6 @@ void spdk_scsi_nvme_translate(const struct spdk_bdev_io *bdev_io,
|
|||||||
int *sc, int *sk, int *asc, int *ascq);
|
int *sc, int *sk, int *asc, int *ascq);
|
||||||
|
|
||||||
void spdk_bdev_module_list_add(struct spdk_bdev_module_if *bdev_module);
|
void spdk_bdev_module_list_add(struct spdk_bdev_module_if *bdev_module);
|
||||||
void spdk_vbdev_module_list_add(struct spdk_bdev_module_if *vbdev_module);
|
|
||||||
|
|
||||||
static inline struct spdk_bdev_io *
|
static inline struct spdk_bdev_io *
|
||||||
spdk_bdev_io_from_ctx(void *ctx)
|
spdk_bdev_io_from_ctx(void *ctx)
|
||||||
@ -437,20 +436,7 @@ spdk_bdev_io_from_ctx(void *ctx)
|
|||||||
((uintptr_t)ctx - offsetof(struct spdk_bdev_io, driver_ctx));
|
((uintptr_t)ctx - offsetof(struct spdk_bdev_io, driver_ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SPDK_BDEV_MODULE_REGISTER(_name, init_fn, fini_fn, config_fn, ctx_size_fn) \
|
#define SPDK_BDEV_MODULE_REGISTER(_name, init_fn, fini_fn, config_fn, ctx_size_fn, examine_fn)\
|
||||||
static struct spdk_bdev_module_if _name ## _if = { \
|
|
||||||
.name = #_name, \
|
|
||||||
.module_init = init_fn, \
|
|
||||||
.module_fini = fini_fn, \
|
|
||||||
.config_text = config_fn, \
|
|
||||||
.get_ctx_size = ctx_size_fn, \
|
|
||||||
}; \
|
|
||||||
__attribute__((constructor)) static void _name ## _init(void) \
|
|
||||||
{ \
|
|
||||||
spdk_bdev_module_list_add(&_name ## _if); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SPDK_VBDEV_MODULE_REGISTER(_name, init_fn, fini_fn, config_fn, ctx_size_fn, examine_fn)\
|
|
||||||
static struct spdk_bdev_module_if _name ## _if = { \
|
static struct spdk_bdev_module_if _name ## _if = { \
|
||||||
.name = #_name, \
|
.name = #_name, \
|
||||||
.module_init = init_fn, \
|
.module_init = init_fn, \
|
||||||
@ -461,14 +447,14 @@ spdk_bdev_io_from_ctx(void *ctx)
|
|||||||
}; \
|
}; \
|
||||||
__attribute__((constructor)) static void _name ## _init(void) \
|
__attribute__((constructor)) static void _name ## _init(void) \
|
||||||
{ \
|
{ \
|
||||||
spdk_vbdev_module_list_add(&_name ## _if); \
|
spdk_bdev_module_list_add(&_name ## _if); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SPDK_GET_BDEV_MODULE(name) &name ## _if
|
#define SPDK_GET_BDEV_MODULE(name) &name ## _if
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Modules are not required to use this macro. It allows modules to reference the module with
|
* Modules are not required to use this macro. It allows modules to reference the module with
|
||||||
* SPDK_GET_BDEV_MODULE() before it is defined by SPDK_BDEV_MODULE_REGISTER or its VBDEV variant.
|
* SPDK_GET_BDEV_MODULE() before it is defined by SPDK_BDEV_MODULE_REGISTER.
|
||||||
*/
|
*/
|
||||||
#define SPDK_DECLARE_BDEV_MODULE(name) \
|
#define SPDK_DECLARE_BDEV_MODULE(name) \
|
||||||
static struct spdk_bdev_module_if name ## _if;
|
static struct spdk_bdev_module_if name ## _if;
|
||||||
|
@ -52,7 +52,7 @@ bdev_aio_get_ctx_size(void)
|
|||||||
return sizeof(struct bdev_aio_task);
|
return sizeof(struct bdev_aio_task);
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDK_BDEV_MODULE_REGISTER(aio, bdev_aio_initialize, NULL, NULL, bdev_aio_get_ctx_size)
|
SPDK_BDEV_MODULE_REGISTER(aio, bdev_aio_initialize, NULL, NULL, bdev_aio_get_ctx_size, NULL)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bdev_aio_open(struct file_disk *disk)
|
bdev_aio_open(struct file_disk *disk)
|
||||||
|
101
lib/bdev/bdev.c
101
lib/bdev/bdev.c
@ -64,7 +64,6 @@ struct spdk_bdev_mgr {
|
|||||||
struct spdk_mempool *buf_large_pool;
|
struct spdk_mempool *buf_large_pool;
|
||||||
|
|
||||||
TAILQ_HEAD(, spdk_bdev_module_if) bdev_modules;
|
TAILQ_HEAD(, spdk_bdev_module_if) bdev_modules;
|
||||||
TAILQ_HEAD(, spdk_bdev_module_if) vbdev_modules;
|
|
||||||
|
|
||||||
TAILQ_HEAD(, spdk_bdev) bdevs;
|
TAILQ_HEAD(, spdk_bdev) bdevs;
|
||||||
|
|
||||||
@ -81,7 +80,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),
|
||||||
.vbdev_modules = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.vbdev_modules),
|
|
||||||
.bdevs = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.bdevs),
|
.bdevs = TAILQ_HEAD_INITIALIZER(g_bdev_mgr.bdevs),
|
||||||
.start_poller_fn = NULL,
|
.start_poller_fn = NULL,
|
||||||
.stop_poller_fn = NULL,
|
.stop_poller_fn = NULL,
|
||||||
@ -311,12 +309,6 @@ spdk_bdev_module_get_max_ctx_size(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TAILQ_FOREACH(bdev_module, &g_bdev_mgr.vbdev_modules, tailq) {
|
|
||||||
if (bdev_module->get_ctx_size && bdev_module->get_ctx_size() > max_bdev_module_size) {
|
|
||||||
max_bdev_module_size = bdev_module->get_ctx_size();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return max_bdev_module_size;
|
return max_bdev_module_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,11 +322,6 @@ spdk_bdev_config_text(FILE *fp)
|
|||||||
bdev_module->config_text(fp);
|
bdev_module->config_text(fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TAILQ_FOREACH(bdev_module, &g_bdev_mgr.vbdev_modules, tailq) {
|
|
||||||
if (bdev_module->config_text) {
|
|
||||||
bdev_module->config_text(fp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -383,11 +370,11 @@ spdk_bdev_module_init_complete(int rc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check all vbdev 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
|
||||||
* initialization until all are completed.
|
* initialization until all are completed.
|
||||||
*/
|
*/
|
||||||
TAILQ_FOREACH(m, &g_bdev_mgr.vbdev_modules, tailq) {
|
TAILQ_FOREACH(m, &g_bdev_mgr.bdev_modules, tailq) {
|
||||||
if (m->examine_in_progress > 0) {
|
if (m->examine_in_progress > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -412,22 +399,6 @@ spdk_bdev_modules_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
spdk_vbdev_modules_init(void)
|
|
||||||
{
|
|
||||||
struct spdk_bdev_module_if *module;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
TAILQ_FOREACH(module, &g_bdev_mgr.vbdev_modules, tailq) {
|
|
||||||
rc = module->module_init();
|
|
||||||
if (rc != 0) {
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
spdk_bdev_poller_start(struct spdk_bdev_poller **ppoller,
|
spdk_bdev_poller_start(struct spdk_bdev_poller **ppoller,
|
||||||
spdk_bdev_poller_fn fn,
|
spdk_bdev_poller_fn fn,
|
||||||
@ -510,12 +481,6 @@ spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg,
|
|||||||
spdk_bdev_mgmt_channel_destroy,
|
spdk_bdev_mgmt_channel_destroy,
|
||||||
sizeof(struct spdk_bdev_mgmt_channel));
|
sizeof(struct spdk_bdev_mgmt_channel));
|
||||||
|
|
||||||
rc = spdk_vbdev_modules_init();
|
|
||||||
if (rc != 0) {
|
|
||||||
spdk_bdev_module_init_complete(rc);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = spdk_bdev_modules_init();
|
rc = spdk_bdev_modules_init();
|
||||||
spdk_bdev_module_init_complete(rc);
|
spdk_bdev_module_init_complete(rc);
|
||||||
}
|
}
|
||||||
@ -525,12 +490,6 @@ spdk_bdev_finish(void)
|
|||||||
{
|
{
|
||||||
struct spdk_bdev_module_if *bdev_module;
|
struct spdk_bdev_module_if *bdev_module;
|
||||||
|
|
||||||
TAILQ_FOREACH(bdev_module, &g_bdev_mgr.vbdev_modules, tailq) {
|
|
||||||
if (bdev_module->module_fini) {
|
|
||||||
bdev_module->module_fini();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TAILQ_FOREACH(bdev_module, &g_bdev_mgr.bdev_modules, tailq) {
|
TAILQ_FOREACH(bdev_module, &g_bdev_mgr.bdev_modules, tailq) {
|
||||||
if (bdev_module->module_fini) {
|
if (bdev_module->module_fini) {
|
||||||
bdev_module->module_fini();
|
bdev_module->module_fini();
|
||||||
@ -1378,7 +1337,7 @@ spdk_bdev_io_get_nvme_status(const struct spdk_bdev_io *bdev_io, int *sct, int *
|
|||||||
static void
|
static void
|
||||||
_spdk_bdev_register(struct spdk_bdev *bdev)
|
_spdk_bdev_register(struct spdk_bdev *bdev)
|
||||||
{
|
{
|
||||||
struct spdk_bdev_module_if *vbdev_module;
|
struct spdk_bdev_module_if *module;
|
||||||
|
|
||||||
assert(bdev->module != NULL);
|
assert(bdev->module != NULL);
|
||||||
|
|
||||||
@ -1402,9 +1361,11 @@ _spdk_bdev_register(struct spdk_bdev *bdev)
|
|||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Inserting bdev %s into list\n", bdev->name);
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Inserting bdev %s into list\n", bdev->name);
|
||||||
TAILQ_INSERT_TAIL(&g_bdev_mgr.bdevs, bdev, link);
|
TAILQ_INSERT_TAIL(&g_bdev_mgr.bdevs, bdev, link);
|
||||||
|
|
||||||
TAILQ_FOREACH(vbdev_module, &g_bdev_mgr.vbdev_modules, tailq) {
|
TAILQ_FOREACH(module, &g_bdev_mgr.bdev_modules, tailq) {
|
||||||
vbdev_module->examine_in_progress++;
|
if (module->examine) {
|
||||||
vbdev_module->examine(bdev);
|
module->examine_in_progress++;
|
||||||
|
module->examine(bdev);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1478,7 +1439,7 @@ spdk_vbdev_unregister(struct spdk_bdev *vbdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
spdk_vbdev_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;
|
struct spdk_bdev_module_if *m;
|
||||||
|
|
||||||
@ -1486,11 +1447,11 @@ spdk_vbdev_module_examine_done(struct spdk_bdev_module_if *module)
|
|||||||
module->examine_in_progress--;
|
module->examine_in_progress--;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check all vbdev 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
|
||||||
* initialization until all are completed.
|
* initialization until all are completed.
|
||||||
*/
|
*/
|
||||||
TAILQ_FOREACH(m, &g_bdev_mgr.vbdev_modules, tailq) {
|
TAILQ_FOREACH(m, &g_bdev_mgr.bdev_modules, tailq) {
|
||||||
if (m->examine_in_progress > 0) {
|
if (m->examine_in_progress > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1499,8 +1460,8 @@ spdk_vbdev_module_examine_done(struct spdk_bdev_module_if *module)
|
|||||||
if (g_bdev_mgr.module_init_complete && !g_bdev_mgr.init_complete) {
|
if (g_bdev_mgr.module_init_complete && !g_bdev_mgr.init_complete) {
|
||||||
/*
|
/*
|
||||||
* Modules already finished initialization - now that all
|
* Modules already finished initialization - now that all
|
||||||
* the vbdevs have finished their asynchronous I/O processing,
|
* the bdev moduless have finished their asynchronous I/O
|
||||||
* the entire bdev layer can be marked as complete.
|
* processing, the entire bdev layer can be marked as complete.
|
||||||
*/
|
*/
|
||||||
spdk_bdev_init_complete(0);
|
spdk_bdev_init_complete(0);
|
||||||
}
|
}
|
||||||
@ -1519,7 +1480,7 @@ spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_
|
|||||||
|
|
||||||
pthread_mutex_lock(&bdev->mutex);
|
pthread_mutex_lock(&bdev->mutex);
|
||||||
|
|
||||||
if (write && (bdev->bdev_opened_for_write || bdev->vbdev_claim_module)) {
|
if (write && (bdev->bdev_opened_for_write || bdev->claim_module)) {
|
||||||
SPDK_ERRLOG("failed, %s already opened for write or claimed\n", bdev->name);
|
SPDK_ERRLOG("failed, %s already opened for write or claimed\n", bdev->name);
|
||||||
free(desc);
|
free(desc);
|
||||||
pthread_mutex_unlock(&bdev->mutex);
|
pthread_mutex_unlock(&bdev->mutex);
|
||||||
@ -1570,12 +1531,12 @@ spdk_bdev_close(struct spdk_bdev_desc *desc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
spdk_vbdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc,
|
spdk_bdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc,
|
||||||
struct spdk_bdev_module_if *module)
|
struct spdk_bdev_module_if *module)
|
||||||
{
|
{
|
||||||
if (bdev->vbdev_claim_module != NULL) {
|
if (bdev->claim_module != NULL) {
|
||||||
SPDK_ERRLOG("bdev %s already claimed by module %s\n", bdev->name,
|
SPDK_ERRLOG("bdev %s already claimed by module %s\n", bdev->name,
|
||||||
bdev->vbdev_claim_module->name);
|
bdev->claim_module->name);
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1588,15 +1549,15 @@ spdk_vbdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc
|
|||||||
desc->write = true;
|
desc->write = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev->vbdev_claim_module = module;
|
bdev->claim_module = module;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
spdk_vbdev_module_release_bdev(struct spdk_bdev *bdev)
|
spdk_bdev_module_release_bdev(struct spdk_bdev *bdev)
|
||||||
{
|
{
|
||||||
assert(bdev->vbdev_claim_module != NULL);
|
assert(bdev->claim_module != NULL);
|
||||||
bdev->vbdev_claim_module = NULL;
|
bdev->claim_module = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1635,12 +1596,14 @@ spdk_bdev_io_get_iovec(struct spdk_bdev_io *bdev_io, struct iovec **iovp, int *i
|
|||||||
void
|
void
|
||||||
spdk_bdev_module_list_add(struct spdk_bdev_module_if *bdev_module)
|
spdk_bdev_module_list_add(struct spdk_bdev_module_if *bdev_module)
|
||||||
{
|
{
|
||||||
TAILQ_INSERT_TAIL(&g_bdev_mgr.bdev_modules, bdev_module, tailq);
|
/*
|
||||||
}
|
* Modules with examine callbacks must be initialized first, so they are
|
||||||
|
* ready to handle examine callbacks from later modules that will
|
||||||
void
|
* register physical bdevs.
|
||||||
spdk_vbdev_module_list_add(struct spdk_bdev_module_if *vbdev_module)
|
*/
|
||||||
{
|
if (bdev_module->examine != NULL) {
|
||||||
assert(vbdev_module->examine != NULL);
|
TAILQ_INSERT_HEAD(&g_bdev_mgr.bdev_modules, bdev_module, tailq);
|
||||||
TAILQ_INSERT_TAIL(&g_bdev_mgr.vbdev_modules, vbdev_module, tailq);
|
} else {
|
||||||
|
TAILQ_INSERT_TAIL(&g_bdev_mgr.bdev_modules, bdev_module, tailq);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -259,7 +259,7 @@ spdk_vbdev_error_create(struct spdk_bdev *base_bdev)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = spdk_vbdev_module_claim_bdev(base_bdev, NULL, SPDK_GET_BDEV_MODULE(error));
|
rc = spdk_bdev_module_claim_bdev(base_bdev, NULL, SPDK_GET_BDEV_MODULE(error));
|
||||||
if (rc) {
|
if (rc) {
|
||||||
SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(base_bdev));
|
SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(base_bdev));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -305,7 +305,7 @@ vbdev_error_examine(struct spdk_bdev *bdev)
|
|||||||
|
|
||||||
sp = spdk_conf_find_section(NULL, "BdevError");
|
sp = spdk_conf_find_section(NULL, "BdevError");
|
||||||
if (sp == NULL) {
|
if (sp == NULL) {
|
||||||
spdk_vbdev_module_examine_done(SPDK_GET_BDEV_MODULE(error));
|
spdk_bdev_module_examine_done(SPDK_GET_BDEV_MODULE(error));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ vbdev_error_examine(struct spdk_bdev *bdev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_vbdev_module_examine_done(SPDK_GET_BDEV_MODULE(error));
|
spdk_bdev_module_examine_done(SPDK_GET_BDEV_MODULE(error));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -343,5 +343,5 @@ vbdev_error_fini(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDK_VBDEV_MODULE_REGISTER(error, vbdev_error_init, vbdev_error_fini, NULL, NULL,
|
SPDK_BDEV_MODULE_REGISTER(error, vbdev_error_init, vbdev_error_fini, NULL, NULL,
|
||||||
vbdev_error_examine)
|
vbdev_error_examine)
|
||||||
|
@ -445,7 +445,7 @@ spdk_gpt_bdev_complete(struct spdk_bdev_io *bdev_io, bool status, void *arg)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = spdk_vbdev_module_claim_bdev(bdev, NULL, SPDK_GET_BDEV_MODULE(gpt));
|
rc = spdk_bdev_module_claim_bdev(bdev, NULL, SPDK_GET_BDEV_MODULE(gpt));
|
||||||
if (rc) {
|
if (rc) {
|
||||||
SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(bdev));
|
SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(bdev));
|
||||||
goto end;
|
goto end;
|
||||||
@ -463,13 +463,13 @@ end:
|
|||||||
* Notify the generic bdev layer that the actions related to the original examine
|
* Notify the generic bdev layer that the actions related to the original examine
|
||||||
* callback are now completed.
|
* callback are now completed.
|
||||||
*/
|
*/
|
||||||
spdk_vbdev_module_examine_done(SPDK_GET_BDEV_MODULE(gpt));
|
spdk_bdev_module_examine_done(SPDK_GET_BDEV_MODULE(gpt));
|
||||||
|
|
||||||
if (gpt_bdev->ref == 0) {
|
if (gpt_bdev->ref == 0) {
|
||||||
/* If no gpt_partition_disk instances were created, free the base context */
|
/* If no gpt_partition_disk instances were created, free the base context */
|
||||||
spdk_gpt_bdev_free(gpt_bdev);
|
spdk_gpt_bdev_free(gpt_bdev);
|
||||||
if (claimed) {
|
if (claimed) {
|
||||||
spdk_vbdev_module_release_bdev(bdev);
|
spdk_bdev_module_release_bdev(bdev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -526,13 +526,13 @@ vbdev_gpt_examine(struct spdk_bdev *bdev)
|
|||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (g_gpt_disabled) {
|
if (g_gpt_disabled) {
|
||||||
spdk_vbdev_module_examine_done(SPDK_GET_BDEV_MODULE(gpt));
|
spdk_bdev_module_examine_done(SPDK_GET_BDEV_MODULE(gpt));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = vbdev_gpt_read_gpt(bdev);
|
rc = vbdev_gpt_read_gpt(bdev);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
spdk_vbdev_module_examine_done(SPDK_GET_BDEV_MODULE(gpt));
|
spdk_bdev_module_examine_done(SPDK_GET_BDEV_MODULE(gpt));
|
||||||
SPDK_ERRLOG("Failed to read info from bdev %s\n", spdk_bdev_get_name(bdev));
|
SPDK_ERRLOG("Failed to read info from bdev %s\n", spdk_bdev_get_name(bdev));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -547,6 +547,6 @@ vbdev_gpt_get_ctx_size(void)
|
|||||||
return sizeof(struct spdk_io_channel *);
|
return sizeof(struct spdk_io_channel *);
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDK_VBDEV_MODULE_REGISTER(gpt, vbdev_gpt_init, vbdev_gpt_fini, NULL,
|
SPDK_BDEV_MODULE_REGISTER(gpt, vbdev_gpt_init, vbdev_gpt_fini, NULL,
|
||||||
vbdev_gpt_get_ctx_size, vbdev_gpt_examine)
|
vbdev_gpt_get_ctx_size, vbdev_gpt_examine)
|
||||||
SPDK_LOG_REGISTER_TRACE_FLAG("vbdev_gpt", SPDK_TRACE_VBDEV_GPT)
|
SPDK_LOG_REGISTER_TRACE_FLAG("vbdev_gpt", SPDK_TRACE_VBDEV_GPT)
|
||||||
|
@ -100,7 +100,7 @@ bdev_malloc_get_ctx_size(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SPDK_BDEV_MODULE_REGISTER(malloc, bdev_malloc_initialize, bdev_malloc_finish,
|
SPDK_BDEV_MODULE_REGISTER(malloc, bdev_malloc_initialize, bdev_malloc_finish,
|
||||||
bdev_malloc_get_spdk_running_config, bdev_malloc_get_ctx_size)
|
bdev_malloc_get_spdk_running_config, bdev_malloc_get_ctx_size, NULL)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bdev_malloc_delete_from_list(struct malloc_disk *malloc_disk)
|
bdev_malloc_delete_from_list(struct malloc_disk *malloc_disk)
|
||||||
|
@ -288,6 +288,6 @@ bdev_null_get_spdk_running_config(FILE *fp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SPDK_BDEV_MODULE_REGISTER(null, bdev_null_initialize, bdev_null_finish,
|
SPDK_BDEV_MODULE_REGISTER(null, bdev_null_initialize, bdev_null_finish,
|
||||||
bdev_null_get_spdk_running_config, bdev_null_get_ctx_size)
|
bdev_null_get_spdk_running_config, bdev_null_get_ctx_size, NULL)
|
||||||
|
|
||||||
SPDK_LOG_REGISTER_TRACE_FLAG("bdev_null", SPDK_TRACE_BDEV_NULL)
|
SPDK_LOG_REGISTER_TRACE_FLAG("bdev_null", SPDK_TRACE_BDEV_NULL)
|
||||||
|
@ -152,7 +152,7 @@ bdev_nvme_get_ctx_size(void)
|
|||||||
|
|
||||||
SPDK_BDEV_MODULE_REGISTER(nvme, bdev_nvme_library_init, bdev_nvme_library_fini,
|
SPDK_BDEV_MODULE_REGISTER(nvme, bdev_nvme_library_init, bdev_nvme_library_fini,
|
||||||
bdev_nvme_get_spdk_running_config,
|
bdev_nvme_get_spdk_running_config,
|
||||||
bdev_nvme_get_ctx_size)
|
bdev_nvme_get_ctx_size, NULL)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bdev_nvme_readv(struct nvme_bdev *nbdev, struct spdk_io_channel *ch,
|
bdev_nvme_readv(struct nvme_bdev *nbdev, struct spdk_io_channel *ch,
|
||||||
|
@ -211,7 +211,7 @@ bdev_rbd_get_ctx_size(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SPDK_BDEV_MODULE_REGISTER(rbd, bdev_rbd_library_init, bdev_rbd_library_fini, NULL,
|
SPDK_BDEV_MODULE_REGISTER(rbd, bdev_rbd_library_init, bdev_rbd_library_fini, NULL,
|
||||||
bdev_rbd_get_ctx_size)
|
bdev_rbd_get_ctx_size, NULL)
|
||||||
|
|
||||||
static int64_t
|
static int64_t
|
||||||
bdev_rbd_readv(struct bdev_rbd *disk, struct spdk_io_channel *ch,
|
bdev_rbd_readv(struct bdev_rbd *disk, struct spdk_io_channel *ch,
|
||||||
|
@ -240,7 +240,7 @@ vbdev_split_create(struct spdk_bdev *base_bdev, uint64_t split_count, uint64_t s
|
|||||||
int rc;
|
int rc;
|
||||||
struct split_base *split_base;
|
struct split_base *split_base;
|
||||||
|
|
||||||
rc = spdk_vbdev_module_claim_bdev(base_bdev, NULL, SPDK_GET_BDEV_MODULE(split));
|
rc = spdk_bdev_module_claim_bdev(base_bdev, NULL, SPDK_GET_BDEV_MODULE(split));
|
||||||
if (rc) {
|
if (rc) {
|
||||||
SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(base_bdev));
|
SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(base_bdev));
|
||||||
return -1;
|
return -1;
|
||||||
@ -358,7 +358,7 @@ vbdev_split_examine(struct spdk_bdev *bdev)
|
|||||||
|
|
||||||
sp = spdk_conf_find_section(NULL, "Split");
|
sp = spdk_conf_find_section(NULL, "Split");
|
||||||
if (sp == NULL) {
|
if (sp == NULL) {
|
||||||
spdk_vbdev_module_examine_done(SPDK_GET_BDEV_MODULE(split));
|
spdk_bdev_module_examine_done(SPDK_GET_BDEV_MODULE(split));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -406,7 +406,7 @@ vbdev_split_examine(struct spdk_bdev *bdev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_vbdev_module_examine_done(SPDK_GET_BDEV_MODULE(split));
|
spdk_bdev_module_examine_done(SPDK_GET_BDEV_MODULE(split));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -429,6 +429,6 @@ vbdev_split_get_ctx_size(void)
|
|||||||
return sizeof(struct spdk_io_channel *);
|
return sizeof(struct spdk_io_channel *);
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDK_VBDEV_MODULE_REGISTER(split, vbdev_split_init, vbdev_split_fini, NULL,
|
SPDK_BDEV_MODULE_REGISTER(split, vbdev_split_init, vbdev_split_fini, NULL,
|
||||||
vbdev_split_get_ctx_size, vbdev_split_examine)
|
vbdev_split_get_ctx_size, vbdev_split_examine)
|
||||||
SPDK_LOG_REGISTER_TRACE_FLAG("vbdev_split", SPDK_TRACE_VBDEV_SPLIT)
|
SPDK_LOG_REGISTER_TRACE_FLAG("vbdev_split", SPDK_TRACE_VBDEV_SPLIT)
|
||||||
|
@ -118,11 +118,11 @@ static struct spdk_bdev_fn_table fn_table = {
|
|||||||
static void
|
static void
|
||||||
vbdev_ut_examine(struct spdk_bdev *bdev)
|
vbdev_ut_examine(struct spdk_bdev *bdev)
|
||||||
{
|
{
|
||||||
spdk_vbdev_module_examine_done(SPDK_GET_BDEV_MODULE(vbdev_ut));
|
spdk_bdev_module_examine_done(SPDK_GET_BDEV_MODULE(vbdev_ut));
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDK_BDEV_MODULE_REGISTER(bdev_ut, NULL, NULL, NULL, NULL)
|
SPDK_BDEV_MODULE_REGISTER(bdev_ut, NULL, NULL, NULL, NULL, NULL)
|
||||||
SPDK_VBDEV_MODULE_REGISTER(vbdev_ut, NULL, NULL, NULL, NULL, vbdev_ut_examine)
|
SPDK_BDEV_MODULE_REGISTER(vbdev_ut, NULL, NULL, NULL, NULL, vbdev_ut_examine)
|
||||||
|
|
||||||
static struct spdk_bdev *
|
static struct spdk_bdev *
|
||||||
allocate_bdev(char *name)
|
allocate_bdev(char *name)
|
||||||
@ -217,23 +217,23 @@ open_write_test(void)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
bdev[0] = allocate_bdev("bdev0");
|
bdev[0] = allocate_bdev("bdev0");
|
||||||
rc = spdk_vbdev_module_claim_bdev(bdev[0], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
rc = spdk_bdev_module_claim_bdev(bdev[0], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
||||||
CU_ASSERT(rc == 0);
|
CU_ASSERT(rc == 0);
|
||||||
|
|
||||||
bdev[1] = allocate_bdev("bdev1");
|
bdev[1] = allocate_bdev("bdev1");
|
||||||
rc = spdk_vbdev_module_claim_bdev(bdev[1], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
rc = spdk_bdev_module_claim_bdev(bdev[1], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
||||||
CU_ASSERT(rc == 0);
|
CU_ASSERT(rc == 0);
|
||||||
|
|
||||||
bdev[2] = allocate_bdev("bdev2");
|
bdev[2] = allocate_bdev("bdev2");
|
||||||
rc = spdk_vbdev_module_claim_bdev(bdev[2], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
rc = spdk_bdev_module_claim_bdev(bdev[2], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
||||||
CU_ASSERT(rc == 0);
|
CU_ASSERT(rc == 0);
|
||||||
|
|
||||||
bdev[3] = allocate_vbdev("bdev3", bdev[0], bdev[1]);
|
bdev[3] = allocate_vbdev("bdev3", bdev[0], bdev[1]);
|
||||||
rc = spdk_vbdev_module_claim_bdev(bdev[3], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
rc = spdk_bdev_module_claim_bdev(bdev[3], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
||||||
CU_ASSERT(rc == 0);
|
CU_ASSERT(rc == 0);
|
||||||
|
|
||||||
bdev[4] = allocate_vbdev("bdev4", bdev[2], NULL);
|
bdev[4] = allocate_vbdev("bdev4", bdev[2], NULL);
|
||||||
rc = spdk_vbdev_module_claim_bdev(bdev[4], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
rc = spdk_bdev_module_claim_bdev(bdev[4], NULL, SPDK_GET_BDEV_MODULE(bdev_ut));
|
||||||
CU_ASSERT(rc == 0);
|
CU_ASSERT(rc == 0);
|
||||||
|
|
||||||
bdev[5] = allocate_vbdev("bdev5", bdev[2], NULL);
|
bdev[5] = allocate_vbdev("bdev5", bdev[2], NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user