summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2020-01-30 09:17:16 -0700
committerJens Axboe <axboe@kernel.dk>2020-01-30 09:19:30 -0700
commit28a8aeeb2a203613eef89e7130ee52f7d20ee8b4 (patch)
tree01222814ff6e951bf7d815c014a05b670bd2bcc0
parentb20521873724fe8c61ada344baff752999ab960e (diff)
downloadliburing-28a8aeeb2a203613eef89e7130ee52f7d20ee8b4.tar.gz
liburing-28a8aeeb2a203613eef89e7130ee52f7d20ee8b4.tar.bz2
test/probe: split verification into helper
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--test/probe.c67
1 files changed, 42 insertions, 25 deletions
diff --git a/test/probe.c b/test/probe.c
index 3c3d938..0adc03e 100644
--- a/test/probe.c
+++ b/test/probe.c
@@ -10,6 +10,35 @@
#include "liburing.h"
+static int verify_probe(struct io_uring_probe *p, int full)
+{
+ if (!full && p->ops_len) {
+ fprintf(stderr, "Got ops_len=%u\n", p->ops_len);
+ return 1;
+ }
+ if (!p->last_op) {
+ fprintf(stderr, "Got last_op=%u\n", p->last_op);
+ return 1;
+ }
+ if (!full)
+ return 0;
+ /* check a few ops that must be supported */
+ if (!(p->ops[IORING_OP_NOP].flags & IO_URING_OP_SUPPORTED)) {
+ fprintf(stderr, "NOP not supported!?\n");
+ return 1;
+ }
+ if (!(p->ops[IORING_OP_READV].flags & IO_URING_OP_SUPPORTED)) {
+ fprintf(stderr, "READV not supported!?\n");
+ return 1;
+ }
+ if (!(p->ops[IORING_OP_WRITE].flags & IO_URING_OP_SUPPORTED)) {
+ fprintf(stderr, "READV not supported!?\n");
+ return 1;
+ }
+
+ return 0;
+}
+
static int test_probe(struct io_uring *ring)
{
struct io_uring_probe *p;
@@ -21,47 +50,35 @@ static int test_probe(struct io_uring *ring)
ret = io_uring_register_probe(ring, p, 0);
if (ret == -EINVAL) {
fprintf(stdout, "Probe not supported, skipping\n");
- return 0;
+ goto out;
} else if (ret) {
fprintf(stdout, "Probe returned %d\n", ret);
- return 1;
+ goto err;
}
- if (p->ops_len) {
- fprintf(stderr, "Got ops_len=%u\n", p->ops_len);
- return 1;
- }
- if (!p->last_op) {
- fprintf(stderr, "Got last_op=%u\n", p->last_op);
- return 1;
- }
+ if (verify_probe(p, 0))
+ goto err;
/* now grab for all entries */
memset(p, 0, len);
ret = io_uring_register_probe(ring, p, 256);
if (ret == -EINVAL) {
fprintf(stdout, "Probe not supported, skipping\n");
- return 0;
+ goto err;
} else if (ret) {
fprintf(stdout, "Probe returned %d\n", ret);
- return 1;
+ goto err;
}
- /* check a few ops that must be supported */
- if (!(p->ops[IORING_OP_NOP].flags & IO_URING_OP_SUPPORTED)) {
- fprintf(stderr, "NOP not supported!?\n");
- return 1;
- }
- if (!(p->ops[IORING_OP_READV].flags & IO_URING_OP_SUPPORTED)) {
- fprintf(stderr, "READV not supported!?\n");
- return 1;
- }
- if (!(p->ops[IORING_OP_WRITE].flags & IO_URING_OP_SUPPORTED)) {
- fprintf(stderr, "READV not supported!?\n");
- return 1;
- }
+ if (verify_probe(p, 1))
+ goto err;
+out:
+ free(p);
return 0;
+err:
+ free(p);
+ return 1;
}
int main(int argc, char *argv[])