taskstats: fix struct taskstats breaks backward compatibility since version 15
authorWang Yaxin <wang.yaxin@zte.com.cn>
Sat, 10 May 2025 07:54:13 +0000 (15:54 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 21 May 2025 05:49:39 +0000 (22:49 -0700)
Problem
========
commit 658eb5ab916d ("delayacct: add delay max to record delay peak")
  - adding more fields
commit f65c64f311ee ("delayacct: add delay min to record delay peak")
  - adding more fields
commit b016d0873777 ("taskstats: modify taskstats version")
 - version bump to 15

Since version 15 (TASKSTATS_VERSION=15) the new layout of the structure
adds fields in the middle of the structure, rendering all old software
incompatible with newer kernels and software compiled against the new
kernel headers incompatible with older kernels.

Solution
=========
move delay max and delay min to the end of taskstat, and bump
the version to 16 after the change

[wang.yaxin@zte.com.cn: adjust indentation]
Link: https://lkml.kernel.org/r/202505192131489882NSciXV4EGd8zzjLuwoOK@zte.com.cn
Link: https://lkml.kernel.org/r/20250510155413259V4JNRXxukdDgzsaL0Fo6a@zte.com.cn
Fixes: f65c64f311ee ("delayacct: add delay min to record delay peak")
Signed-off-by: Wang Yaxin <wang.yaxin@zte.com.cn>
Signed-off-by: xu xin <xu.xin16@zte.com.cn>
Signed-off-by: Kun Jiang <jiang.kun2@zte.com.cn>
Reviewed-by: Yang Yang <yang.yang29@zte.com.cn>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/uapi/linux/taskstats.h

index 95762232e01863962e6864ab4fc0cec53bf923ad..5929030d4e8b06fd666431fac6e0e121e52ed0a6 100644 (file)
@@ -34,7 +34,7 @@
  */
 
 
-#define TASKSTATS_VERSION      15
+#define TASKSTATS_VERSION      16
 #define TS_COMM_LEN            32      /* should be >= TASK_COMM_LEN
                                         * in linux/sched.h */
 
@@ -72,8 +72,6 @@ struct taskstats {
         */
        __u64   cpu_count __attribute__((aligned(8)));
        __u64   cpu_delay_total;
-       __u64   cpu_delay_max;
-       __u64   cpu_delay_min;
 
        /* Following four fields atomically updated using task->delays->lock */
 
@@ -82,14 +80,10 @@ struct taskstats {
         */
        __u64   blkio_count;
        __u64   blkio_delay_total;
-       __u64   blkio_delay_max;
-       __u64   blkio_delay_min;
 
        /* Delay waiting for page fault I/O (swap in only) */
        __u64   swapin_count;
        __u64   swapin_delay_total;
-       __u64   swapin_delay_max;
-       __u64   swapin_delay_min;
 
        /* cpu "wall-clock" running time
         * On some architectures, value will adjust for cpu time stolen
@@ -172,14 +166,11 @@ struct taskstats {
        /* Delay waiting for memory reclaim */
        __u64   freepages_count;
        __u64   freepages_delay_total;
-       __u64   freepages_delay_max;
-       __u64   freepages_delay_min;
+
 
        /* Delay waiting for thrashing page */
        __u64   thrashing_count;
        __u64   thrashing_delay_total;
-       __u64   thrashing_delay_max;
-       __u64   thrashing_delay_min;
 
        /* v10: 64-bit btime to avoid overflow */
        __u64   ac_btime64;             /* 64-bit begin time */
@@ -187,8 +178,6 @@ struct taskstats {
        /* v11: Delay waiting for memory compact */
        __u64   compact_count;
        __u64   compact_delay_total;
-       __u64   compact_delay_max;
-       __u64   compact_delay_min;
 
        /* v12 begin */
        __u32   ac_tgid;        /* thread group ID */
@@ -210,15 +199,37 @@ struct taskstats {
        /* v13: Delay waiting for write-protect copy */
        __u64    wpcopy_count;
        __u64    wpcopy_delay_total;
-       __u64    wpcopy_delay_max;
-       __u64    wpcopy_delay_min;
 
        /* v14: Delay waiting for IRQ/SOFTIRQ */
        __u64    irq_count;
        __u64    irq_delay_total;
-       __u64    irq_delay_max;
-       __u64    irq_delay_min;
-       /* v15: add Delay max */
+
+       /* v15: add Delay max and Delay min */
+
+       /* v16: move Delay max and Delay min to the end of taskstat */
+       __u64   cpu_delay_max;
+       __u64   cpu_delay_min;
+
+       __u64   blkio_delay_max;
+       __u64   blkio_delay_min;
+
+       __u64   swapin_delay_max;
+       __u64   swapin_delay_min;
+
+       __u64   freepages_delay_max;
+       __u64   freepages_delay_min;
+
+       __u64   thrashing_delay_max;
+       __u64   thrashing_delay_min;
+
+       __u64   compact_delay_max;
+       __u64   compact_delay_min;
+
+       __u64   wpcopy_delay_max;
+       __u64   wpcopy_delay_min;
+
+       __u64   irq_delay_max;
+       __u64   irq_delay_min;
 };