If we use -v [num] to set log_level and we happen to set it in the end of
arguments, the [num] we set may not work. This patch will fix it.
Signed-off-by: Huang Qiang <h.huangqiang@huawei.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Sizes of send and recv buffers are set to maximum to restore queues,
after that sizes of buffers are restored.
O_NONBLOCK is set to a socket to prevent blocking during restore.
#2411
v2: do the same for unix sockets.
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
One thing to note. The socket filter proggie is a set of struct-s
wuth 8 and 16 bits values in it. Protobuf doesn't support such thing
and it's too annoying to mess with yet another message for that.
Instead, I encode all this stuff into array of fixed64 fields to
handle endianity (yes, protobuf handles it, but each field is not
just 64-bit value, but a structure).
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Print PASS only once.
Signed-off-by: Stanislav Kinsbursky <skinsbursky@openvz.org>
Acked-by: Andrew Vagin <avagin@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This test makes sure, that processes tree is restored before opened files.
This is guaranteed by holding child's "/proc/<pid>/stat" file opened by parent.
It was inspired by OpenVZ bug:
#2404
IOW, OpenVZ can't restore container with such test inside.
v2:
1) Test renamed + carefull cleanup + minor updates.
Signed-off-by: Stanislav Kinsbursky <skinsbursky@openvz.org>
Acked-by: Andrew Vagin <avagin@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The length of bootstrap in the print is old and wrong, we need to fix
it and unify the length variable.
Signed-off-by: Huang Qiang <h.huangqiang@huawei.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
We'll support other tcp states and udp-specific info eventually.
This introduced switch() looks more friendly to this future.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
We can't dump application that put some data in write queue and is
about to add more, as there's currently no way to fetch this data
back, and just dropping it means breaking the app-level protocol.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Move the checks to parasite_args() and make them build-time.
This gets rid of bunch of BUILD_BUG_ON-s in parasite.c.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
It seems I've screwed the setup and mount points on
my testing machine thus mountpoint test become failing.
Nevertheless, better to report where exactly we've failed
for easier investigation.
With this patch I get
| ./mountpoints --pidfile=mountpoints.pid --outfile=mountpoints.out
| 20:26:07.398: 1745: umount(`/dev') failed: Device or resource busy
| 20:26:07.398: 1745: umount(`/vz') failed: Device or resource busy
| 20:26:07.399: 1745: umount(`/vz') failed: Device or resource busy
| 20:26:07.399: 1745: umount(`/vz') failed: Device or resource busy
| 20:26:07.399: 1745: umount(`/vz') failed: Device or resource busy
| 20:26:07.399: 1745: FAIL: mountpoints.c:60: Can't umount all the filesystems (errno = 16)
| 20:26:07.404: 1744: ERR: test.c:298: Test exited with unexpectedly with code 1
| (errno = 4)
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
errno is no guaranteed to be clear if call exit with
success. Thus make sure we've ret negative here and
test for errno then.
http://bugzilla.openvz.org/show_bug.cgi?id=2412
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The SO_PEERNAME sockopt reports -EINVAL if the len passed is greater
than the real one, and copies part of the address otherwise. Need to
pass there "good" optlen not to get -EINVAL falsely. On the other
hand, since we only need to check for connected/not-connected it's
enough to push there 1 byte.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
It's almost the same as find_first_sid, lets use
it instead.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
* Increase sizes of tcp rcv and snd bufffers
* Fill buffers
* Dump/Restore
* Check, that all data were restored
This test reproduces a problem from buf #2411
v2: don't use test_waitsig() in external processes, because they
can be out of this pid name-space.
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
We have own mechanism to restore controlling
terminal thus we don't need the kernel to create
it in implicit way.
#2409
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Andrew Vagin <avagin@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
It's being found that we fail to restore tasks which
are not session leaders but have controlling terminals.
This patch reworks tty_find_restoring_task logic to fix
the problem. The problem itself basically was the following --
in case if there no sid present even on master peer or on both
master/slave peers, we were trying to find a restoring task,
and that's wrong since we have peers which do not belong our
session.
#2409
Reported-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Andrew Vagin <avagin@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Writing to last_pid sysctl is CAP_SYS_ADMIN potected. Thus restoring
creds before it won't work in all the cases.
Fix this by making all threads restore creds themselves, and the
thread group leader -- after all of them.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Acked-by: Andrey Vagin <avagin@parallels.com>
Here are two things:
* A test process is a session leader
* It has a terminal, which are not conrolling for anyone.
For bug #2409
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The size of vector depends on the kernel config
so use the real size of a vector dumped. Otherwise
we might fail on restore.
Reported-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Threads do not share creds, thus they should restore them from
group leader (or restore them in the same state which is less
appealing).
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The former is actually the parameters of thread group leader, so
it's natural to have them on-task.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The tail PTRACE_INTERRUPT/PTRACE_CONT call in parasite calling code
is redundant as far as I can say, thus get rid of it.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
With some historical changes, the second page-aligned for
restore_thread_vma_len is reduplicate. So remove it.
Signed-off-by: Huang Qiang <h.huangqiang@huawei.com>
Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The slave peer should be restoring the controlling terminal.
It works for most of programs but need some more investigation
in future.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The dumping of tty peers is somewhat tricky. And it became more
complex once we allowed to migrate/inherit sessions.
It's being found (in screen c/r) that we've a problem in looking
up of session leaders while dumping tty.
Let me explain with more details. Here is an example of screen
session
PID GID SID
20567 20567 20567 SCREEN
20568 20568 20568 pts/3 \_ /bin/bash
The screen opens master peer (ptmx) and then provides
bash the slave peer (pts/3) where bash sets up a session
leader on it.
Thus we get interesting scenario -- our pstree construction
is done in lazy fashion, we run parasite code to fetch sid/pgid
of a process tree item only when we're really dumping the task.
Thus when we start dumping ptmx peer (which belongs to SCREEN)
we've not yet constructed the process tree item for children
(ie /bin/bash) and the lookup function in tty code (which walks
over all process items in a tree) simply fails to find sid of
child, because we've not yet dumped it.
Thus, to resolve such situation we verify tty sids at late stage
of dumping.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
The sid may be present not only on slave peer
so fix up the message. Also extend it showing
peer type.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
No need for tricks, we fetch everything we need
from the parasite.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
In case if at checkpoint time we've fetched zero sid
associated with tty peer it doesn't obligatory means
that we've met a hangig up terminal, in particular
zero sid may be obtained if the slave peer do not
belong to the session the task run in but inherited
from the parent. Thus if --shell-job passed we should
handle such situation gracefully.
[ https://bugzilla.openvz.org/show_bug.cgi?id=2405 ]
Reported-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This is rather a code tossing for the next patch.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Since we support tty migration, use it here,
otherwise it'll fail.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
For vz containers, monotonic time freezes when a container is
checkpointed. This makes the zdtm posix timer test fail.
To fix this, obtain time passed, which is used to check timer results,
using the clock used by the timer.
Signed-off-by: Vladimir Davydov <vdavydov@parallels.com>
Acked-by: Stanislav Kinsbursky <skinsbursky@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>