@@ -78,7 +78,7 @@ static void usage(void)
int main(int argc, char **argv)
{
- int i, j, ok, pid;
+ int i, j, ok, pid, free_pids;
int count, status;
struct sigaction act;
@@ -109,6 +109,19 @@ int main(int argc, char **argv)
}
}
+ free_pids = tst_get_free_pids(cleanup);
+ if (free_pids < 0) {
+ tst_brkm(TBROK, cleanup, "Can't obtain free_pid count");
+ } else if (!free_pids) {
+ tst_brkm(TBROK, cleanup, "No free pids");
+ }
+ if (nprocs >= free_pids) {
+ tst_resm(TINFO,
+ "Requested number of processes higher than limit (%d > %d), "
+ "setting to %d", nprocs, free_pids, free_pids);
+ nprocs = free_pids;
+ }
+
srand(getpid());
tid = -1;
Running syscalls/msgstress03 on a system with less than ~4 GB of RAM fails: msgstress03 1 TFAIL : msgstress03.c:155: Fork failed (may be OK if under stress) In dmesg: LTP: starting msgstress03 cgroup: fork rejected by pids controller in /user.slice/user-1000.slice/session-1.scope The reason is cgroups pid limit set by systemd user.slice. The limit is set for login session, also for root user. For example on 2 GB RAM machine it is set as: /sys/fs/cgroup/pids/user.slice/user-0.slice/pids.max:5207 Read the maximum number of pids and adjust the test limit. For 2 GB RAM machine with systemd this will result in: msgstress03 0 TINFO : Found limit of processes 5056 (from /sys/fs/cgroup/pids/user.slice/user-1000.slice/pids.max) msgstress03 0 TINFO : Requested number of processes higher than user session limit (10000 > 4556), setting to 4556 Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> --- .../kernel/syscalls/ipc/msgstress/msgstress03.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)