On Sun, Dec 05, 2021 at 01:32:16PM -0500, Waiman Long <longman@xxxxxxxxxx> wrote:
@@ -1455,34 +1450,16 @@ static void update_cpumasks_hier(struct cpuset *cs, struct tmpmasks *tmp)IIUC, this ensures that when a parent becomes partition root again, this
switch (parent->partition_root_state) {
[...]
-
case PRS_ENABLED:
- if (update_parent_subparts_cpumask(cp, partcmd_update, NULL, tmp))
- update_tasks_cpumask(parent);
+ update_parent = true;
[...]
+ if (update_parent) {
+ if (update_parent_subparts_cpumask(cp, partcmd_update, NULL, tmp))
+ update_tasks_cpumask(parent);
+ /*
+ * The cpuset partition_root_state may be changed
+ * to PRS_ERROR. Capture it.
+ */
+ new_prs = cp->partition_root_state;
+ }
would propagate downwards to invalidated children.
However, the documentation says:
+ Changing a partition root (valid or invalid) to "member" isI.e. it suggests a child can be trapped in the unrecoverable state (i.e.
+ always allowed. If there are child partition roots underneath
+ it, they will become invalid and unrecoverable. So care must
+ be taken to double check for this condition before disabling
+ a partition root.
not fixable by writing into cpuset.cpus.partition).
But this does not happen, right?