ut/bdev/raid: Use cached pointer to expected output in IO verification

Use cached pointer to g_io_output in IO verification to improve
readability.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I71ced5d1e438d5046b9a5913a1a2860f8435d79b
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/464485
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Shuhei Matsumoto 2019-08-08 12:57:19 +09:00 committed by Jim Harris
parent 2b015b7a26
commit 47155be6f3

View File

@ -643,6 +643,7 @@ verify_reset_io(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
struct raid_bdev_io_channel *ch_ctx, struct raid_bdev *raid_bdev, uint32_t io_status)
{
uint8_t index = 0;
struct io_output *output;
SPDK_CU_ASSERT_FATAL(raid_bdev != NULL);
SPDK_CU_ASSERT_FATAL(num_base_drives != 0);
@ -651,9 +652,10 @@ verify_reset_io(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
CU_ASSERT(g_io_output_index == num_base_drives);
for (index = 0; index < g_io_output_index; index++) {
CU_ASSERT(ch_ctx->base_channel[index] == g_io_output[index].ch);
CU_ASSERT(raid_bdev->base_bdev_info[index].desc == g_io_output[index].desc);
CU_ASSERT(bdev_io->type == g_io_output[index].iotype);
output = &g_io_output[index];
CU_ASSERT(ch_ctx->base_channel[index] == output->ch);
CU_ASSERT(raid_bdev->base_bdev_info[index].desc == output->desc);
CU_ASSERT(bdev_io->type == output->iotype);
}
CU_ASSERT(g_io_comp_status == io_status);
}
@ -675,6 +677,7 @@ verify_io(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
uint64_t pd_blocks;
uint32_t index = 0;
uint8_t *buf = bdev_io->u.bdev.iovs->iov_base;
struct io_output *output;
if (io_status == INVALID_IO_SUBMIT) {
CU_ASSERT(g_io_comp_status == false);
@ -703,11 +706,12 @@ verify_io(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
pd_lba = pd_strip << raid_bdev->strip_size_shift;
pd_blocks = raid_bdev->strip_size;
}
CU_ASSERT(pd_lba == g_io_output[index].offset_blocks);
CU_ASSERT(pd_blocks == g_io_output[index].num_blocks);
CU_ASSERT(ch_ctx->base_channel[pd_idx] == g_io_output[index].ch);
CU_ASSERT(raid_bdev->base_bdev_info[pd_idx].desc == g_io_output[index].desc);
CU_ASSERT(bdev_io->type == g_io_output[index].iotype);
output = &g_io_output[index];
CU_ASSERT(pd_lba == output->offset_blocks);
CU_ASSERT(pd_blocks == output->num_blocks);
CU_ASSERT(ch_ctx->base_channel[pd_idx] == output->ch);
CU_ASSERT(raid_bdev->base_bdev_info[pd_idx].desc == output->desc);
CU_ASSERT(bdev_io->type == output->iotype);
buf += (pd_blocks << spdk_u32log2(g_block_len));
}
CU_ASSERT(g_io_comp_status == io_status);
@ -732,6 +736,7 @@ verify_io_without_payload(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
uint8_t disk_idx;
uint64_t base_io_idx;
uint64_t sum_nblocks = 0;
struct io_output *output;
if (io_status == INVALID_IO_SUBMIT) {
CU_ASSERT(g_io_comp_status == false);
@ -747,6 +752,7 @@ verify_io_without_payload(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
start_strip_disk_idx = start_strip % num_base_drives;
end_strip_disk_idx = end_strip % num_base_drives;
offset_in_start_disk = g_io_output[0].offset_blocks;
nblocks_in_start_disk = g_io_output[0].num_blocks;
@ -755,6 +761,8 @@ verify_io_without_payload(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
uint64_t start_offset_in_disk;
uint64_t end_offset_in_disk;
output = &g_io_output[base_io_idx];
/* round disk_idx */
if (disk_idx >= num_base_drives) {
disk_idx %= num_base_drives;
@ -764,7 +772,7 @@ verify_io_without_payload(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
* The first base io has a same start_offset_in_strip with the whole raid io.
* Other base io should have aligned start_offset_in_strip which is 0.
*/
start_offset_in_disk = g_io_output[base_io_idx].offset_blocks;
start_offset_in_disk = output->offset_blocks;
if (base_io_idx == 0) {
CU_ASSERT(start_offset_in_disk % g_strip_size == start_offset_in_strip);
} else {
@ -775,8 +783,7 @@ verify_io_without_payload(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
* Base io on disk at which end_strip is located, has a same end_offset_in_strip with the whole raid io.
* Other base io should have aligned end_offset_in_strip.
*/
end_offset_in_disk = g_io_output[base_io_idx].offset_blocks +
g_io_output[base_io_idx].num_blocks - 1;
end_offset_in_disk = output->offset_blocks + output->num_blocks - 1;
if (disk_idx == end_strip_disk_idx) {
CU_ASSERT(end_offset_in_disk % g_strip_size == end_offset_in_strip);
} else {
@ -794,23 +801,23 @@ verify_io_without_payload(struct spdk_bdev_io *bdev_io, uint8_t num_base_drives,
CU_ASSERT(offset_in_start_disk - start_offset_in_disk < g_strip_size);
} else if (disk_idx < start_strip_disk_idx) {
CU_ASSERT(start_offset_in_disk > offset_in_start_disk);
CU_ASSERT(g_io_output[base_io_idx].offset_blocks - offset_in_start_disk <= g_strip_size);
CU_ASSERT(output->offset_blocks - offset_in_start_disk <= g_strip_size);
}
/* nblocks compared with start_disk:
* The gap between them must be within a strip size.
*/
if (g_io_output[base_io_idx].num_blocks <= nblocks_in_start_disk) {
CU_ASSERT(nblocks_in_start_disk - g_io_output[base_io_idx].num_blocks <= g_strip_size);
if (output->num_blocks <= nblocks_in_start_disk) {
CU_ASSERT(nblocks_in_start_disk - output->num_blocks <= g_strip_size);
} else {
CU_ASSERT(g_io_output[base_io_idx].num_blocks - nblocks_in_start_disk < g_strip_size);
CU_ASSERT(output->num_blocks - nblocks_in_start_disk < g_strip_size);
}
sum_nblocks += g_io_output[base_io_idx].num_blocks;
sum_nblocks += output->num_blocks;
CU_ASSERT(ch_ctx->base_channel[disk_idx] == g_io_output[base_io_idx].ch);
CU_ASSERT(raid_bdev->base_bdev_info[disk_idx].desc == g_io_output[base_io_idx].desc);
CU_ASSERT(bdev_io->type == g_io_output[base_io_idx].iotype);
CU_ASSERT(ch_ctx->base_channel[disk_idx] == output->ch);
CU_ASSERT(raid_bdev->base_bdev_info[disk_idx].desc == output->desc);
CU_ASSERT(bdev_io->type == output->iotype);
}
/* Sum of each nblocks should be same with raid bdev_io */