The 'struct task_delay_info' definition does not have to be in sched.h,
because task_struct only has a pointer to it.

So move it to <linux/delayacct.h> to reduce the size of <linux/sched.h>.

As an additional improvement make the type defined but empty in the
!CONFIG_TASK_DELAY_ACCT case - to eliminate the ugly #ifdef
around the task_struct field as well.

Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Mike Galbraith <efa...@gmx.de>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: Linus Torvalds <torva...@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mi...@kernel.org>
---
 include/linux/delayacct.h | 38 ++++++++++++++++++++++++++++++++++++--
 include/linux/sched.h     | 37 ++-----------------------------------
 2 files changed, 38 insertions(+), 37 deletions(-)

diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h
index 00e60f79a9cc..a2192de5d428 100644
--- a/include/linux/delayacct.h
+++ b/include/linux/delayacct.h
@@ -18,8 +18,6 @@
 #define _LINUX_DELAYACCT_H
 
 #include <uapi/linux/taskstats.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
 
 /*
  * Per-task flags relevant to delay accounting
@@ -29,8 +27,44 @@
 #define DELAYACCT_PF_SWAPIN    0x00000001      /* I am doing a swapin */
 #define DELAYACCT_PF_BLKIO     0x00000002      /* I am waiting on IO */
 
+struct task_delay_info {
 #ifdef CONFIG_TASK_DELAY_ACCT
+       spinlock_t      lock;
+       unsigned int    flags;  /* Private per-task flags */
+
+       /* For each stat XXX, add following, aligned appropriately
+        *
+        * struct timespec XXX_start, XXX_end;
+        * u64 XXX_delay;
+        * u32 XXX_count;
+        *
+        * Atomicity of updates to XXX_delay, XXX_count protected by
+        * single lock above (split into XXX_lock if contention is an issue).
+        */
+
+       /*
+        * XXX_count is incremented on every XXX operation, the delay
+        * associated with the operation is added to XXX_delay.
+        * XXX_delay contains the accumulated delay time in nanoseconds.
+        */
+       u64 blkio_start;        /* Shared by blkio, swapin */
+       u64 blkio_delay;        /* wait for sync block io completion */
+       u64 swapin_delay;       /* wait for swapin block io completion */
+       u32 blkio_count;        /* total count of the number of sync block */
+                               /* io operations performed */
+       u32 swapin_count;       /* total count of the number of swapin block */
+                               /* io operations performed */
+
+       u64 freepages_start;
+       u64 freepages_delay;    /* wait for memory reclaim */
+       u32 freepages_count;    /* total count of memory reclaim */
+#endif
+};
 
+#include <linux/sched.h>
+#include <linux/slab.h>
+
+#ifdef CONFIG_TASK_DELAY_ACCT
 extern int delayacct_on;       /* Delay accounting turned on/off */
 extern struct kmem_cache *delayacct_cache;
 extern void delayacct_init(void);
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 4b49d159f4d5..15971b1e3f57 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -901,39 +901,7 @@ struct sched_info {
 };
 #endif /* CONFIG_SCHED_INFO */
 
-#ifdef CONFIG_TASK_DELAY_ACCT
-struct task_delay_info {
-       spinlock_t      lock;
-       unsigned int    flags;  /* Private per-task flags */
-
-       /* For each stat XXX, add following, aligned appropriately
-        *
-        * struct timespec XXX_start, XXX_end;
-        * u64 XXX_delay;
-        * u32 XXX_count;
-        *
-        * Atomicity of updates to XXX_delay, XXX_count protected by
-        * single lock above (split into XXX_lock if contention is an issue).
-        */
-
-       /*
-        * XXX_count is incremented on every XXX operation, the delay
-        * associated with the operation is added to XXX_delay.
-        * XXX_delay contains the accumulated delay time in nanoseconds.
-        */
-       u64 blkio_start;        /* Shared by blkio, swapin */
-       u64 blkio_delay;        /* wait for sync block io completion */
-       u64 swapin_delay;       /* wait for swapin block io completion */
-       u32 blkio_count;        /* total count of the number of sync block */
-                               /* io operations performed */
-       u32 swapin_count;       /* total count of the number of swapin block */
-                               /* io operations performed */
-
-       u64 freepages_start;
-       u64 freepages_delay;    /* wait for memory reclaim */
-       u32 freepages_count;    /* total count of memory reclaim */
-};
-#endif /* CONFIG_TASK_DELAY_ACCT */
+struct task_delay_info;
 
 static inline int sched_info_on(void)
 {
@@ -1615,9 +1583,8 @@ struct task_struct {
 
        struct page_frag task_frag;
 
-#ifdef CONFIG_TASK_DELAY_ACCT
        struct task_delay_info *delays;
-#endif
+
 #ifdef CONFIG_FAULT_INJECTION
        int make_it_fail;
 #endif
-- 
2.7.4

Reply via email to