diff options
author | Jens Axboe <axboe@kernel.dk> | 2020-01-30 09:17:16 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-01-30 09:19:30 -0700 |
commit | 28a8aeeb2a203613eef89e7130ee52f7d20ee8b4 (patch) | |
tree | 01222814ff6e951bf7d815c014a05b670bd2bcc0 | |
parent | b20521873724fe8c61ada344baff752999ab960e (diff) | |
download | liburing-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.c | 67 |
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[]) |