@@ -63,6 +63,8 @@ public class CgroupSubsystemFactory {
63
63
private Path cgroupv1CgInfoNonZeroHierarchy ;
64
64
private Path cgroupv1MntInfoNonZeroHierarchyOtherOrder ;
65
65
private Path cgroupv1MntInfoNonZeroHierarchy ;
66
+ private Path cgroupv1MntInfoDoubleCpuset ;
67
+ private Path cgroupv1MntInfoDoubleCpuset2 ;
66
68
private String mntInfoEmpty = "" ;
67
69
private Path cgroupV1SelfCgroup ;
68
70
private Path cgroupV2SelfCgroup ;
@@ -105,11 +107,14 @@ public class CgroupSubsystemFactory {
105
107
"41 30 0:37 / /sys/fs/cgroup/devices rw,nosuid,nodev,noexec,relatime shared:13 - cgroup none rw,seclabel,devices\n " +
106
108
"42 30 0:38 / /sys/fs/cgroup/cpuset rw,nosuid,nodev,noexec,relatime shared:14 - cgroup none rw,seclabel,cpuset\n " +
107
109
"43 30 0:39 / /sys/fs/cgroup/blkio rw,nosuid,nodev,noexec,relatime shared:15 - cgroup none rw,seclabel,blkio\n " +
108
- "44 30 0:40 / /sys/fs/cgroup/freezer rw,nosuid,nodev,noexec,relatime shared:16 - cgroup none rw,seclabel,freezer" ;
110
+ "44 30 0:40 / /sys/fs/cgroup/freezer rw,nosuid,nodev,noexec,relatime shared:16 - cgroup none rw,seclabel,freezer\n " ;
109
111
private String mntInfoHybridRest = cgroupv1MountInfoLineMemory + mntInfoHybridStub ;
110
112
private String mntInfoHybridMissingMemory = mntInfoHybridStub ;
111
113
private String mntInfoHybrid = cgroupV2LineHybrid + mntInfoHybridRest ;
112
114
private String mntInfoHybridFlippedOrder = mntInfoHybridRest + cgroupV2LineHybrid ;
115
+ private String mntInfoCgroupv1MoreCpusetLine = "121 32 0:37 / /cpusets rw,relatime shared:69 - cgroup none rw,cpuset\n " ;
116
+ private String mntInfoCgroupv1DoubleCpuset = mntInfoCgroupv1MoreCpusetLine + mntInfoHybrid ;
117
+ private String mntInfoCgroupv1DoubleCpuset2 = mntInfoHybrid + mntInfoCgroupv1MoreCpusetLine ;
113
118
private String cgroupsNonZeroHierarchy =
114
119
"#subsys_name hierarchy num_cgroups enabled\n " +
115
120
"cpuset 3 1 1\n " +
@@ -160,6 +165,12 @@ private void setup() {
160
165
161
166
cgroupV2MntInfoMissingCgroupv2 = Paths .get (existingDirectory .toString (), "mnt_info_missing_cgroup2" );
162
167
Files .write (cgroupV2MntInfoMissingCgroupv2 , mntInfoHybridStub .getBytes ());
168
+
169
+ cgroupv1MntInfoDoubleCpuset = Paths .get (existingDirectory .toString (), "mnt_info_cgroupv1_double_cpuset" );
170
+ Files .write (cgroupv1MntInfoDoubleCpuset , mntInfoCgroupv1DoubleCpuset .getBytes ());
171
+
172
+ cgroupv1MntInfoDoubleCpuset2 = Paths .get (existingDirectory .toString (), "mnt_info_cgroupv1_double_cpuset2" );
173
+ Files .write (cgroupv1MntInfoDoubleCpuset2 , mntInfoCgroupv1DoubleCpuset2 .getBytes ());
163
174
} catch (IOException e ) {
164
175
throw new RuntimeException (e );
165
176
}
@@ -196,6 +207,16 @@ private boolean isValidCgroup(int value) {
196
207
return value == CGROUPS_V1 || value == CGROUPS_V2 ;
197
208
}
198
209
210
+ public void testCgroupv1MultipleCpusetMounts (WhiteBox wb , Path mountInfo ) {
211
+ String procCgroups = cgroupv1CgInfoNonZeroHierarchy .toString ();
212
+ String procSelfCgroup = cgroupV1SelfCgroup .toString ();
213
+ String procSelfMountinfo = mountInfo .toString ();
214
+ int retval = wb .validateCgroup (procCgroups , procSelfCgroup , procSelfMountinfo );
215
+ Asserts .assertEQ (CGROUPS_V1 , retval , "Multiple cpuset controllers, but only one in /sys/fs/cgroup" );
216
+ Asserts .assertTrue (isValidCgroup (retval ));
217
+ System .out .println ("testCgroupv1MultipleCpusetMounts PASSED!" );
218
+ }
219
+
199
220
public void testCgroupv1NoMounts (WhiteBox wb ) {
200
221
String procCgroups = cgroupv1CgInfoZeroHierarchy .toString ();
201
222
String procSelfCgroup = cgroupV1SelfCgroup .toString ();
@@ -268,6 +289,8 @@ public static void main(String[] args) throws Exception {
268
289
test .testCgroupV1HybridMntInfoOrder (wb );
269
290
test .testCgroupv1MissingMemoryController (wb );
270
291
test .testCgroupv2NoCgroup2Fs (wb );
292
+ test .testCgroupv1MultipleCpusetMounts (wb , test .cgroupv1MntInfoDoubleCpuset );
293
+ test .testCgroupv1MultipleCpusetMounts (wb , test .cgroupv1MntInfoDoubleCpuset2 );
271
294
} finally {
272
295
test .teardown ();
273
296
}
0 commit comments