bdev: Factor out descriptor allocation from spdk_bdev_open_ext()
Bdev open/close will be done for each bdev when traversing the bdev list. This patch is a preparation. Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Change-Id: I4e4fe6f1248176631a74c09585c931b21eb49d2b Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12124 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
cff525d336
commit
ced08048ee
@ -6392,34 +6392,16 @@ bdev_open(struct spdk_bdev *bdev, bool write, struct spdk_bdev_desc *desc)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_bdev_open_ext(const char *bdev_name, bool write, spdk_bdev_event_cb_t event_cb,
|
||||
void *event_ctx, struct spdk_bdev_desc **_desc)
|
||||
static int
|
||||
bdev_desc_alloc(struct spdk_bdev *bdev, spdk_bdev_event_cb_t event_cb, void *event_ctx,
|
||||
struct spdk_bdev_desc **_desc)
|
||||
{
|
||||
struct spdk_bdev_desc *desc;
|
||||
struct spdk_bdev *bdev;
|
||||
unsigned int event_id;
|
||||
int rc;
|
||||
|
||||
if (event_cb == NULL) {
|
||||
SPDK_ERRLOG("Missing event callback function\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&g_bdev_mgr.mutex);
|
||||
|
||||
bdev = bdev_get_by_name(bdev_name);
|
||||
|
||||
if (bdev == NULL) {
|
||||
SPDK_NOTICELOG("Currently unable to find bdev with name: %s\n", bdev_name);
|
||||
pthread_mutex_unlock(&g_bdev_mgr.mutex);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
desc = calloc(1, sizeof(*desc));
|
||||
if (desc == NULL) {
|
||||
SPDK_ERRLOG("Failed to allocate memory for bdev descriptor\n");
|
||||
pthread_mutex_unlock(&g_bdev_mgr.mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@ -6437,7 +6419,6 @@ spdk_bdev_open_ext(const char *bdev_name, bool write, spdk_bdev_event_cb_t event
|
||||
if (desc->media_events_buffer == NULL) {
|
||||
SPDK_ERRLOG("Failed to initialize media event pool\n");
|
||||
bdev_desc_free(desc);
|
||||
pthread_mutex_unlock(&g_bdev_mgr.mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@ -6447,6 +6428,40 @@ spdk_bdev_open_ext(const char *bdev_name, bool write, spdk_bdev_event_cb_t event
|
||||
}
|
||||
}
|
||||
|
||||
*_desc = desc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_bdev_open_ext(const char *bdev_name, bool write, spdk_bdev_event_cb_t event_cb,
|
||||
void *event_ctx, struct spdk_bdev_desc **_desc)
|
||||
{
|
||||
struct spdk_bdev_desc *desc;
|
||||
struct spdk_bdev *bdev;
|
||||
int rc;
|
||||
|
||||
if (event_cb == NULL) {
|
||||
SPDK_ERRLOG("Missing event callback function\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&g_bdev_mgr.mutex);
|
||||
|
||||
bdev = bdev_get_by_name(bdev_name);
|
||||
|
||||
if (bdev == NULL) {
|
||||
SPDK_NOTICELOG("Currently unable to find bdev with name: %s\n", bdev_name);
|
||||
pthread_mutex_unlock(&g_bdev_mgr.mutex);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
rc = bdev_desc_alloc(bdev, event_cb, event_ctx, &desc);
|
||||
if (rc != 0) {
|
||||
pthread_mutex_unlock(&g_bdev_mgr.mutex);
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = bdev_open(bdev, write, desc);
|
||||
if (rc != 0) {
|
||||
bdev_desc_free(desc);
|
||||
|
Loading…
Reference in New Issue
Block a user