[LTP] [PATCH] io_submit01/io_submit02: Bugfix for running with the option "-i"

Petr Vorel pvorel@suse.cz
Tue Apr 5 16:07:14 CEST 2022


Hi all,

> For io_submit01, add io_destroy before test return, or the test
> would fail and report EAGAIN.
> For io_submit02, move the io_destroy to the suitable location, or
> the test would fail and report EAGAIN.

$ ./io_submit01 -i150
...
io_submit01.c:122: TPASS: io_submit() with NULL iocb pointers failed with EFAULT
io_submit01.c:127: TFAIL: io_submit() returned -11(EAGAIN/EWOULDBLOCK), expected EBADF(-9)
io_submit01.c:127: TFAIL: io_submit() returned -11(EAGAIN/EWOULDBLOCK), expected EBADF(-9)
io_submit01.c:127: TFAIL: io_submit() returned -11(EAGAIN/EWOULDBLOCK), expected EBADF(-9)
io_submit01.c:127: TFAIL: io_submit() returned -11(EAGAIN/EWOULDBLOCK), expected SUCCESS(1)

$ ./io_submit02 -i150
...
io_submit02.c:76: TPASS: io_submit() returns 0 if nr is zero
io_submit02.c:78: TFAIL: io_submit() returns -1, expected 1

@Cyril, Li, Martin, Viresh: while this fix is valid using memset() (which is required)
slows down testing a lot. Any idea whether this can be avoid to keep the speed?

Kind regards,
Petr

> Signed-off-by: Zhao Gongyi <zhaogongyi@huawei.com>
> ---
>  .../kernel/syscalls/io_submit/io_submit01.c    | 18 ++++++++++++------
>  .../kernel/syscalls/io_submit/io_submit02.c    |  9 ++++++---
>  2 files changed, 18 insertions(+), 9 deletions(-)

> diff --git a/testcases/kernel/syscalls/io_submit/io_submit01.c b/testcases/kernel/syscalls/io_submit/io_submit01.c
> index 28d93d7f1..7931c583b 100644
> --- a/testcases/kernel/syscalls/io_submit/io_submit01.c
> +++ b/testcases/kernel/syscalls/io_submit/io_submit01.c
> @@ -77,12 +77,6 @@ static struct tcase {

>  static void setup(void)
>  {
> -	TEST(io_setup(1, &ctx));
> -	if (TST_RET == -ENOSYS)
> -		tst_brk(TCONF | TRERRNO, "io_setup(): AIO not supported by kernel");
> -	else if (TST_RET)
> -		tst_brk(TBROK | TRERRNO, "io_setup() failed");
> -
>  	io_prep_pread(&inv_fd_iocb, -1, buf, sizeof(buf), 0);

>  	rdonly_fd = SAFE_OPEN("rdonly_file", O_RDONLY | O_CREAT, 0777);
> @@ -116,8 +110,20 @@ static void verify_io_submit(unsigned int n)
>  	struct tcase *t = &tcases[n];
>  	int ret;

> +	memset(&ctx, 0, sizeof(ctx));
> +	TEST(io_setup(1, &ctx));
> +	if (TST_RET == -ENOSYS)
> +		tst_brk(TCONF | TRERRNO, "io_setup(): AIO not supported by kernel");
> +	else if (TST_RET)
> +		tst_brk(TBROK | TRERRNO, "io_setup() failed");
> +
>  	ret = io_submit(*t->ctx, t->nr, t->iocbs);

> +	TEST(io_destroy(ctx));
> +	if (TST_RET) {
> +		tst_brk(TBROK | TRERRNO, "io_destroy() failed");
> +	}
> +
>  	if (ret == t->exp_errno) {
>  		tst_res(TPASS, "io_submit() with %s failed with %s",
>  			t->desc, errno_name(t->exp_errno));
> diff --git a/testcases/kernel/syscalls/io_submit/io_submit02.c b/testcases/kernel/syscalls/io_submit/io_submit02.c
> index acb42cb8f..ac32d254e 100644
> --- a/testcases/kernel/syscalls/io_submit/io_submit02.c
> +++ b/testcases/kernel/syscalls/io_submit/io_submit02.c
> @@ -54,7 +54,6 @@ static inline void io_prep_option(struct iocb *cb, int fd, void *buf,

>  static void setup(void)
>  {
> -	TST_EXP_PASS_SILENT(tst_syscall(__NR_io_setup, 1, &ctx));
>  	fd = SAFE_OPEN(TEST_FILE, O_RDONLY | O_CREAT, MODE);
>  	io_prep_option(&iocb, fd, buf, 0, 0, IOCB_CMD_PREAD);
>  }
> @@ -64,18 +63,22 @@ static void cleanup(void)
>  	if (fd > 0)
>  		SAFE_CLOSE(fd);

> -	if (tst_syscall(__NR_io_destroy, ctx))
> -		tst_brk(TBROK | TERRNO, "io_destroy() failed");
>  }

>  static void run(unsigned int i)
>  {
> +	memset(tc[i].ctx, 0, sizeof(aio_context_t));
> +	TST_EXP_PASS_SILENT(tst_syscall(__NR_io_setup, 1, &ctx));
> +
>  	TEST(tst_syscall(__NR_io_submit, *tc[i].ctx, tc[i].nr, tc[i].iocbs));

>  	if (TST_RET == tc[i].nr)
>  		tst_res(TPASS, "io_submit() %s", tc[i].desc);
>  	else
>  		tst_res(TFAIL, "io_submit() returns %ld, expected %ld", TST_RET, tc[i].nr);
> +
> +	if (tst_syscall(__NR_io_destroy, ctx))
> +		tst_brk(TBROK | TERRNO, "io_destroy() failed");
>  }

>  static struct tst_test test = {


More information about the ltp mailing list