|
Michal Koutný |
674875 |
From: Michal Koutný <mkoutny@suse.com>
|
|
Michal Koutný |
674875 |
Date: Thu, 21 Jul 2022 19:09:50 +0200
|
|
Michal Koutný |
674875 |
Subject: KABI: cgroup: Restore KABI of css_set
|
|
Michal Koutný |
674875 |
Patch-mainline: Never, SLES KABI fix
|
|
Michal Koutný |
674875 |
References: bsc#1201610
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
This is precautionary KABI fix. No sane module should look into the layout of
|
|
Michal Koutný |
674875 |
struct css_set.
|
|
Michal Koutný |
674875 |
No exported symbol relies on the struct css_set layout, the structure is
|
|
Michal Koutný |
674875 |
reachable only indirectly via (several) pointers.
|
|
Michal Koutný |
674875 |
It is allocated/freed by our kernel code only.
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
The only possible issue would be inlined functions that dereference structure's
|
|
Michal Koutný |
674875 |
members (task_css_is_root, task_dfl_cgroup). The upstream patch inserts a new
|
|
Michal Koutný |
674875 |
member in the middle, however, after members used by these inlined functions.
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
For strict KABI compatibility (this KABI patch could be unnecessary with the
|
|
Michal Koutný |
674875 |
reasoning above), move the new members to the end:
|
|
Michal Koutný |
674875 |
a) to keep the layout backwards compatible,
|
|
Michal Koutný |
674875 |
b) keep the old mg_preload_node in the middle as a dummy.
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
---
|
|
Michal Koutný |
674875 |
include/linux/cgroup-defs.h | 8 ++++++--
|
|
Michal Koutný |
674875 |
kernel/cgroup/cgroup.c | 6 ++++--
|
|
Michal Koutný |
674875 |
2 files changed, 10 insertions(+), 4 deletions(-)
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
--- a/include/linux/cgroup-defs.h
|
|
Michal Koutný |
674875 |
+++ b/include/linux/cgroup-defs.h
|
|
Michal Koutný |
674875 |
@@ -203,9 +203,9 @@ struct css_set {
|
|
Michal Koutný |
674875 |
/*
|
|
Michal Koutný |
674875 |
* List of csets participating in the on-going migration either as
|
|
Michal Koutný |
674875 |
* source or destination. Protected by cgroup_mutex.
|
|
Michal Koutný |
674875 |
+ * mg_preload_node is unused (kept for KABI, see real nodes at the end)
|
|
Michal Koutný |
674875 |
*/
|
|
Michal Koutný |
674875 |
- struct list_head mg_src_preload_node;
|
|
Michal Koutný |
674875 |
- struct list_head mg_dst_preload_node;
|
|
Michal Koutný |
674875 |
+ struct list_head mg_preload_node;
|
|
Michal Koutný |
674875 |
struct list_head mg_node;
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
/*
|
|
Michal Koutný |
674875 |
@@ -224,6 +224,10 @@ struct css_set {
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
/* For RCU-protected deletion */
|
|
Michal Koutný |
674875 |
struct rcu_head rcu_head;
|
|
Michal Koutný |
674875 |
+#ifndef __GENKSYMS__
|
|
Michal Koutný |
674875 |
+ struct list_head mg_src_preload_node;
|
|
Michal Koutný |
674875 |
+ struct list_head mg_dst_preload_node;
|
|
Michal Koutný |
674875 |
+#endif
|
|
Michal Koutný |
674875 |
};
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
struct cgroup {
|
|
Michal Koutný |
674875 |
--- a/kernel/cgroup/cgroup.c
|
|
Michal Koutný |
674875 |
+++ b/kernel/cgroup/cgroup.c
|
|
Michal Koutný |
674875 |
@@ -545,9 +545,10 @@ struct css_set init_css_set = {
|
|
Michal Koutný |
674875 |
.mg_tasks = LIST_HEAD_INIT(init_css_set.mg_tasks),
|
|
Michal Koutný |
674875 |
.task_iters = LIST_HEAD_INIT(init_css_set.task_iters),
|
|
Michal Koutný |
674875 |
.cgrp_links = LIST_HEAD_INIT(init_css_set.cgrp_links),
|
|
Michal Koutný |
674875 |
+ .mg_preload_node = LIST_HEAD_INIT(init_css_set.mg_preload_node),
|
|
Michal Koutný |
674875 |
+ .mg_node = LIST_HEAD_INIT(init_css_set.mg_node),
|
|
Michal Koutný |
674875 |
.mg_src_preload_node = LIST_HEAD_INIT(init_css_set.mg_src_preload_node),
|
|
Michal Koutný |
674875 |
.mg_dst_preload_node = LIST_HEAD_INIT(init_css_set.mg_dst_preload_node),
|
|
Michal Koutný |
674875 |
- .mg_node = LIST_HEAD_INIT(init_css_set.mg_node),
|
|
Michal Koutný |
674875 |
};
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
static int css_set_count = 1; /* 1 for init_css_set */
|
|
Michal Koutný |
674875 |
@@ -970,9 +971,10 @@ static struct css_set *find_css_set(stru
|
|
Michal Koutný |
674875 |
INIT_LIST_HEAD(&cset->task_iters);
|
|
Michal Koutný |
674875 |
INIT_HLIST_NODE(&cset->hlist);
|
|
Michal Koutný |
674875 |
INIT_LIST_HEAD(&cset->cgrp_links);
|
|
Michal Koutný |
674875 |
+ INIT_LIST_HEAD(&cset->mg_preload_node);
|
|
Michal Koutný |
674875 |
+ INIT_LIST_HEAD(&cset->mg_node);
|
|
Michal Koutný |
674875 |
INIT_LIST_HEAD(&cset->mg_src_preload_node);
|
|
Michal Koutný |
674875 |
INIT_LIST_HEAD(&cset->mg_dst_preload_node);
|
|
Michal Koutný |
674875 |
- INIT_LIST_HEAD(&cset->mg_node);
|
|
Michal Koutný |
674875 |
|
|
Michal Koutný |
674875 |
/* Copy the set of subsystem state objects generated in
|
|
Michal Koutný |
674875 |
* find_existing_css_set() */
|