io_uring: Add generic helper to allocate async data
authorGabriel Krisman Bertazi <krisman@suse.de>
Mon, 16 Dec 2024 20:46:08 +0000 (15:46 -0500)
committerJens Axboe <axboe@kernel.dk>
Fri, 27 Dec 2024 17:07:05 +0000 (10:07 -0700)
This helper replaces io_alloc_async_data by using the folded allocation.
Do it in a header to allow the compiler to decide whether to inline.

Signed-off-by: Gabriel Krisman Bertazi <krisman@suse.de>
Link: https://lore.kernel.org/r/20241216204615.759089-3-krisman@suse.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.h

index 12abee607e4aa245257e0b70ded3642341c87d4a..e43e9194dd0ad1873f00f4cf1a9f8a099eed27af 100644 (file)
@@ -8,6 +8,7 @@
 #include <linux/poll.h>
 #include <linux/io_uring_types.h>
 #include <uapi/linux/eventpoll.h>
+#include "alloc_cache.h"
 #include "io-wq.h"
 #include "slist.h"
 #include "filetable.h"
@@ -222,6 +223,16 @@ static inline void io_req_set_res(struct io_kiocb *req, s32 res, u32 cflags)
        req->cqe.flags = cflags;
 }
 
+static inline void *io_uring_alloc_async_data(struct io_alloc_cache *cache,
+                                             struct io_kiocb *req,
+                                             void (*init_once)(void *obj))
+{
+       req->async_data = io_cache_alloc(cache, GFP_KERNEL, init_once);
+       if (req->async_data)
+               req->flags |= REQ_F_ASYNC_DATA;
+       return req->async_data;
+}
+
 static inline bool req_has_async_data(struct io_kiocb *req)
 {
        return req->flags & REQ_F_ASYNC_DATA;