test/bdevio: adjust writes to write_unit_size
Make writes larger when necessary to comply with the bdev's write unit size requirement. Change-Id: Ief60d369bb3efb5de083c5951672e20f2dd9e0af Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14715 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
2e73b5c7fb
commit
3fc593b61f
@ -410,19 +410,34 @@ blockdev_write_read(uint32_t data_length, uint32_t iov_len, int pattern, uint64_
|
|||||||
char *tx_buf = NULL;
|
char *tx_buf = NULL;
|
||||||
char *rx_buf = NULL;
|
char *rx_buf = NULL;
|
||||||
int rc;
|
int rc;
|
||||||
|
uint64_t write_offset = offset;
|
||||||
|
uint32_t write_data_len = data_length;
|
||||||
|
|
||||||
target = g_current_io_target;
|
target = g_current_io_target;
|
||||||
|
|
||||||
|
if (spdk_bdev_get_write_unit_size(target->bdev) > 1 && expected_rc == 0) {
|
||||||
|
uint32_t write_unit_bytes;
|
||||||
|
|
||||||
|
write_unit_bytes = spdk_bdev_get_write_unit_size(target->bdev) *
|
||||||
|
spdk_bdev_get_block_size(target->bdev);
|
||||||
|
write_offset -= offset % write_unit_bytes;
|
||||||
|
write_data_len += (offset - write_offset);
|
||||||
|
|
||||||
|
if (write_data_len % write_unit_bytes) {
|
||||||
|
write_data_len += write_unit_bytes - write_data_len % write_unit_bytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!write_zeroes) {
|
if (!write_zeroes) {
|
||||||
initialize_buffer(&tx_buf, pattern, data_length);
|
initialize_buffer(&tx_buf, pattern, write_data_len);
|
||||||
initialize_buffer(&rx_buf, 0, data_length);
|
initialize_buffer(&rx_buf, 0, data_length);
|
||||||
|
|
||||||
blockdev_write(target, tx_buf, offset, data_length, iov_len);
|
blockdev_write(target, tx_buf, write_offset, write_data_len, iov_len);
|
||||||
} else {
|
} else {
|
||||||
initialize_buffer(&tx_buf, 0, data_length);
|
initialize_buffer(&tx_buf, 0, write_data_len);
|
||||||
initialize_buffer(&rx_buf, pattern, data_length);
|
initialize_buffer(&rx_buf, pattern, data_length);
|
||||||
|
|
||||||
blockdev_write_zeroes(target, tx_buf, offset, data_length);
|
blockdev_write_zeroes(target, tx_buf, write_offset, write_data_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -440,7 +455,7 @@ blockdev_write_read(uint32_t data_length, uint32_t iov_len, int pattern, uint64_
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (g_completion_success) {
|
if (g_completion_success) {
|
||||||
rc = blockdev_write_read_data_match(rx_buf, tx_buf, data_length);
|
rc = blockdev_write_read_data_match(rx_buf, tx_buf + (offset - write_offset), data_length);
|
||||||
/* Assert the write by comparing it with values read
|
/* Assert the write by comparing it with values read
|
||||||
* from each blockdev */
|
* from each blockdev */
|
||||||
CU_ASSERT_EQUAL(rc, 0);
|
CU_ASSERT_EQUAL(rc, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user