Commit 577058d6 authored by Artur Paszkiewicz's avatar Artur Paszkiewicz Committed by Tomasz Zawadzki
Browse files

ut/raid: allow testing interleaved md



Signed-off-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Change-Id: If0dea0014723017d55181ec673903d097a01b427
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21682


Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 99537401
Loading
Loading
Loading
Loading
+24 −9
Original line number Diff line number Diff line
@@ -11,12 +11,18 @@ struct spdk_bdev_desc {
	struct spdk_bdev *bdev;
};

enum raid_params_md_type {
	RAID_PARAMS_MD_NONE,
	RAID_PARAMS_MD_SEPARATE,
	RAID_PARAMS_MD_INTERLEAVED,
};

struct raid_params {
	uint8_t num_base_bdevs;
	uint64_t base_bdev_blockcnt;
	uint32_t base_bdev_blocklen;
	uint32_t strip_size;
	uint32_t md_len;
	enum raid_params_md_type md_type;
};

struct raid_params *g_params;
@@ -70,6 +76,8 @@ raid_test_create_raid_bdev(struct raid_params *params, struct raid_bdev_module *
	struct raid_bdev *raid_bdev;
	struct raid_base_bdev_info *base_info;

	SPDK_CU_ASSERT_FATAL(spdk_u32_is_pow2(params->base_bdev_blocklen));

	raid_bdev = calloc(1, sizeof(*raid_bdev));
	SPDK_CU_ASSERT_FATAL(raid_bdev != NULL);

@@ -92,6 +100,18 @@ raid_test_create_raid_bdev(struct raid_params *params, struct raid_bdev_module *
		CU_FAIL_FATAL("unsupported raid constraint type");
	};

	raid_bdev->bdev.blocklen = params->base_bdev_blocklen;
	raid_bdev->bdev.md_len = (params->md_type == RAID_PARAMS_MD_NONE ? 0 : 16);
	raid_bdev->bdev.md_interleave = (params->md_type == RAID_PARAMS_MD_INTERLEAVED);
	if (raid_bdev->bdev.md_interleave) {
		raid_bdev->bdev.blocklen += raid_bdev->bdev.md_len;
	}

	raid_bdev->strip_size = params->strip_size;
	raid_bdev->strip_size_kb = params->strip_size * params->base_bdev_blocklen / 1024;
	raid_bdev->strip_size_shift = spdk_u32log2(raid_bdev->strip_size);
	raid_bdev->blocklen_shift = spdk_u32log2(params->base_bdev_blocklen);

	raid_bdev->base_bdev_info = calloc(raid_bdev->num_base_bdevs,
					   sizeof(struct raid_base_bdev_info));
	SPDK_CU_ASSERT_FATAL(raid_bdev->base_bdev_info != NULL);
@@ -103,7 +123,9 @@ raid_test_create_raid_bdev(struct raid_params *params, struct raid_bdev_module *
		bdev = calloc(1, sizeof(*bdev));
		SPDK_CU_ASSERT_FATAL(bdev != NULL);
		bdev->blockcnt = params->base_bdev_blockcnt;
		bdev->blocklen = params->base_bdev_blocklen;
		bdev->blocklen = raid_bdev->bdev.blocklen;
		bdev->md_len = raid_bdev->bdev.md_len;
		bdev->md_interleave = raid_bdev->bdev.md_interleave;

		desc = calloc(1, sizeof(*desc));
		SPDK_CU_ASSERT_FATAL(desc != NULL);
@@ -114,13 +136,6 @@ raid_test_create_raid_bdev(struct raid_params *params, struct raid_bdev_module *
		base_info->data_size = bdev->blockcnt;
	}

	raid_bdev->strip_size = params->strip_size;
	raid_bdev->strip_size_kb = params->strip_size * params->base_bdev_blocklen / 1024;
	raid_bdev->strip_size_shift = spdk_u32log2(raid_bdev->strip_size);
	raid_bdev->blocklen_shift = spdk_u32log2(params->base_bdev_blocklen);
	raid_bdev->bdev.blocklen = params->base_bdev_blocklen;
	raid_bdev->bdev.md_len = params->md_len;

	return raid_bdev;
}

+5 −5
Original line number Diff line number Diff line
@@ -93,12 +93,12 @@ test_suite_init(void)
	uint64_t base_bdev_blockcnt_values[] = { 1, 1024, 1024 * 1024 };
	uint32_t base_bdev_blocklen_values[] = { 512, 4096 };
	uint32_t strip_size_kb_values[] = { 1, 4, 128 };
	uint32_t md_len_values[] = { 0, 64 };
	enum raid_params_md_type md_type_values[] = { RAID_PARAMS_MD_NONE, RAID_PARAMS_MD_SEPARATE };
	uint8_t *num_base_bdevs;
	uint64_t *base_bdev_blockcnt;
	uint32_t *base_bdev_blocklen;
	uint32_t *strip_size_kb;
	uint32_t *md_len;
	enum raid_params_md_type *md_type;
	uint64_t params_count;
	int rc;

@@ -106,7 +106,7 @@ test_suite_init(void)
		       SPDK_COUNTOF(base_bdev_blockcnt_values) *
		       SPDK_COUNTOF(base_bdev_blocklen_values) *
		       SPDK_COUNTOF(strip_size_kb_values) *
		       SPDK_COUNTOF(md_len_values);
		       SPDK_COUNTOF(md_type_values);
	rc = raid_test_params_alloc(params_count);
	if (rc) {
		return rc;
@@ -116,13 +116,13 @@ test_suite_init(void)
		ARRAY_FOR_EACH(base_bdev_blockcnt_values, base_bdev_blockcnt) {
			ARRAY_FOR_EACH(base_bdev_blocklen_values, base_bdev_blocklen) {
				ARRAY_FOR_EACH(strip_size_kb_values, strip_size_kb) {
					ARRAY_FOR_EACH(md_len_values, md_len) {
					ARRAY_FOR_EACH(md_type_values, md_type) {
						struct raid_params params = {
							.num_base_bdevs = *num_base_bdevs,
							.base_bdev_blockcnt = *base_bdev_blockcnt,
							.base_bdev_blocklen = *base_bdev_blocklen,
							.strip_size = *strip_size_kb * 1024 / *base_bdev_blocklen,
							.md_len = *md_len,
							.md_type = *md_type,
						};
						if (params.strip_size == 0 ||
						    params.strip_size > params.base_bdev_blockcnt) {