• Cyrill Gorcunov's avatar
    seize: Wait the freezer to complete before processing tags · c44683c1
    Cyrill Gorcunov authored
    Currently, when we use cgroup freezer to seize the tasks we start freezer
    and then without waiting the completion of transition procedure we are
    seizing tasks read from freezer @tasks file, using fgets.
    
    This is fragile construction because fgets uses internal buffer and tasks
    we've read might be exiting same time while we're freezing them,
    the kernel won't freeze these exiting tasks because they are dying
    anyway and I fear we might read a pid here which is not even in
    our cgroup anymore but reused with another out of cgroup task.
    
    Thus lets do the following: use iterations to freeze tasks waiting
    for freezer to change its state and then collect/seize all tasks
    in one pass.
    
    For example on container I'm playing with it takes just one iteration
    
     | (00.013690) cg: Set 1 is criu one
     | (00.013705) freezing processes: 1800000 attempst with 100 ms steps
     | (00.013720) freezer.state=THAWED
     | (00.013795) freezer.state=FREEZING
     | (00.113962) freezer.state=FROZEN
     | (00.113990) freezing processes: 1 attempts done
     | (00.114073) SEIZE 240893 (comm systemd): success
     | (00.114110) Warn  (ptrace.c:121): Unable to interrupt task: 240905 (comm kthreadd/1) (Operation not permitted)
     | (00.114136) Warn  (ptrace.c:121): Unable to interrupt task: 240906 (comm khelper) (Operation not permitted)
     | (00.114155) SEIZE 240969 (comm screen): success
     | (00.114166) SEIZE 240970 (comm sendmail): success
     | (00.114179) SEIZE 240971 (comm sendmail): success
     | (00.114189) SEIZE 240972 (comm saslauthd): success
     | (00.114202) SEIZE 240973 (comm crond): success
     | (00.114211) SEIZE 240974 (comm agetty): success
     | (00.114221) SEIZE 240975 (comm agetty): success
     | ...
    Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@virtuozzo.com>
    Acked-by: 's avatarAndrew Vagin <avagin@gmail.com>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
    c44683c1
Name
Last commit
Last update
Documentation Loading commit data...
contrib Loading commit data...
coredump Loading commit data...
crit Loading commit data...
criu Loading commit data...
images Loading commit data...
lib Loading commit data...
scripts Loading commit data...
test Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
.travis.yml Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
INSTALL.md Loading commit data...
Makefile Loading commit data...
Makefile.install Loading commit data...
Makefile.versions Loading commit data...
README.md Loading commit data...