ut/dif: Fill test data buffer by cyclic values to find potential issues
Previously, test data buffer was filled by one value, 0xAB, but this may not be enough to detect future potential issues. ut_data_pattern_verify() already did per-byte check, but size of test data buffer is small and completion time of tests is not long. So, even if we change ut_data_pattern_generate() to set per-byte data instead of memset(), extra overhead of test completion time will be negligible. Change-Id: I35677b238f96a73c0c408f0818f080a92492dac6 Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/c/445430 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: wuzhouhui <wuzhouhui@kingsoft.com>
This commit is contained in:
parent
8696cd4288
commit
2fefd9f53c
@ -37,16 +37,16 @@
|
||||
|
||||
#include "util/dif.c"
|
||||
|
||||
#define DATA_PATTERN 0xAB
|
||||
#define GUARD_SEED 0xCD
|
||||
#define DATA_PATTERN(offset) ((uint8_t)(0xAB + (offset)))
|
||||
#define GUARD_SEED 0xCD
|
||||
|
||||
static int
|
||||
ut_data_pattern_generate(struct iovec *iovs, int iovcnt,
|
||||
uint32_t block_size, uint32_t md_size, uint32_t num_blocks)
|
||||
{
|
||||
struct _iov_iter iter;
|
||||
uint32_t offset_blocks, offset_in_block, buf_len;
|
||||
void *buf;
|
||||
uint32_t offset_blocks, offset_in_block, buf_len, data_offset, i;
|
||||
uint8_t *buf;
|
||||
|
||||
if (!_are_iovs_valid(iovs, iovcnt, block_size * num_blocks)) {
|
||||
return -1;
|
||||
@ -54,15 +54,19 @@ ut_data_pattern_generate(struct iovec *iovs, int iovcnt,
|
||||
|
||||
offset_blocks = 0;
|
||||
_iov_iter_init(&iter, iovs, iovcnt);
|
||||
data_offset = 0;
|
||||
|
||||
while (offset_blocks < num_blocks) {
|
||||
offset_in_block = 0;
|
||||
while (offset_in_block < block_size) {
|
||||
_iov_iter_get_buf(&iter, &buf, &buf_len);
|
||||
_iov_iter_get_buf(&iter, (void *)&buf, &buf_len);
|
||||
if (offset_in_block < block_size - md_size) {
|
||||
buf_len = spdk_min(buf_len,
|
||||
block_size - md_size - offset_in_block);
|
||||
memset(buf, DATA_PATTERN, buf_len);
|
||||
for (i = 0; i < buf_len; i++) {
|
||||
buf[i] = DATA_PATTERN(data_offset + i);
|
||||
}
|
||||
data_offset += buf_len;
|
||||
} else {
|
||||
buf_len = spdk_min(buf_len, block_size - offset_in_block);
|
||||
memset(buf, 0, buf_len);
|
||||
@ -81,7 +85,7 @@ ut_data_pattern_verify(struct iovec *iovs, int iovcnt,
|
||||
uint32_t block_size, uint32_t md_size, uint32_t num_blocks)
|
||||
{
|
||||
struct _iov_iter iter;
|
||||
uint32_t offset_blocks, offset_in_block, buf_len, i;
|
||||
uint32_t offset_blocks, offset_in_block, buf_len, data_offset, i;
|
||||
uint8_t *buf;
|
||||
|
||||
if (!_are_iovs_valid(iovs, iovcnt, block_size * num_blocks)) {
|
||||
@ -90,6 +94,7 @@ ut_data_pattern_verify(struct iovec *iovs, int iovcnt,
|
||||
|
||||
offset_blocks = 0;
|
||||
_iov_iter_init(&iter, iovs, iovcnt);
|
||||
data_offset = 0;
|
||||
|
||||
while (offset_blocks < num_blocks) {
|
||||
offset_in_block = 0;
|
||||
@ -100,10 +105,11 @@ ut_data_pattern_verify(struct iovec *iovs, int iovcnt,
|
||||
buf_len = spdk_min(buf_len,
|
||||
block_size - md_size - offset_in_block);
|
||||
for (i = 0; i < buf_len; i++) {
|
||||
if (buf[i] != DATA_PATTERN) {
|
||||
if (buf[i] != DATA_PATTERN(data_offset + i)) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
data_offset += buf_len;
|
||||
} else {
|
||||
buf_len = spdk_min(buf_len, block_size - offset_in_block);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user