Commit 4781185d authored by Pavel Begunkov's avatar Pavel Begunkov Committed by Jens Axboe

selftest/net: adjust io_uring sendzc notif handling

It's not currently possible but in the future we may get
IORING_CQE_F_MORE and so a notification even for a failed request, i.e.
when cqe->res <= 0. That's precisely what the documentation says, so
adjust the test and do IORING_CQE_F_MORE checks regardless of the main
completion cqe->res.
Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/aac948ea753a8bfe1fa3b82fe45debcb54586369.1663953085.git.asml.silence@gmail.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ec7fd256
...@@ -400,7 +400,6 @@ static void do_tx(int domain, int type, int protocol) ...@@ -400,7 +400,6 @@ static void do_tx(int domain, int type, int protocol)
cfg_payload_len, msg_flags); cfg_payload_len, msg_flags);
sqe->user_data = NONZC_TAG; sqe->user_data = NONZC_TAG;
} else { } else {
compl_cqes++;
io_uring_prep_sendzc(sqe, fd, payload, io_uring_prep_sendzc(sqe, fd, payload,
cfg_payload_len, cfg_payload_len,
msg_flags, zc_flags); msg_flags, zc_flags);
...@@ -430,18 +429,23 @@ static void do_tx(int domain, int type, int protocol) ...@@ -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_NOTIF) {
if (cqe->flags & IORING_CQE_F_MORE) if (cqe->flags & IORING_CQE_F_MORE)
error(1, -EINVAL, "invalid notif flags"); error(1, -EINVAL, "invalid notif flags");
if (compl_cqes <= 0)
error(1, -EINVAL, "notification mismatch");
compl_cqes--; compl_cqes--;
i--; i--;
} else if (cqe->res <= 0) { io_uring_cqe_seen(&ring);
if (cqe->flags & IORING_CQE_F_MORE) continue;
error(1, cqe->res, "more with a failed send"); }
error(1, cqe->res, "send failed"); if (cqe->flags & IORING_CQE_F_MORE) {
} else { if (cqe->user_data != ZC_TAG)
if (cqe->user_data == ZC_TAG && error(1, cqe->res, "unexpected F_MORE");
!(cqe->flags & IORING_CQE_F_MORE)) compl_cqes++;
error(1, cqe->res, "missing more flag"); }
if (cqe->res >= 0) {
packets++; packets++;
bytes += cqe->res; bytes += cqe->res;
} else if (cqe->res != -EAGAIN) {
error(1, cqe->res, "send failed");
} }
io_uring_cqe_seen(&ring); io_uring_cqe_seen(&ring);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment