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>
This commit is contained in:
Pavel Begunkov 2024-04-08 00:54:55 +01:00 committed by Jens Axboe
parent bbbef3e9d2
commit 998632921d

View File

@ -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_notif_data *nd = container_of(uarg, struct io_notif_data, uarg);
struct io_kiocb *notif = cmd_to_io_kiocb(nd); 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 (nd->zc_report) {
if (success && !nd->zc_used && skb) if (success && !nd->zc_used && skb)
WRITE_ONCE(nd->zc_used, true); WRITE_ONCE(nd->zc_used, true);
else if (!success && !nd->zc_copied) else if (!success && !nd->zc_copied)
WRITE_ONCE(nd->zc_copied, true); 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) void io_notif_set_extended(struct io_kiocb *notif)
{ {
struct io_notif_data *nd = io_notif_to_data(notif); struct io_notif_data *nd = io_notif_to_data(notif);
if (nd->uarg.callback != io_tx_ubuf_callback_ext) { nd->zc_used = false;
nd->account_pages = 0; nd->zc_copied = false;
nd->zc_report = false; notif->io_task_work.func = io_notif_complete_tw_ext;
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;
}
} }
struct io_kiocb *io_alloc_notif(struct io_ring_ctx *ctx) 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; notif->io_task_work.func = io_req_task_complete;
nd = io_notif_to_data(notif); nd = io_notif_to_data(notif);
nd->zc_report = false;
nd->account_pages = 0;
nd->uarg.flags = IO_NOTIF_UBUF_FLAGS; nd->uarg.flags = IO_NOTIF_UBUF_FLAGS;
nd->uarg.callback = io_tx_ubuf_callback; nd->uarg.callback = io_tx_ubuf_callback;
refcount_set(&nd->uarg.refcnt, 1); refcount_set(&nd->uarg.refcnt, 1);