summaryrefslogtreecommitdiffstats
path: root/src/api.c
diff options
context:
space:
mode:
author\"Ken'ichi Ohmichi\ <oomichi@mxs.nes.nec.co.jp>2009-05-08 01:27:46 +0530
committerBalbir Singh <balbir@linux.vnet.ibm.com>2009-05-08 01:27:46 +0530
commit485fe65a0daa23899d1e4c02620036a265560a57 (patch)
tree081e1c553d3eef4e38138b704e69511eb3b97826 /src/api.c
parent739cdfd62e14d2558566cf73ce9e1702929cf834 (diff)
downloadlibcg-485fe65a0daa23899d1e4c02620036a265560a57.tar.gz
libcg-485fe65a0daa23899d1e4c02620036a265560a57.tar.xz
libcg-485fe65a0daa23899d1e4c02620036a265560a57.zip
I have been testing a cgrulesengd daemon and I noticed it fails to
change the cgroup of child occasionally. I tested it by following configulation file: /etc/cgrules.conf: user01 cpuset group01/user01 % memory group01/user01 A cpuset subsystem and a memory subsystem are mounted on different mount points, and a cgrulesengd daemon manages each subsystem. I login this environment as a user "user01", and each susbystem's tasks file is the following: # cat /mnt/cgroups/cpuset/group01/user01/tasks 31801 31805 31806 # # cat /mnt/cgroups/memory/group01/user01/tasks 31801 31805 # # pstree -p 32105 sshd(31801)---sshd(31805)---bash(31806) # They should be the same, but they are different. I investigated this problem, and I found the cause. The reason is that the process(31806) was forked just after writing the process(31805) to a cpuset subsystem's tasks file: <1> The UID/GID CHANGE event of the process 31805 happens. <2> The daemon writes "31805" to a cpuset subsystem's tasks file. <3> The process 31806 is forked, and it appears on a cpuset subsystem's tasks file. <4> The daemon writes "31805" to a memory subsystem's tasks file. <5> The process 31806 does not appears on a memory subsystem's tasks file. For solving this problem, I propose the following sequence. 1. Store both the timestamp and the process-id when the step <4>. 2. If receiving a PROC_EVENT_FORK packet, check its parent-pid and its timestamp. 3. If its parent-pid and the stored process-id are same and its timestamp is older than the stored timestamp, change the cgroup of forked process. Changelog of v2: * Change only [PATCH 2/2] and there is not any changes in [PATCH 1/2]. This patch adds the method for getting euid/egid from /proc/<pid>/status file. For changing the cgroup of a forked process, the method is usefull because a PROC_EVENT_FORK packet does not inform of its euid and its egid. Signed-off-by: Ken'ichi Ohmichi <oomichi@mxs.nes.nec.co.jp> Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
Diffstat (limited to 'src/api.c')
0 files changed, 0 insertions, 0 deletions