When a hotplug event happens or when update_cpumasks_hier() is called, an
invalid partition may be converted back to valid. However check against
housekeeping conflict isn't being done which can lead to a partition
state that violates the housekeeping rules. Update the code to allow
reviving an invalid partition only if it can pass the housekeeping check.

Fixes: 4a74e418881f ("cgroup/cpuset: Check partition conflict with housekeeping 
setup")
Signed-off-by: Waiman Long <[email protected]>
---
 kernel/cgroup/cpuset.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index ce32e7a31c72..77cf6e8db0f6 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -1953,9 +1953,16 @@ static int update_parent_effective_cpumask(struct cpuset 
*cs, int cmd,
                        bool exclusive = true;
 
                        /*
-                        * Convert invalid partition to valid has to
-                        * pass the cpu exclusivity test.
+                        * Convert invalid partition to valid has to pass the
+                        * cpu exclusivity test as well as the housekeeping
+                        * check.
                         */
+                       if 
(prstate_housekeeping_conflict(-cs->partition_root_state,
+                                                         
parent->partition_root_state,
+                                                         xcpus, NULL)) {
+                               part_error = PERR_HKEEPING;
+                               goto write_error;
+                       }
                        rcu_read_lock();
                        cpuset_for_each_child(child, css, parent) {
                                if (child == cs)
-- 
2.55.0


Reply via email to