Commit 6802fe99 authored by Ziye Yang's avatar Ziye Yang Committed by Jim Harris
Browse files

bdev: handling duplicated bdev name



Change the return type of spdk_bdev_register related
functions and try to handle the duplicated name
issue.

Change-Id: I23af11583cf2050579d1624508306a35394bffde
Signed-off-by: default avatarZiye Yang <optimistyzy@gmail.com>
Reviewed-on: https://review.gerrithub.io/388178


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 939df28e
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -382,10 +382,10 @@ struct spdk_bdev_io {
	/* No members may be added after driver_ctx! */
};

void spdk_bdev_register(struct spdk_bdev *bdev);
int spdk_bdev_register(struct spdk_bdev *bdev);
void spdk_bdev_unregister(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn, void *cb_arg);
void spdk_bdev_unregister_done(struct spdk_bdev *bdev, int bdeverrno);
void spdk_vbdev_register(struct spdk_bdev *vbdev, struct spdk_bdev **base_bdevs,
int spdk_vbdev_register(struct spdk_bdev *vbdev, struct spdk_bdev **base_bdevs,
			int base_bdev_count);
void spdk_vbdev_unregister(struct spdk_bdev *vbdev, spdk_bdev_unregister_cb cb_fn, void *cb_arg);

+6 −1
Original line number Diff line number Diff line
@@ -373,6 +373,7 @@ create_aio_disk(const char *name, const char *filename, uint32_t block_size)
	struct file_disk *fdisk;
	uint32_t detected_block_size;
	uint64_t disk_size;
	int rc;

	fdisk = calloc(sizeof(*fdisk), 1);
	if (!fdisk) {
@@ -450,7 +451,11 @@ create_aio_disk(const char *name, const char *filename, uint32_t block_size)

	spdk_io_device_register(&fdisk->fd, bdev_aio_create_cb, bdev_aio_destroy_cb,
				sizeof(struct bdev_aio_io_channel));
	spdk_bdev_register(&fdisk->disk);
	rc = spdk_bdev_register(&fdisk->disk);
	if (rc) {
		spdk_io_device_unregister(&fdisk->fd, NULL);
		goto error_return;
	}

	TAILQ_INSERT_TAIL(&g_aio_disk_head, fdisk, link);
	return &fdisk->disk;
+24 −6
Original line number Diff line number Diff line
@@ -1773,13 +1773,23 @@ spdk_bdev_io_get_thread(struct spdk_bdev_io *bdev_io)
	return spdk_io_channel_get_thread(bdev_io->ch->channel);
}

static void
static int
_spdk_bdev_register(struct spdk_bdev *bdev)
{
	struct spdk_bdev_module_if *module;

	assert(bdev->module != NULL);

	if (!bdev->name) {
		SPDK_ERRLOG("Bdev name is NULL\n");
		return -EINVAL;
	}

	if (spdk_bdev_get_by_name(bdev->name)) {
		SPDK_ERRLOG("Bdev name:%s already exists\n", bdev->name);
		return -EEXIST;
	}

	bdev->status = SPDK_BDEV_STATUS_READY;

	TAILQ_INIT(&bdev->open_descs);
@@ -1802,25 +1812,33 @@ _spdk_bdev_register(struct spdk_bdev *bdev)
			module->examine(bdev);
		}
	}

	return 0;
}

void
int
spdk_bdev_register(struct spdk_bdev *bdev)
{
	_spdk_bdev_register(bdev);
	return _spdk_bdev_register(bdev);
}

void
int
spdk_vbdev_register(struct spdk_bdev *vbdev, struct spdk_bdev **base_bdevs, int base_bdev_count)
{
	int i;
	int i, rc;

	rc = _spdk_bdev_register(vbdev);
	if (rc) {
		return rc;
	}

	_spdk_bdev_register(vbdev);
	for (i = 0; i < base_bdev_count; i++) {
		assert(base_bdevs[i] != NULL);
		TAILQ_INSERT_TAIL(&vbdev->base_bdevs, base_bdevs[i], base_bdev_link);
		TAILQ_INSERT_TAIL(&base_bdevs[i]->vbdevs, vbdev, vbdev_link);
	}

	return 0;
}

void
+7 −1
Original line number Diff line number Diff line
@@ -634,6 +634,7 @@ _create_lvol_disk(struct spdk_lvol *lvol)
	struct spdk_bdev *bdev;
	struct lvol_store_bdev *lvs_bdev;
	uint64_t total_size;
	int rc;

	if (!lvol->old_name) {
		return NULL;
@@ -668,7 +669,12 @@ _create_lvol_disk(struct spdk_lvol *lvol)
	bdev->fn_table = &vbdev_lvol_fn_table;
	bdev->module = SPDK_GET_BDEV_MODULE(lvol);

	spdk_vbdev_register(bdev, &lvs_bdev->bdev, 1);
	rc = spdk_vbdev_register(bdev, &lvs_bdev->bdev, 1);
	if (rc) {
		free(bdev->name);
		free(bdev);
		return NULL;
	}

	return bdev;
}
+6 −1
Original line number Diff line number Diff line
@@ -370,6 +370,7 @@ static const struct spdk_bdev_fn_table malloc_fn_table = {
struct spdk_bdev *create_malloc_disk(const char *name, uint64_t num_blocks, uint32_t block_size)
{
	struct malloc_disk	*mdisk;
	int			rc;

	if (block_size % 512 != 0) {
		SPDK_ERRLOG("Block size %u is not a multiple of 512.\n", block_size);
@@ -421,7 +422,11 @@ struct spdk_bdev *create_malloc_disk(const char *name, uint64_t num_blocks, uint
	mdisk->disk.fn_table = &malloc_fn_table;
	mdisk->disk.module = SPDK_GET_BDEV_MODULE(malloc);

	spdk_bdev_register(&mdisk->disk);
	rc = spdk_bdev_register(&mdisk->disk);
	if (rc) {
		malloc_disk_free(mdisk);
		return NULL;
	}

	mdisk->next = g_malloc_disk_head;
	g_malloc_disk_head = mdisk;
Loading