linux/include
Waiman Long a22b3d54de cgroup/cpuset: Fix race between newly created partition and dying one
There is a possible race between removing a cgroup diectory that is
a partition root and the creation of a new partition.  The partition
to be removed can be dying but still online, it doesn't not currently
participate in checking for exclusive CPUs conflict, but the exclusive
CPUs are still there in subpartitions_cpus and isolated_cpus. These
two cpumasks are global states that affect the operation of cpuset
partitions. The exclusive CPUs in dying cpusets will only be removed
when cpuset_css_offline() function is called after an RCU delay.

As a result, it is possible that a new partition can be created with
exclusive CPUs that overlap with those of a dying one. When that dying
partition is finally offlined, it removes those overlapping exclusive
CPUs from subpartitions_cpus and maybe isolated_cpus resulting in an
incorrect CPU configuration.

This bug was found when a warning was triggered in
remote_partition_disable() during testing because the subpartitions_cpus
mask was empty.

One possible way to fix this is to iterate the dying cpusets as well and
avoid using the exclusive CPUs in those dying cpusets. However, this
can still cause random partition creation failures or other anomalies
due to racing. A better way to fix this race is to reset the partition
state at the moment when a cpuset is being killed.

Introduce a new css_killed() CSS function pointer and call it, if
defined, before setting CSS_DYING flag in kill_css(). Also update the
css_is_dying() helper to use the CSS_DYING flag introduced by commit
33c35aa481 ("cgroup: Prevent kill_css() from being called more than
once") for proper synchronization.

Add a new cpuset_css_killed() function to reset the partition state of
a valid partition root if it is being killed.

Fixes: ee8dde0cd2 ("cpuset: Add new v2 cpuset.sched.partition flag")
Signed-off-by: Waiman Long <longman@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
History 2025-04-01 21:46:22 -10:00
..
acpi misc: Constify amba_id table 2025-03-29 18:25:34 -07:00
asm-generic bpf_res_spin_lock 2025-03-30 13:06:27 -07:00
clocksource KVM/arm64 updates for 6.14 2025-01-28 09:01:36 -08:00
crypto This update includes the following changes: 2025-03-29 10:01:55 -07:00
cxl cxl: Fixup kdoc issues for include/cxl/features.h 2025-03-17 14:41:37 -03:00
drm Rust changes for v6.15 2025-03-30 17:03:26 -07:00
dt-bindings Here's the pile of clk driver patches. The usual suspects^Wsilicon 2025-03-29 17:23:34 -07:00
hyperv x86/hyperv: Add comments about hv_vpset and var size hypercall input args 2025-03-21 18:24:22 +00:00
keys keys: drop shadowing dead prototype 2025-01-21 11:25:23 +02:00
kunit kunit: Clarify kunit_skip() argument name 2025-02-18 14:28:11 -07:00
kvm Merge branch 'kvm-arm64/pmu-fixes' into kvmarm/next 2025-03-19 14:54:52 -07:00
linux cgroup/cpuset: Fix race between newly created partition and dying one 2025-04-01 21:46:22 -10:00
math-emu powerpc/math-emu: Remove -w build flag and fix warnings 2022-09-05 17:28:25 +10:00
media media: v4l2-core: Introduce v4l2_query_ext_ctrl_to_v4l2_queryctrl 2025-03-05 10:43:26 +01:00
memory memory: renesas-rpc-if: Remove Runtime PM wrappers 2023-01-23 11:48:00 +01:00
misc cxl: fix typo in comment 2022-11-24 23:12:19 +11:00
net RDMA v6.15 merge window pull request 2025-03-29 11:12:28 -07:00
pcmcia ARM: pxa/sa1100: move I/O space to PCI_IOBASE 2022-05-07 22:56:17 +02:00
ras PCI/ERR: Handle TLP Log in Flit mode 2025-02-21 17:31:45 -06:00
rdma RDMA/core: Pass port to counter bind/unbind operations 2025-03-18 06:18:46 -04:00
rv rv: Reset per-task monitors also for idle tasks 2025-01-23 12:16:04 -05:00
scsi scsi: usb: Rename the RESERVE and RELEASE constants 2025-02-12 22:20:55 -05:00
soc soc: driver updates for 6.15, part 1 2025-03-27 09:05:55 -07:00
sound drm for 6.15-rc1 2025-03-28 17:44:52 -07:00
target scsi: target: iscsi: switch to using the crc32c library 2024-12-01 17:23:02 -08:00
trace tracing updates for v6.15: 2025-03-27 16:22:12 -07:00
uapi bpf-next-6.15 2025-03-30 12:43:03 -07:00
ufs Merge patch series "Initial support for RK3576 UFS controller" 2025-02-24 19:24:14 -05:00
vdso vdso: Rework struct vdso_time_data and introduce struct vdso_clock 2025-03-08 14:37:41 +01:00
video gpu: ipu-v3 ipu-cpmem: Remove unused functions 2025-03-01 11:29:03 +02:00
xen xen/mcelog: Add __nonstring annotations for unterminated strings 2025-03-14 11:15:16 +01:00
Kbuild drm: ensure drm headers are self-contained and pass kernel-doc 2025-02-12 10:44:43 +02:00