Commit 687d5a87 authored by GangCao's avatar GangCao Committed by Jim Harris
Browse files

lib/part: check the return of spdk_bdev_register



Change-Id: I855a68dfcf6da565a97e33e4389eee5ed6141f74
Signed-off-by: default avatarGangCao <gang.cao@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16079


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Reviewed-by: default avatarXiaodong Liu <xiaodong.liu@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent c5d0fac1
Loading
Loading
Loading
Loading
+20 −3
Original line number Diff line number Diff line
@@ -510,6 +510,9 @@ spdk_bdev_part_construct(struct spdk_bdev_part *part, struct spdk_bdev_part_base
			 char *name, uint64_t offset_blocks, uint64_t num_blocks,
			 char *product_name)
{
	int rc;
	bool first_claimed = false;

	part->internal.bdev.blocklen = base->bdev->blocklen;
	part->internal.bdev.blockcnt = num_blocks;
	part->internal.offset_blocks = offset_blocks;
@@ -551,9 +554,11 @@ spdk_bdev_part_construct(struct spdk_bdev_part *part, struct spdk_bdev_part_base
			SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(base->bdev));
			free(part->internal.bdev.name);
			free(part->internal.bdev.product_name);
			base->ref--;
			return -1;
		}
		base->claimed = true;
		first_claimed = true;
	}

	spdk_io_device_register(part, bdev_part_channel_create_cb,
@@ -561,8 +566,20 @@ spdk_bdev_part_construct(struct spdk_bdev_part *part, struct spdk_bdev_part_base
				base->channel_size,
				name);

	spdk_bdev_register(&part->internal.bdev);
	rc = spdk_bdev_register(&part->internal.bdev);
	if (rc == 0) {
		TAILQ_INSERT_TAIL(base->tailq, part, tailq);
	} else {
		spdk_io_device_unregister(part, NULL);
		if (--base->ref == 0) {
			spdk_bdev_module_release_bdev(base->bdev);
		}
		free(part->internal.bdev.name);
		free(part->internal.bdev.product_name);
		if (first_claimed == true) {
			base->claimed = false;
		}
	}

	return 0;
	return rc;
}
+9 −0
Original line number Diff line number Diff line
@@ -210,6 +210,7 @@ part_test(void)
	struct spdk_bdev_part_base	*base;
	struct spdk_bdev_part		part1 = {};
	struct spdk_bdev_part		part2 = {};
	struct spdk_bdev_part		part3 = {};
	struct spdk_bdev		bdev_base = {};
	SPDK_BDEV_PART_TAILQ		tailq = TAILQ_HEAD_INITIALIZER(tailq);
	int rc;
@@ -228,8 +229,16 @@ part_test(void)

	rc = spdk_bdev_part_construct(&part1, base, "test1", 0, 100, "test");
	SPDK_CU_ASSERT_FATAL(rc == 0);
	SPDK_CU_ASSERT_FATAL(base->ref == 1);
	SPDK_CU_ASSERT_FATAL(base->claimed == true);
	rc = spdk_bdev_part_construct(&part2, base, "test2", 100, 100, "test");
	SPDK_CU_ASSERT_FATAL(rc == 0);
	SPDK_CU_ASSERT_FATAL(base->ref == 2);
	SPDK_CU_ASSERT_FATAL(base->claimed == true);
	rc = spdk_bdev_part_construct(&part3, base, "test1", 0, 100, "test");
	SPDK_CU_ASSERT_FATAL(rc != 0);
	SPDK_CU_ASSERT_FATAL(base->ref == 2);
	SPDK_CU_ASSERT_FATAL(base->claimed == true);

	spdk_bdev_part_base_hotremove(base, &tailq);