diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/testing/selftests/net/io_uring_zerocopy_tx.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/tools/testing/selftests/net/io_uring_zerocopy_tx.c b/tools/testing/selftests/net/io_uring_zerocopy_tx.c index 8ce48aca8321..154287740172 100644 --- a/tools/testing/selftests/net/io_uring_zerocopy_tx.c +++ b/tools/testing/selftests/net/io_uring_zerocopy_tx.c @@ -400,7 +400,6 @@ static void do_tx(int domain, int type, int protocol) cfg_payload_len, msg_flags); sqe->user_data = NONZC_TAG; } else { - compl_cqes++; io_uring_prep_sendzc(sqe, fd, payload, cfg_payload_len, msg_flags, zc_flags); @@ -430,18 +429,23 @@ static void do_tx(int domain, int type, int protocol) if (cqe->flags & IORING_CQE_F_NOTIF) { if (cqe->flags & IORING_CQE_F_MORE) error(1, -EINVAL, "invalid notif flags"); + if (compl_cqes <= 0) + error(1, -EINVAL, "notification mismatch"); compl_cqes--; i--; - } else if (cqe->res <= 0) { - if (cqe->flags & IORING_CQE_F_MORE) - error(1, cqe->res, "more with a failed send"); - error(1, cqe->res, "send failed"); - } else { - if (cqe->user_data == ZC_TAG && - !(cqe->flags & IORING_CQE_F_MORE)) - error(1, cqe->res, "missing more flag"); + io_uring_cqe_seen(&ring); + continue; + } + if (cqe->flags & IORING_CQE_F_MORE) { + if (cqe->user_data != ZC_TAG) + error(1, cqe->res, "unexpected F_MORE"); + compl_cqes++; + } + if (cqe->res >= 0) { packets++; bytes += cqe->res; + } else if (cqe->res != -EAGAIN) { + error(1, cqe->res, "send failed"); } io_uring_cqe_seen(&ring); } |