Commit baa0c332 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

dif: Add and use a helper function to check DIF type



This is a preparation to move DIF configuration check from bdev modules
to the DIF library.

Signed-off-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: I1d9fe6c496c57714fcd112f60e1fa03e9148e405
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/24203


Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
parent 46854e4c
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -499,6 +499,20 @@ _dif_pi_format_is_valid(enum spdk_dif_pi_format dif_pi_format)
	}
}

static bool
_dif_type_is_valid(enum spdk_dif_type dif_type)
{
	switch (dif_type) {
	case SPDK_DIF_DISABLE:
	case SPDK_DIF_TYPE1:
	case SPDK_DIF_TYPE2:
	case SPDK_DIF_TYPE3:
		return true;
	default:
		return false;
	}
}

int
spdk_dif_ctx_init(struct spdk_dif_ctx *ctx, uint32_t block_size, uint32_t md_size,
		  bool md_interleave, bool dif_loc, enum spdk_dif_type dif_type, uint32_t dif_flags,
@@ -517,6 +531,11 @@ spdk_dif_ctx_init(struct spdk_dif_ctx *ctx, uint32_t block_size, uint32_t md_siz
		dif_pi_format = opts->dif_pi_format;
	}

	if (!_dif_type_is_valid(dif_type)) {
		SPDK_ERRLOG("No valid DIF type was provided.\n");
		return -EINVAL;
	}

	if (md_size < _dif_size(dif_pi_format)) {
		SPDK_ERRLOG("Metadata size is smaller than DIF size.\n");
		return -EINVAL;
+11 −0
Original line number Diff line number Diff line
@@ -4093,6 +4093,16 @@ dif_pi_format_check_test(void)
	CU_ASSERT(_dif_pi_format_is_valid(SPDK_DIF_PI_FORMAT_64 + 1) == false);
}

static void
dif_type_check_test(void)
{
	CU_ASSERT(_dif_type_is_valid(SPDK_DIF_DISABLE) == true);
	CU_ASSERT(_dif_type_is_valid(SPDK_DIF_TYPE1) == true);
	CU_ASSERT(_dif_type_is_valid(SPDK_DIF_TYPE2) == true);
	CU_ASSERT(_dif_type_is_valid(SPDK_DIF_TYPE3) == true);
	CU_ASSERT(_dif_type_is_valid(SPDK_DIF_TYPE3 + 1) == false);
}

int
main(int argc, char **argv)
{
@@ -4183,6 +4193,7 @@ main(int argc, char **argv)
	CU_ADD_TEST(suite, dix_sec_4096_md_128_prchk_7_multi_iovs_complex_splits_remap_test);
	CU_ADD_TEST(suite, dif_generate_and_verify_unmap_test);
	CU_ADD_TEST(suite, dif_pi_format_check_test);
	CU_ADD_TEST(suite, dif_type_check_test);

	num_failures = spdk_ut_run_tests(argc, argv, NULL);