| From: Wang Yaxin <wang.yaxin@zte.com.cn> |
| Subject: taskstats: fix struct taskstats breaks backward compatibility since version 15 |
| Date: Sat, 10 May 2025 15:54:13 +0800 (CST) |
| |
| 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 | 47 +++++++++++++++++++------------ |
| 1 file changed, 29 insertions(+), 18 deletions(-) |
| |
| --- a/include/uapi/linux/taskstats.h~taskstats-fix-struct-taskstats-breaks-backward-compatibility-since-version-15 |
| +++ a/include/uapi/linux/taskstats.h |
| @@ -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; |
| }; |
| |
| |
| _ |