Commit 7a260a5e authored by Maciej Szwed's avatar Maciej Szwed Committed by Jim Harris
Browse files

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: default avatarMaciej Szwed <maciej.szwed@intel.com>
Change-Id: I3e552edd5c90dacd39885e75e9114e48dddf50ea

Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463157


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent c141bd94
Loading
Loading
Loading
Loading
+39 −19
Original line number Diff line number Diff line
@@ -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)
{
+2 −1
Original line number Diff line number Diff line
@@ -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);