mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH linux next] taskstats: fix struct taskstats breaks backward  compatibility since version 15
@ 2025-05-10  7:54 jiang.kun2
  2025-05-13  1:08 ` Andrew Morton
  2025-05-14  1:57 ` yang.yang29
  0 siblings, 2 replies; 3+ messages in thread
From: jiang.kun2 @ 2025-05-10  7:54 UTC (permalink / raw)
  To: bbonev, linux-kernel
  Cc: bsingharora, yang.yang29, wang.yaxin, jiang.kun2, xu.xin16, akpm

From: Wang Yaxin <wang.yaxin@zte.com.cn>

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

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>
---
 include/uapi/linux/taskstats.h | 43 +++++++++++++++++++++-------------
 1 file changed, 27 insertions(+), 16 deletions(-)
diff --git a/include/uapi/linux/taskstats.h b/include/uapi/linux/taskstats.h
index 95762232e018..d71aa022b2ef 100644
--- a/include/uapi/linux/taskstats.h
+++ b/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;
+
+	/* 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;
-	/* v15: add Delay max */
 };


-- 
2.25.1

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH linux next] taskstats: fix struct taskstats breaks backward  compatibility since version 15
  2025-05-10  7:54 [PATCH linux next] taskstats: fix struct taskstats breaks backward compatibility since version 15 jiang.kun2
@ 2025-05-13  1:08 ` Andrew Morton
  2025-05-14  1:57 ` yang.yang29
  1 sibling, 0 replies; 3+ messages in thread
From: Andrew Morton @ 2025-05-13  1:08 UTC (permalink / raw)
  To: jiang.kun2
  Cc: bbonev, linux-kernel, bsingharora, yang.yang29, wang.yaxin, xu.xin16

On Sat, 10 May 2025 15:54:13 +0800 (CST) <jiang.kun2@zte.com.cn> wrote:

> 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

Ah, there it it, thanks.

I'll add cc:stable to request a backport.  I'll also add

Fixes: 658eb5ab916d ("delayacct: add delay max to record delay peak")
Fixes: f65c64f311ee ("delayacct: add delay min to record delay peak")

which is odd, but gets the point across.  

The patch won't exactly apply to those kernels because the version
increment came later.  But I think that will be OK - the patch is
applicable to the v6.14 kernel.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH linux next] taskstats: fix struct taskstats breaks backward  compatibility since version 15
  2025-05-10  7:54 [PATCH linux next] taskstats: fix struct taskstats breaks backward compatibility since version 15 jiang.kun2
  2025-05-13  1:08 ` Andrew Morton
@ 2025-05-14  1:57 ` yang.yang29
  1 sibling, 0 replies; 3+ messages in thread
From: yang.yang29 @ 2025-05-14  1:57 UTC (permalink / raw)
  To: jiang.kun2, wang.yaxin
  Cc: bbonev, linux-kernel, bsingharora, jiang.kun2, xu.xin16, akpm


[-- Attachment #1.1.1: Type: text/plain, Size: 582 bytes --]

> Solution> =========> move delay max and delay min to the end of taskstat, and bump> the version to 16 after the change
Please notice Documentation/accounting/taskstats.rst, it said:
Adding more fields to the end of the existing struct taskstats.

> + __u64 wpcopy_delay_max;> + __u64 wpcopy_delay_min;
There seems to have a whitespace problems, else LGTM.
Reviewed-by: Yang Yang <yang.yang29@zte.com.cn>

Another thing to make it better (maybe next patch): struct taskstats
had comments to explain xxx_count and xxx_delay_total, we should
also explain xxx_delay_min/max.

[-- Attachment #1.1.2: Type: text/html , Size: 2572 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-05-14  1:57 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-10  7:54 [PATCH linux next] taskstats: fix struct taskstats breaks backward compatibility since version 15 jiang.kun2
2025-05-13  1:08 ` Andrew Morton
2025-05-14  1:57 ` yang.yang29

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®