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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
spdk_bdev_open_ext(const char *bdev_name, bool write, spdk_bdev_event_cb_t event_cb,
|
bdev_desc_alloc(struct spdk_bdev *bdev, spdk_bdev_event_cb_t event_cb, void *event_ctx,
|
||||||
void *event_ctx, struct spdk_bdev_desc **_desc)
|
struct spdk_bdev_desc **_desc)
|
||||||
{
|
{
|
||||||
struct spdk_bdev_desc *desc;
|
struct spdk_bdev_desc *desc;
|
||||||
struct spdk_bdev *bdev;
|
|
||||||
unsigned int event_id;
|
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));
|
desc = calloc(1, sizeof(*desc));
|
||||||
if (desc == NULL) {
|
if (desc == NULL) {
|
||||||
SPDK_ERRLOG("Failed to allocate memory for bdev descriptor\n");
|
SPDK_ERRLOG("Failed to allocate memory for bdev descriptor\n");
|
||||||
pthread_mutex_unlock(&g_bdev_mgr.mutex);
|
|
||||||
return -ENOMEM;
|
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) {
|
if (desc->media_events_buffer == NULL) {
|
||||||
SPDK_ERRLOG("Failed to initialize media event pool\n");
|
SPDK_ERRLOG("Failed to initialize media event pool\n");
|
||||||
bdev_desc_free(desc);
|
bdev_desc_free(desc);
|
||||||
pthread_mutex_unlock(&g_bdev_mgr.mutex);
|
|
||||||
return -ENOMEM;
|
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);
|
rc = bdev_open(bdev, write, desc);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
bdev_desc_free(desc);
|
bdev_desc_free(desc);
|
||||||
|
Loading…
Reference in New Issue
Block a user