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) > 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