On Sun, Dec 05, 2021 at 01:32:16PM -0500, Waiman Long longman@redhat.com wrote:
@@ -1455,34 +1450,16 @@ static void update_cpumasks_hier(struct cpuset *cs, struct tmpmasks *tmp) 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;
}
IIUC, this ensures that when a parent becomes partition root again, this would propagate downwards to invalidated children.
However, the documentation says:
Changing a partition root (valid or invalid) to "member" is
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.
I.e. it suggests a child can be trapped in the unrecoverable state (i.e. not fixable by writing into cpuset.cpus.partition). But this does not happen, right?
Michal