aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2022-06-17 09:42:42 +0100
committerJens Axboe <axboe@kernel.dk>2022-06-17 05:36:57 -0600
commit540ca1c11016ed50940e3f6f555a986356578646 (patch)
tree7d70aaae3b0dd28ba0abfe5db8f8fbace35bf676
parent203abdf5f0bf78a58d59f3f4a4e8561cb76b10f4 (diff)
downloadliburing-540ca1c11016ed50940e3f6f555a986356578646.tar.gz
tests: fix and improve nop tests
We removed CQE32 for nops from the kernel, fix the tests and instead test that we return zeroes in the extra fields instead of garbage. Loop over the tests multiple times so it exhausts CQ and we also test CQ entries recycling and internal caching mechanism. Also excersie IOSQE_ASYNC. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/92f01041e5ef933a6018bd89dd54cc1fae57c6f6.1655455225.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--test/nop.c47
1 files changed, 22 insertions, 25 deletions
diff --git a/test/nop.c b/test/nop.c
index ce223b3..1aa88fc 100644
--- a/test/nop.c
+++ b/test/nop.c
@@ -15,7 +15,7 @@
static int seq;
-static int test_single_nop(struct io_uring *ring)
+static int test_single_nop(struct io_uring *ring, unsigned req_flags)
{
struct io_uring_cqe *cqe;
struct io_uring_sqe *sqe;
@@ -29,11 +29,8 @@ static int test_single_nop(struct io_uring *ring)
}
io_uring_prep_nop(sqe);
- if (cqe32) {
- sqe->addr = 1234;
- sqe->addr2 = 5678;
- }
sqe->user_data = ++seq;
+ sqe->flags |= req_flags;
ret = io_uring_submit(ring);
if (ret <= 0) {
@@ -51,12 +48,12 @@ static int test_single_nop(struct io_uring *ring)
goto err;
}
if (cqe32) {
- if (cqe->big_cqe[0] != 1234) {
+ if (cqe->big_cqe[0] != 0) {
fprintf(stderr, "Unexpected extra1\n");
goto err;
}
- if (cqe->big_cqe[1] != 5678) {
+ if (cqe->big_cqe[1] != 0) {
fprintf(stderr, "Unexpected extra2\n");
goto err;
}
@@ -67,7 +64,7 @@ err:
return 1;
}
-static int test_barrier_nop(struct io_uring *ring)
+static int test_barrier_nop(struct io_uring *ring, unsigned req_flags)
{
struct io_uring_cqe *cqe;
struct io_uring_sqe *sqe;
@@ -84,11 +81,8 @@ static int test_barrier_nop(struct io_uring *ring)
io_uring_prep_nop(sqe);
if (i == 4)
sqe->flags = IOSQE_IO_DRAIN;
- if (cqe32) {
- sqe->addr = 1234;
- sqe->addr2 = 5678;
- }
sqe->user_data = ++seq;
+ sqe->flags |= req_flags;
}
ret = io_uring_submit(ring);
@@ -111,11 +105,11 @@ static int test_barrier_nop(struct io_uring *ring)
goto err;
}
if (cqe32) {
- if (cqe->big_cqe[0] != 1234) {
+ if (cqe->big_cqe[0] != 0) {
fprintf(stderr, "Unexpected extra1\n");
goto err;
}
- if (cqe->big_cqe[1] != 5678) {
+ if (cqe->big_cqe[1] != 0) {
fprintf(stderr, "Unexpected extra2\n");
goto err;
}
@@ -132,7 +126,7 @@ static int test_ring(unsigned flags)
{
struct io_uring ring;
struct io_uring_params p = { };
- int ret;
+ int ret, i;
p.flags = flags;
ret = io_uring_queue_init_params(8, &ring, &p);
@@ -143,18 +137,21 @@ static int test_ring(unsigned flags)
return 1;
}
- ret = test_single_nop(&ring);
- if (ret) {
- fprintf(stderr, "test_single_nop failed\n");
- goto err;
- }
+ for (i = 0; i < 1000; i++) {
+ unsigned req_flags = (i & 1) ? IOSQE_ASYNC : 0;
- ret = test_barrier_nop(&ring);
- if (ret) {
- fprintf(stderr, "test_barrier_nop failed\n");
- goto err;
- }
+ ret = test_single_nop(&ring, req_flags);
+ if (ret) {
+ fprintf(stderr, "test_single_nop failed\n");
+ goto err;
+ }
+ ret = test_barrier_nop(&ring, req_flags);
+ if (ret) {
+ fprintf(stderr, "test_barrier_nop failed\n");
+ goto err;
+ }
+ }
err:
io_uring_queue_exit(&ring);
return ret;