]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
aio: give shared kioctx fields their own cachelines
authorKent Overstreet <koverstreet@google.com>
Wed, 20 Mar 2013 04:08:58 +0000 (15:08 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Thu, 21 Mar 2013 05:34:40 +0000 (16:34 +1100)
[akpm@linux-foundation.org: make reqs_active __cacheline_aligned_in_smp]
Signed-off-by: Kent Overstreet <koverstreet@google.com>
Cc: Zach Brown <zab@redhat.com>
Cc: Felipe Balbi <balbi@ti.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <jlbec@evilplan.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Asai Thambi S P <asamymuthupa@micron.com>
Cc: Selvan Mani <smani@micron.com>
Cc: Sam Bradshaw <sbradshaw@micron.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Benjamin LaHaise <bcrl@kvack.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/aio.c

index 9fb145e277134a5515fd5f4c97aa9c3cf8cd5e13..6b148c948a43ad0cd10adcf9b74ecfef90e5f0a6 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -67,13 +67,6 @@ struct kioctx {
        unsigned long           user_id;
        struct hlist_node       list;
 
-       wait_queue_head_t       wait;
-
-       spinlock_t              ctx_lock;
-
-       atomic_t                reqs_active;
-       struct list_head        active_reqs;    /* used for cancellation */
-
        unsigned                nr;
 
        /* sys_io_setup currently limits this to an unsigned int */
@@ -85,19 +78,29 @@ struct kioctx {
        struct page             **ring_pages;
        long                    nr_pages;
 
+       struct rcu_head         rcu_head;
+       struct work_struct      rcu_work;
+
+       struct {
+               atomic_t        reqs_active;
+       } ____cacheline_aligned_in_smp;
+
+       struct {
+               spinlock_t      ctx_lock;
+               struct list_head active_reqs;   /* used for cancellation */
+       } ____cacheline_aligned_in_smp;
+
        struct {
                struct mutex    ring_lock;
-       } ____cacheline_aligned;
+               wait_queue_head_t wait;
+       } ____cacheline_aligned_in_smp;
 
        struct {
                unsigned        tail;
                spinlock_t      completion_lock;
-       } ____cacheline_aligned;
+       } ____cacheline_aligned_in_smp;
 
        struct page             *internal_pages[AIO_RING_PAGES];
-
-       struct rcu_head         rcu_head;
-       struct work_struct      rcu_work;
 };
 
 /*------ sysctl variables----*/