diff options
author | Pavel Begunkov <asml.silence@gmail.com> | 2022-09-01 11:54:04 +0100 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2022-09-01 09:13:33 -0600 |
commit | b48c312be05e83b55a4d58bf61f80b4a3288fb7e (patch) | |
tree | bb07d8c2abc0d8c225d3050fb48e3a3689a120a3 /io_uring/net.h | |
parent | 57f332246afa5929bdf2e7a5facddedb43549be4 (diff) | |
download | linux-stable-b48c312be05e83b55a4d58bf61f80b4a3288fb7e.tar.gz linux-stable-b48c312be05e83b55a4d58bf61f80b4a3288fb7e.tar.bz2 linux-stable-b48c312be05e83b55a4d58bf61f80b4a3288fb7e.zip |
io_uring/net: simplify zerocopy send user API
Following user feedback, this patch simplifies zerocopy send API. One of
the main complaints is that the current API is difficult with the
userspace managing notification slots, and then send retries with error
handling make it even worse.
Instead of keeping notification slots change it to the per-request
notifications model, which posts both completion and notification CQEs
for each request when any data has been sent, and only one CQE if it
fails. All notification CQEs will have IORING_CQE_F_NOTIF set and
IORING_CQE_F_MORE in completion CQEs indicates whether to wait a
notification or not.
IOSQE_CQE_SKIP_SUCCESS is disallowed with zerocopy sends for now.
This is less flexible, but greatly simplifies the user API and also the
kernel implementation. We reuse notif helpers in this patch, but in the
future there won't be need for keeping two requests.
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/95287640ab98fc9417370afb16e310677c63e6ce.1662027856.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/net.h')
-rw-r--r-- | io_uring/net.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/io_uring/net.h b/io_uring/net.h index f91f56c6eeac..d744a0a874e7 100644 --- a/io_uring/net.h +++ b/io_uring/net.h @@ -55,6 +55,7 @@ int io_connect(struct io_kiocb *req, unsigned int issue_flags); int io_sendzc(struct io_kiocb *req, unsigned int issue_flags); int io_sendzc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); +void io_sendzc_cleanup(struct io_kiocb *req); void io_netmsg_cache_free(struct io_cache_entry *entry); #else |