Commit ca6d23e7 authored by Artur Paszkiewicz's avatar Artur Paszkiewicz Committed by Konrad Sztyber
Browse files

ut/raid5f: simplify read tests



Remove struct test_request_conf and instead do some basic reads on each
chunk. Also remove the io_info splitting because it is not used now.

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


Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent e7b78543
Loading
Loading
Loading
Loading
+35 −57
Original line number Diff line number Diff line
@@ -298,18 +298,13 @@ raid_bdev_io_completion_cb(struct spdk_bdev_io *bdev_io, bool success, void *cb_
}

static struct raid_bdev_io *
get_raid_io(struct raid_io_info *io_info, uint64_t offset_blocks_split, uint64_t num_blocks)
get_raid_io(struct raid_io_info *io_info)
{
	struct spdk_bdev_io *bdev_io;
	struct raid_bdev_io *raid_io;
	struct raid_bdev *raid_bdev = io_info->r5f_info->raid_bdev;
	uint32_t blocklen = raid_bdev->bdev.blocklen;
	struct test_raid_bdev_io *test_raid_bdev_io;
	void *src_buf = io_info->src_buf + offset_blocks_split * blocklen;
	void *dest_buf = io_info->dest_buf + offset_blocks_split * blocklen;

	void *src_md_buf = io_info->src_md_buf + offset_blocks_split * raid_bdev->bdev.md_len;
	void *dest_md_buf = io_info->dest_md_buf + offset_blocks_split * raid_bdev->bdev.md_len;

	test_raid_bdev_io = calloc(1, sizeof(*test_raid_bdev_io));
	SPDK_CU_ASSERT_FATAL(test_raid_bdev_io != NULL);
@@ -318,8 +313,8 @@ get_raid_io(struct raid_io_info *io_info, uint64_t offset_blocks_split, uint64_t
	bdev_io = (struct spdk_bdev_io *)test_raid_bdev_io->bdev_io_buf;
	bdev_io->bdev = &raid_bdev->bdev;
	bdev_io->type = io_info->io_type;
	bdev_io->u.bdev.offset_blocks = io_info->offset_blocks + offset_blocks_split;
	bdev_io->u.bdev.num_blocks = num_blocks;
	bdev_io->u.bdev.offset_blocks = io_info->offset_blocks;
	bdev_io->u.bdev.num_blocks = io_info->num_blocks;
	bdev_io->internal.cb = raid_bdev_io_completion_cb;
	bdev_io->internal.caller_ctx = io_info;

@@ -331,20 +326,20 @@ get_raid_io(struct raid_io_info *io_info, uint64_t offset_blocks_split, uint64_t
	test_raid_bdev_io->io_info = io_info;

	if (io_info->io_type == SPDK_BDEV_IO_TYPE_READ) {
		test_raid_bdev_io->buf = src_buf;
		test_raid_bdev_io->buf_md = src_md_buf;
		bdev_io->u.bdev.md_buf = dest_md_buf;
		bdev_io->iov.iov_base = dest_buf;
		test_raid_bdev_io->buf = io_info->src_buf;
		test_raid_bdev_io->buf_md = io_info->src_md_buf;
		bdev_io->iov.iov_base = io_info->dest_buf;
		bdev_io->u.bdev.md_buf = io_info->dest_md_buf;
	} else {
		test_raid_bdev_io->buf = dest_buf;
		test_raid_bdev_io->buf_md = dest_md_buf;
		bdev_io->u.bdev.md_buf = src_md_buf;
		bdev_io->iov.iov_base = src_buf;
		test_raid_bdev_io->buf = io_info->dest_buf;
		test_raid_bdev_io->buf_md = io_info->dest_md_buf;
		bdev_io->iov.iov_base = io_info->src_buf;
		bdev_io->u.bdev.md_buf = io_info->src_md_buf;
	}

	bdev_io->u.bdev.iovs = &bdev_io->iov;
	bdev_io->u.bdev.iovcnt = 1;
	bdev_io->iov.iov_len = num_blocks * blocklen;
	bdev_io->iov.iov_len = io_info->num_blocks * blocklen;

	io_info->remaining++;

@@ -571,7 +566,7 @@ test_raid5f_write_request(struct raid_io_info *io_info)

	SPDK_CU_ASSERT_FATAL(io_info->num_blocks / io_info->r5f_info->stripe_blocks == 1);

	raid_io = get_raid_io(io_info, 0, io_info->num_blocks);
	raid_io = get_raid_io(io_info);

	raid5f_submit_rw_request(raid_io);

@@ -594,22 +589,13 @@ test_raid5f_write_request(struct raid_io_info *io_info)
static void
test_raid5f_read_request(struct raid_io_info *io_info)
{
	uint32_t strip_size = io_info->r5f_info->raid_bdev->strip_size;
	uint64_t num_blocks = io_info->num_blocks;
	uint64_t offset_blocks_split = 0;

	while (num_blocks) {
		uint64_t chunk_offset = offset_blocks_split % strip_size;
		uint64_t num_blocks_split = spdk_min(num_blocks, strip_size - chunk_offset);
	struct raid_bdev_io *raid_io;

		raid_io = get_raid_io(io_info, offset_blocks_split, num_blocks_split);
	SPDK_CU_ASSERT_FATAL(io_info->num_blocks <= io_info->r5f_info->raid_bdev->strip_size);

		raid5f_submit_rw_request(raid_io);
	raid_io = get_raid_io(io_info);

		num_blocks -= num_blocks_split;
		offset_blocks_split += num_blocks_split;
	}
	raid5f_submit_rw_request(raid_io);

	process_io_completions(io_info);
}
@@ -746,6 +732,8 @@ test_raid5f_submit_rw_request(struct raid5f_info *r5f_info, struct raid_bdev_io_
	uint64_t offset_blocks = stripe_index * r5f_info->stripe_blocks + stripe_offset_blocks;
	struct raid_io_info io_info;

	SPDK_CU_ASSERT_FATAL(stripe_offset_blocks < r5f_info->stripe_blocks);

	init_io_info(&io_info, r5f_info, raid_ch, io_type, offset_blocks, num_blocks);

	switch (io_type) {
@@ -802,41 +790,31 @@ run_for_each_raid5f_config(void (*test_fn)(struct raid_bdev *raid_bdev,
#define RAID5F_TEST_FOR_EACH_STRIPE(raid_bdev, i) \
	for (i = 0; i < spdk_min(raid_bdev->num_base_bdevs, ((struct raid5f_info *)raid_bdev->module_private)->total_stripes); i++)

struct test_request_conf {
	uint64_t stripe_offset_blocks;
	uint64_t num_blocks;
};

static void
__test_raid5f_submit_read_request(struct raid_bdev *raid_bdev, struct raid_bdev_io_channel *raid_ch)
{
	struct raid5f_info *r5f_info = raid_bdev->module_private;
	uint32_t strip_size = raid_bdev->strip_size;
	uint64_t stripe_index;
	unsigned int i;

	struct test_request_conf test_requests[] = {
		{ 0, 1 },
		{ 0, strip_size },
		{ 0, strip_size + 1 },
		{ 0, r5f_info->stripe_blocks },
		{ 1, 1 },
		{ 1, strip_size },
		{ 1, strip_size + 1 },
		{ strip_size, 1 },
		{ strip_size, strip_size },
		{ strip_size, strip_size + 1 },
		{ strip_size - 1, 1 },
		{ strip_size - 1, strip_size },
		{ strip_size - 1, strip_size + 1 },
		{ strip_size - 1, 2 },
	};
	for (i = 0; i < SPDK_COUNTOF(test_requests); i++) {
		struct test_request_conf *t = &test_requests[i];
		uint64_t stripe_index;
	for (i = 0; i < raid5f_stripe_data_chunks_num(raid_bdev); i++) {
		uint64_t stripe_offset = i * strip_size;

		RAID5F_TEST_FOR_EACH_STRIPE(raid_bdev, stripe_index) {
			test_raid5f_submit_rw_request(r5f_info, raid_ch, SPDK_BDEV_IO_TYPE_READ,
						      stripe_index, t->stripe_offset_blocks, t->num_blocks);
						      stripe_index, stripe_offset, 1);

			test_raid5f_submit_rw_request(r5f_info, raid_ch, SPDK_BDEV_IO_TYPE_READ,
						      stripe_index, stripe_offset, strip_size);

			test_raid5f_submit_rw_request(r5f_info, raid_ch, SPDK_BDEV_IO_TYPE_READ,
						      stripe_index, stripe_offset + strip_size - 1, 1);
			if (strip_size <= 2) {
				continue;
			}
			test_raid5f_submit_rw_request(r5f_info, raid_ch, SPDK_BDEV_IO_TYPE_READ,
						      stripe_index, stripe_offset + 1, strip_size - 2);
		}
	}
}
@@ -869,7 +847,7 @@ __test_raid5f_stripe_request_map_iovecs(struct raid_bdev *raid_bdev,

	init_io_info(&io_info, r5f_info, raid_ch, SPDK_BDEV_IO_TYPE_WRITE, 0, 0);

	raid_io = get_raid_io(&io_info, 0, 0);
	raid_io = get_raid_io(&io_info);
	bdev_io = spdk_bdev_io_from_ctx(raid_io);
	bdev_io->u.bdev.iovs = iovs;
	bdev_io->u.bdev.iovcnt = iovcnt;