OSDN Git Service

io_uring: shuffle rarely used ctx fields
authorPavel Begunkov <asml.silence@gmail.com>
Sun, 16 May 2021 21:58:06 +0000 (22:58 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 14 Jun 2021 14:23:04 +0000 (08:23 -0600)
There is a bunch of scattered around ctx fields that are almost never
used, e.g. only on ring exit, plunge them to the end, better locality,
better aesthetically.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/782ff94b00355923eae757d58b1a47821b5b46d4.1621201931.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 8a5fda7..6e19fe0 100644 (file)
@@ -368,9 +368,6 @@ struct io_ring_ctx {
                unsigned                cached_cq_overflow;
                unsigned long           sq_check_overflow;
 
-               /* hashed buffered write serialization */
-               struct io_wq_hash       *hash_map;
-
                struct list_head        defer_list;
                struct list_head        timeout_list;
                struct list_head        cq_overflow_list;
@@ -387,9 +384,6 @@ struct io_ring_ctx {
 
        struct io_rings *rings;
 
-       /* Only used for accounting purposes */
-       struct mm_struct        *mm_account;
-
        const struct cred       *sq_creds;      /* cred used for __io_sq_thread() */
        struct io_sq_data       *sq_data;       /* if using sq thread polling */
 
@@ -410,14 +404,6 @@ struct io_ring_ctx {
        unsigned                nr_user_bufs;
        struct io_mapped_ubuf   **user_bufs;
 
-       struct user_struct      *user;
-
-       struct completion       ref_comp;
-
-#if defined(CONFIG_UNIX)
-       struct socket           *ring_sock;
-#endif
-
        struct xarray           io_buffers;
 
        struct xarray           personalities;
@@ -461,12 +447,24 @@ struct io_ring_ctx {
 
        struct io_restriction           restrictions;
 
-       /* exit task_work */
-       struct callback_head            *exit_task_work;
-
        /* Keep this last, we don't need it for the fast path */
-       struct work_struct              exit_work;
-       struct list_head                tctx_list;
+       struct {
+               #if defined(CONFIG_UNIX)
+                       struct socket           *ring_sock;
+               #endif
+               /* hashed buffered write serialization */
+               struct io_wq_hash               *hash_map;
+
+               /* Only used for accounting purposes */
+               struct user_struct              *user;
+               struct mm_struct                *mm_account;
+
+               /* ctx exit and cancelation */
+               struct callback_head            *exit_task_work;
+               struct work_struct              exit_work;
+               struct list_head                tctx_list;
+               struct completion               ref_comp;
+       };
 };
 
 struct io_uring_task {