bdev: Create generic _spdk_bdev_open function

This is a part of a change that will introduce
new spdk_bdev_open_ext function. This will make
possible to pass callback function while opening
bdev which will be called when some bdev events
occur.

Signed-off-by: Maciej Szwed <maciej.szwed@intel.com>
Change-Id: I3e552edd5c90dacd39885e75e9114e48dddf50ea

Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463157
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Maciej Szwed 2019-07-25 09:42:19 +02:00 committed by Jim Harris
parent c141bd94a1
commit 7a260a5e99
2 changed files with 41 additions and 20 deletions

View File

@ -4277,11 +4277,15 @@ spdk_bdev_unregister(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn, void
}
}
int
spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_cb,
void *remove_ctx, struct spdk_bdev_desc **_desc)
static void
_spdk_bdev_dummy_event_cb(void *remove_ctx)
{
SPDK_DEBUGLOG(SPDK_LOG_BDEV, "Bdev remove event received with no remove callback specified");
}
static int
_spdk_bdev_open(struct spdk_bdev *bdev, bool write, struct spdk_bdev_desc *desc)
{
struct spdk_bdev_desc *desc;
struct spdk_thread *thread;
struct set_qos_limit_ctx *ctx;
@ -4291,27 +4295,16 @@ spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_
return -ENOTSUP;
}
desc = calloc(1, sizeof(*desc));
if (desc == NULL) {
SPDK_ERRLOG("Failed to allocate memory for bdev descriptor\n");
return -ENOMEM;
}
SPDK_DEBUGLOG(SPDK_LOG_BDEV, "Opening descriptor %p for bdev %s on thread %p\n", desc, bdev->name,
spdk_get_thread());
desc->bdev = bdev;
desc->thread = thread;
desc->remove_cb = remove_cb;
desc->remove_ctx = remove_ctx;
desc->write = write;
*_desc = desc;
pthread_mutex_lock(&bdev->internal.mutex);
if (bdev->internal.status == SPDK_BDEV_STATUS_REMOVING) {
pthread_mutex_unlock(&bdev->internal.mutex);
free(desc);
*_desc = NULL;
return -ENODEV;
}
@ -4319,8 +4312,6 @@ spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_
SPDK_ERRLOG("Could not open %s - %s module already claimed it\n",
bdev->name, bdev->internal.claim_module->name);
pthread_mutex_unlock(&bdev->internal.mutex);
free(desc);
*_desc = NULL;
return -EPERM;
}
@ -4330,8 +4321,6 @@ spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_
if (ctx == NULL) {
SPDK_ERRLOG("Failed to allocate memory for QoS context\n");
pthread_mutex_unlock(&bdev->internal.mutex);
free(desc);
*_desc = NULL;
return -ENOMEM;
}
ctx->bdev = bdev;
@ -4347,6 +4336,37 @@ spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_
return 0;
}
int
spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_cb,
void *remove_ctx, struct spdk_bdev_desc **_desc)
{
struct spdk_bdev_desc *desc;
int rc;
desc = calloc(1, sizeof(*desc));
if (desc == NULL) {
SPDK_ERRLOG("Failed to allocate memory for bdev descriptor\n");
return -ENOMEM;
}
if (remove_cb == NULL) {
remove_cb = _spdk_bdev_dummy_event_cb;
}
desc->remove_cb = remove_cb;
desc->remove_ctx = remove_ctx;
rc = _spdk_bdev_open(bdev, write, desc);
if (rc != 0) {
free(desc);
desc = NULL;
}
*_desc = desc;
return rc;
}
void
spdk_bdev_close(struct spdk_bdev_desc *desc)
{

View File

@ -351,7 +351,7 @@ static void
unregister_and_close(void)
{
bool done, remove_notify;
struct spdk_bdev_desc *desc;
struct spdk_bdev_desc *desc = NULL;
setup_test();
set_thread(0);
@ -381,6 +381,7 @@ unregister_and_close(void)
spdk_bdev_close(desc);
poll_threads();
desc = NULL;
/* The unregister should have completed */
CU_ASSERT(done == true);