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: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/aac948ea753a8bfe1fa3b82fe45debcb54586369.1663953085.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
ec7fd2562f
commit
4781185da4
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue