mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 08:42:10 +00:00
io_uring/net: Allocate msghdr async data through helper
This abstracts away the cache details. Signed-off-by: Gabriel Krisman Bertazi <krisman@suse.de> Link: https://lore.kernel.org/r/20241216204615.759089-7-krisman@suse.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
02b3c515d0
commit
23d91035ca
@ -155,30 +155,31 @@ static void io_netmsg_recycle(struct io_kiocb *req, unsigned int issue_flags)
|
||||
}
|
||||
}
|
||||
|
||||
static void io_msg_async_data_init(void *obj)
|
||||
{
|
||||
struct io_async_msghdr *hdr = (struct io_async_msghdr *)obj;
|
||||
|
||||
hdr->free_iov = NULL;
|
||||
hdr->free_iov_nr = 0;
|
||||
}
|
||||
|
||||
static struct io_async_msghdr *io_msg_alloc_async(struct io_kiocb *req)
|
||||
{
|
||||
struct io_ring_ctx *ctx = req->ctx;
|
||||
struct io_async_msghdr *hdr;
|
||||
|
||||
hdr = io_alloc_cache_get(&ctx->netmsg_cache);
|
||||
if (hdr) {
|
||||
if (hdr->free_iov) {
|
||||
kasan_mempool_unpoison_object(hdr->free_iov,
|
||||
hdr->free_iov_nr * sizeof(struct iovec));
|
||||
req->flags |= REQ_F_NEED_CLEANUP;
|
||||
}
|
||||
req->flags |= REQ_F_ASYNC_DATA;
|
||||
req->async_data = hdr;
|
||||
return hdr;
|
||||
}
|
||||
hdr = io_uring_alloc_async_data(&ctx->netmsg_cache, req,
|
||||
io_msg_async_data_init);
|
||||
if (!hdr)
|
||||
return NULL;
|
||||
|
||||
if (!io_alloc_async_data(req)) {
|
||||
hdr = req->async_data;
|
||||
hdr->free_iov_nr = 0;
|
||||
hdr->free_iov = NULL;
|
||||
return hdr;
|
||||
/* If the async data was cached, we might have an iov cached inside. */
|
||||
if (hdr->free_iov) {
|
||||
kasan_mempool_unpoison_object(hdr->free_iov,
|
||||
hdr->free_iov_nr * sizeof(struct iovec));
|
||||
req->flags |= REQ_F_NEED_CLEANUP;
|
||||
}
|
||||
return NULL;
|
||||
return hdr;
|
||||
}
|
||||
|
||||
/* assign new iovec to kmsg, if we need to */
|
||||
|
Loading…
Reference in New Issue
Block a user