qemu-iotests: Fix regression in 136 on aio_read invalid
Commit 093ea232
removed the ability for aio_read and aio_write
to artificially inflate the invalid statistics counters for
block devices, since it no longer flags unaligned offset or
length. Add 'aio_read -i' and 'aio_write -i' to restore
the ability, and update test 136 to use it.
Reported-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-id: 1463416983-28318-4-git-send-email-eblake@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
9e28bb26c2
commit
37546ff28f
|
@ -1274,6 +1274,7 @@ static void aio_read_help(void)
|
||||||
" used to ensure all outstanding aio requests have been completed.\n"
|
" used to ensure all outstanding aio requests have been completed.\n"
|
||||||
" -C, -- report statistics in a machine parsable format\n"
|
" -C, -- report statistics in a machine parsable format\n"
|
||||||
" -P, -- use a pattern to verify read data\n"
|
" -P, -- use a pattern to verify read data\n"
|
||||||
|
" -i, -- treat request as invalid, for exercising stats\n"
|
||||||
" -v, -- dump buffer to standard output\n"
|
" -v, -- dump buffer to standard output\n"
|
||||||
" -q, -- quiet mode, do not show I/O statistics\n"
|
" -q, -- quiet mode, do not show I/O statistics\n"
|
||||||
"\n");
|
"\n");
|
||||||
|
@ -1286,7 +1287,7 @@ static const cmdinfo_t aio_read_cmd = {
|
||||||
.cfunc = aio_read_f,
|
.cfunc = aio_read_f,
|
||||||
.argmin = 2,
|
.argmin = 2,
|
||||||
.argmax = -1,
|
.argmax = -1,
|
||||||
.args = "[-Cqv] [-P pattern] off len [len..]",
|
.args = "[-Ciqv] [-P pattern] off len [len..]",
|
||||||
.oneline = "asynchronously reads a number of bytes",
|
.oneline = "asynchronously reads a number of bytes",
|
||||||
.help = aio_read_help,
|
.help = aio_read_help,
|
||||||
};
|
};
|
||||||
|
@ -1297,7 +1298,7 @@ static int aio_read_f(BlockBackend *blk, int argc, char **argv)
|
||||||
struct aio_ctx *ctx = g_new0(struct aio_ctx, 1);
|
struct aio_ctx *ctx = g_new0(struct aio_ctx, 1);
|
||||||
|
|
||||||
ctx->blk = blk;
|
ctx->blk = blk;
|
||||||
while ((c = getopt(argc, argv, "CP:qv")) != -1) {
|
while ((c = getopt(argc, argv, "CP:iqv")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'C':
|
case 'C':
|
||||||
ctx->Cflag = true;
|
ctx->Cflag = true;
|
||||||
|
@ -1310,6 +1311,11 @@ static int aio_read_f(BlockBackend *blk, int argc, char **argv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'i':
|
||||||
|
printf("injecting invalid read request\n");
|
||||||
|
block_acct_invalid(blk_get_stats(blk), BLOCK_ACCT_READ);
|
||||||
|
g_free(ctx);
|
||||||
|
return 0;
|
||||||
case 'q':
|
case 'q':
|
||||||
ctx->qflag = true;
|
ctx->qflag = true;
|
||||||
break;
|
break;
|
||||||
|
@ -1367,6 +1373,7 @@ static void aio_write_help(void)
|
||||||
" -P, -- use different pattern to fill file\n"
|
" -P, -- use different pattern to fill file\n"
|
||||||
" -C, -- report statistics in a machine parsable format\n"
|
" -C, -- report statistics in a machine parsable format\n"
|
||||||
" -f, -- use Force Unit Access semantics\n"
|
" -f, -- use Force Unit Access semantics\n"
|
||||||
|
" -i, -- treat request as invalid, for exercising stats\n"
|
||||||
" -q, -- quiet mode, do not show I/O statistics\n"
|
" -q, -- quiet mode, do not show I/O statistics\n"
|
||||||
" -u, -- with -z, allow unmapping\n"
|
" -u, -- with -z, allow unmapping\n"
|
||||||
" -z, -- write zeroes using blk_aio_write_zeroes\n"
|
" -z, -- write zeroes using blk_aio_write_zeroes\n"
|
||||||
|
@ -1380,7 +1387,7 @@ static const cmdinfo_t aio_write_cmd = {
|
||||||
.cfunc = aio_write_f,
|
.cfunc = aio_write_f,
|
||||||
.argmin = 2,
|
.argmin = 2,
|
||||||
.argmax = -1,
|
.argmax = -1,
|
||||||
.args = "[-Cfquz] [-P pattern] off len [len..]",
|
.args = "[-Cfiquz] [-P pattern] off len [len..]",
|
||||||
.oneline = "asynchronously writes a number of bytes",
|
.oneline = "asynchronously writes a number of bytes",
|
||||||
.help = aio_write_help,
|
.help = aio_write_help,
|
||||||
};
|
};
|
||||||
|
@ -1393,7 +1400,7 @@ static int aio_write_f(BlockBackend *blk, int argc, char **argv)
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
|
|
||||||
ctx->blk = blk;
|
ctx->blk = blk;
|
||||||
while ((c = getopt(argc, argv, "CfqP:uz")) != -1) {
|
while ((c = getopt(argc, argv, "CfiqP:uz")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'C':
|
case 'C':
|
||||||
ctx->Cflag = true;
|
ctx->Cflag = true;
|
||||||
|
@ -1414,6 +1421,11 @@ static int aio_write_f(BlockBackend *blk, int argc, char **argv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'i':
|
||||||
|
printf("injecting invalid write request\n");
|
||||||
|
block_acct_invalid(blk_get_stats(blk), BLOCK_ACCT_WRITE);
|
||||||
|
g_free(ctx);
|
||||||
|
return 0;
|
||||||
case 'z':
|
case 'z':
|
||||||
ctx->zflag = true;
|
ctx->zflag = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -226,18 +226,11 @@ sector = "%d"
|
||||||
|
|
||||||
highest_offset = wr_ops * wr_size
|
highest_offset = wr_ops * wr_size
|
||||||
|
|
||||||
# Two types of invalid operations: unaligned length and unaligned offset
|
for i in range(invalid_rd_ops):
|
||||||
for i in range(invalid_rd_ops / 2):
|
ops.append("aio_read -i 0 512")
|
||||||
ops.append("aio_read 0 511")
|
|
||||||
|
|
||||||
for i in range(invalid_rd_ops / 2, invalid_rd_ops):
|
for i in range(invalid_wr_ops):
|
||||||
ops.append("aio_read 13 512")
|
ops.append("aio_write -i 0 512")
|
||||||
|
|
||||||
for i in range(invalid_wr_ops / 2):
|
|
||||||
ops.append("aio_write 0 511")
|
|
||||||
|
|
||||||
for i in range(invalid_wr_ops / 2, invalid_wr_ops):
|
|
||||||
ops.append("aio_write 13 512")
|
|
||||||
|
|
||||||
for i in range(failed_rd_ops):
|
for i in range(failed_rd_ops):
|
||||||
ops.append("aio_read %d 512" % bad_offset)
|
ops.append("aio_read %d 512" % bad_offset)
|
||||||
|
|
Loading…
Reference in New Issue