@@ -60,6 +60,8 @@ public class CgroupSubsystemFactory {
60
60
private Path cgroupv1CgInfoNonZeroHierarchy ;
61
61
private Path cgroupv1MntInfoNonZeroHierarchyOtherOrder ;
62
62
private Path cgroupv1MntInfoNonZeroHierarchy ;
63
+ private Path cgroupv1MntInfoDoubleCpuset ;
64
+ private Path cgroupv1MntInfoDoubleCpuset2 ;
63
65
private String mntInfoEmpty = "" ;
64
66
private Path cgroupV1SelfCgroup ;
65
67
private Path cgroupV2SelfCgroup ;
@@ -102,11 +104,14 @@ public class CgroupSubsystemFactory {
102
104
"41 30 0:37 / /sys/fs/cgroup/devices rw,nosuid,nodev,noexec,relatime shared:13 - cgroup none rw,seclabel,devices\n " +
103
105
"42 30 0:38 / /sys/fs/cgroup/cpuset rw,nosuid,nodev,noexec,relatime shared:14 - cgroup none rw,seclabel,cpuset\n " +
104
106
"43 30 0:39 / /sys/fs/cgroup/blkio rw,nosuid,nodev,noexec,relatime shared:15 - cgroup none rw,seclabel,blkio\n " +
105
- "44 30 0:40 / /sys/fs/cgroup/freezer rw,nosuid,nodev,noexec,relatime shared:16 - cgroup none rw,seclabel,freezer" ;
107
+ "44 30 0:40 / /sys/fs/cgroup/freezer rw,nosuid,nodev,noexec,relatime shared:16 - cgroup none rw,seclabel,freezer\n " ;
106
108
private String mntInfoHybridRest = cgroupv1MountInfoLineMemory + mntInfoHybridStub ;
107
109
private String mntInfoHybridMissingMemory = mntInfoHybridStub ;
108
110
private String mntInfoHybrid = cgroupV2LineHybrid + mntInfoHybridRest ;
109
111
private String mntInfoHybridFlippedOrder = mntInfoHybridRest + cgroupV2LineHybrid ;
112
+ private String mntInfoCgroupv1MoreCpusetLine = "121 32 0:37 / /cpusets rw,relatime shared:69 - cgroup none rw,cpuset\n " ;
113
+ private String mntInfoCgroupv1DoubleCpuset = mntInfoCgroupv1MoreCpusetLine + mntInfoHybrid ;
114
+ private String mntInfoCgroupv1DoubleCpuset2 = mntInfoHybrid + mntInfoCgroupv1MoreCpusetLine ;
110
115
private String cgroupsNonZeroHierarchy =
111
116
"#subsys_name hierarchy num_cgroups enabled\n " +
112
117
"cpuset 3 1 1\n " +
@@ -157,6 +162,12 @@ private void setup() {
157
162
158
163
cgroupV2MntInfoMissingCgroupv2 = Paths .get (existingDirectory .toString (), "mnt_info_missing_cgroup2" );
159
164
Files .writeString (cgroupV2MntInfoMissingCgroupv2 , mntInfoHybridStub );
165
+
166
+ cgroupv1MntInfoDoubleCpuset = Paths .get (existingDirectory .toString (), "mnt_info_cgroupv1_double_cpuset" );
167
+ Files .writeString (cgroupv1MntInfoDoubleCpuset , mntInfoCgroupv1DoubleCpuset );
168
+
169
+ cgroupv1MntInfoDoubleCpuset2 = Paths .get (existingDirectory .toString (), "mnt_info_cgroupv1_double_cpuset2" );
170
+ Files .writeString (cgroupv1MntInfoDoubleCpuset2 , mntInfoCgroupv1DoubleCpuset2 );
160
171
} catch (IOException e ) {
161
172
throw new RuntimeException (e );
162
173
}
@@ -174,6 +185,16 @@ private boolean isValidCgroup(int value) {
174
185
return value == CGROUPS_V1 || value == CGROUPS_V2 ;
175
186
}
176
187
188
+ public void testCgroupv1MultipleCpusetMounts (WhiteBox wb , Path mountInfo ) {
189
+ String procCgroups = cgroupv1CgInfoNonZeroHierarchy .toString ();
190
+ String procSelfCgroup = cgroupV1SelfCgroup .toString ();
191
+ String procSelfMountinfo = mountInfo .toString ();
192
+ int retval = wb .validateCgroup (procCgroups , procSelfCgroup , procSelfMountinfo );
193
+ Asserts .assertEQ (CGROUPS_V1 , retval , "Multiple cpuset controllers, but only one in /sys/fs/cgroup" );
194
+ Asserts .assertTrue (isValidCgroup (retval ));
195
+ System .out .println ("testCgroupv1MultipleCpusetMounts PASSED!" );
196
+ }
197
+
177
198
public void testCgroupv1NoMounts (WhiteBox wb ) {
178
199
String procCgroups = cgroupv1CgInfoZeroHierarchy .toString ();
179
200
String procSelfCgroup = cgroupV1SelfCgroup .toString ();
@@ -246,6 +267,8 @@ public static void main(String[] args) throws Exception {
246
267
test .testCgroupV1HybridMntInfoOrder (wb );
247
268
test .testCgroupv1MissingMemoryController (wb );
248
269
test .testCgroupv2NoCgroup2Fs (wb );
270
+ test .testCgroupv1MultipleCpusetMounts (wb , test .cgroupv1MntInfoDoubleCpuset );
271
+ test .testCgroupv1MultipleCpusetMounts (wb , test .cgroupv1MntInfoDoubleCpuset2 );
249
272
} finally {
250
273
test .teardown ();
251
274
}
0 commit comments