summaryrefslogtreecommitdiffstats
path: root/io_uring/notif.c
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2024-04-08 00:54:55 +0100
committerJens Axboe <axboe@kernel.dk>2024-04-15 08:10:26 -0600
commit998632921d28a6d360d2a6d7ffcfbcf4f6f17fc2 (patch)
treeb7f38f146ab0f980a04cc06bd4ce584cc56798ef /io_uring/notif.c
parentbbbef3e9d2a82754bd72a86ba1352cfc17bf31a7 (diff)
downloadlinux-998632921d28a6d360d2a6d7ffcfbcf4f6f17fc2.tar.gz
linux-998632921d28a6d360d2a6d7ffcfbcf4f6f17fc2.tar.bz2
linux-998632921d28a6d360d2a6d7ffcfbcf4f6f17fc2.zip
io_uring/net: merge ubuf sendzc callbacks
Splitting io_tx_ubuf_callback_ext from io_tx_ubuf_callback is a pre mature optimisation that doesn't give us much. Merge the functions into one and reclaim some simplicity back. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/d44d68f6f7add33a0dcf0b7fd7b73c2dc543604f.1712534031.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/notif.c')
-rw-r--r--io_uring/notif.c26
1 files changed, 8 insertions, 18 deletions
diff --git a/io_uring/notif.c b/io_uring/notif.c
index d3e703c37aba..47ff2da8c421 100644
--- a/io_uring/notif.c
+++ b/io_uring/notif.c
@@ -30,36 +30,24 @@ static void io_tx_ubuf_callback(struct sk_buff *skb, struct ubuf_info *uarg,
struct io_notif_data *nd = container_of(uarg, struct io_notif_data, uarg);
struct io_kiocb *notif = cmd_to_io_kiocb(nd);
- if (refcount_dec_and_test(&uarg->refcnt))
- __io_req_task_work_add(notif, IOU_F_TWQ_LAZY_WAKE);
-}
-
-static void io_tx_ubuf_callback_ext(struct sk_buff *skb, struct ubuf_info *uarg,
- bool success)
-{
- struct io_notif_data *nd = container_of(uarg, struct io_notif_data, uarg);
-
if (nd->zc_report) {
if (success && !nd->zc_used && skb)
WRITE_ONCE(nd->zc_used, true);
else if (!success && !nd->zc_copied)
WRITE_ONCE(nd->zc_copied, true);
}
- io_tx_ubuf_callback(skb, uarg, success);
+
+ if (refcount_dec_and_test(&uarg->refcnt))
+ __io_req_task_work_add(notif, IOU_F_TWQ_LAZY_WAKE);
}
void io_notif_set_extended(struct io_kiocb *notif)
{
struct io_notif_data *nd = io_notif_to_data(notif);
- if (nd->uarg.callback != io_tx_ubuf_callback_ext) {
- nd->account_pages = 0;
- nd->zc_report = false;
- nd->zc_used = false;
- nd->zc_copied = false;
- nd->uarg.callback = io_tx_ubuf_callback_ext;
- notif->io_task_work.func = io_notif_complete_tw_ext;
- }
+ nd->zc_used = false;
+ nd->zc_copied = false;
+ notif->io_task_work.func = io_notif_complete_tw_ext;
}
struct io_kiocb *io_alloc_notif(struct io_ring_ctx *ctx)
@@ -79,6 +67,8 @@ struct io_kiocb *io_alloc_notif(struct io_ring_ctx *ctx)
notif->io_task_work.func = io_req_task_complete;
nd = io_notif_to_data(notif);
+ nd->zc_report = false;
+ nd->account_pages = 0;
nd->uarg.flags = IO_NOTIF_UBUF_FLAGS;
nd->uarg.callback = io_tx_ubuf_callback;
refcount_set(&nd->uarg.refcnt, 1);