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:
parent
c141bd94a1
commit
7a260a5e99
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user