Re: [PATCH cgroup/for-next v2 0/5] cgroup/cpuset: Support multiple source/destination cpusets for cpuset_*attach()
From: Waiman Long
Date: Sat May 16 2026 - 00:36:21 EST
On 5/16/26 12:24 AM, Waiman Long wrote:
Sashiko AI review of another cpuset patch had found that cpuset_attach()
and cpuset_can_attach() can be passed a cgroup_taskset with tasks
migrating from one source cpuset to multiple destination cpusets and
vice versa. Further testing of the cpuset code indicates that this is
indeed the case when the v2 cpuset controller is enabled or disabled.
Unfortunately, cpuset_attach() and cpuset_can_attach() still assume that
there will be one source and one destinaton cpuset which may result in
inocrrect behavior.
This patch series is created to fix this issue. The first 2 patches are
just preparatory patches to make the remaining patches easier to review.
Patch 3 adds a new attach_old_cs field into task_struct to track the
old cpuset to be used in case when cpuset_migrate_mm() needs to be
called in cpuset_attach().
Patch 4 moves mpol_rebind_mm() and cpuset_migrate_mm() inside
cpuset_attach_task() to make CLONE_INTO_CGROUP flag of clone(2) works
more like moving task from one cpuset to another one, while also make
supporting multiple source and destination cpusets easier.
Patch 5 makes the necessary changes to enable the support of multiple
source and destination cpusets by keeping all the source and destination
cpusets found during task iterations in two singly linked lists for
source and destination cpusets respectively.
Sorry, I forgot to add the change log. It is basically to address all the AI review comments [1] for my v1 patch.
The 2 major changes are to move cpuset_migrate_mm() into cpuset_attach_task() and add a new field in task_struct to record the old cpuset to be used by cpuset_migrate_mm(). There also some other minor changes.
[1] https://lore.kernel.org/lkml/4f49602d35d987e029b8e92a577f0c60@xxxxxxxxxx/
Cheers,
Longman
Waiman Long (5):
cgroup/cpuset: Add a cpuset_reserve_dl_bw() helper
cgroup/cpuset: Expand the scope of cpuset_can_attach_check()
cgroup/cpuset: Replace cpuset_attach_old_cs by a new attach_old_cs
field in task_struct
cgroup/cpuset: Move mpol_rebind_mm/cpuset_migrate_mm() calls inside
cpuset_attach_task()
cgroup/cpuset: Support multiple source/destination cpusets for
cpuset_*attach()
include/linux/sched.h | 3 +
kernel/cgroup/cpuset-internal.h | 6 +
kernel/cgroup/cpuset.c | 358 +++++++++++++++++++++-----------
3 files changed, 249 insertions(+), 118 deletions(-)