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