This is an addition to commit 6273a5c ("Add ability to restore with
missing sysctls on the target node").
travis-ci: success for Document --weak-syscalls
Cc: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Option --help should provide a brief information, like a list of
commands and options and their meaning, ideally no more than 1 line per
option. There is no need to describe nuances and details here, since
we have documentation (wiki and man pages) for that.
travis-ci: success for Document --weak-syscalls
Cc: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Do it through new --weak-sysctls option to "criu restore".
When we migrate from source with newer kernel with some modern sysctl
to destination with older kernel without it or just with a kernel
configured without it (e.g. no CONFIG_IPV6_ROUTER_PREF), we face a
problem that not all of dumped sysctls can be successfuly restored
on the destination. So to address these problem introduce weak sysctls
migration, where we restore only available sysctls and skip others.
https://github.com/xemul/criu/issues/248
While on it, fix workaround for stable_secret eio skip.
travis-ci: success for Add ability to restore with missing sysctls on the target node
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
With the recent patches, criu is finally compileable with
clang for all architectures. To keep it that way, we need
Travis to test that on a regular basis.
The downside is, Travis build time is increased about 2x.
travis-ci: success for travis: enable arm/arm64/ppc builds with clang
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
When using the option --keep-going to get a quick overview of the test
results there is now a summary which tests have failed like:
############# 7 TEST(S) FAILED (TOTAL 268/SKIPPED 83) ##############
* zdtm/static/sched_policy00(unknown)
* zdtm/static/pthread00(unknown)
* zdtm/static/pthread01(unknown)
* zdtm/static/maps01(unknown)
* zdtm/static/maps00(unknown)
* zdtm/transition/maps008(unknown)
* zdtm/transition/shmem(unknown)
############################### FAIL ###############################
Signed-off-by: Adrian Reber <areber@redhat.com>
Acked-by: Andrei Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Those two tests use same socket name and if both of them are run
simultaneously, they would fight for socket and one will get EADDRINUSE.
This patch gives socket_dgram_data an unique name, so that everyone will
be happy.
travis-ci: success for test: fix same socket names in socket-{dgram_data, snd_addr}
Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
The installation needs to use python2, but it uses python in the
Makefile which fails later with syntax error
(since it is written for python2).
As per PEP-394 - https://www.python.org/dev/peps/pep-0394/ -,
'all distributions should ensure that python refers to the same target
as python2 .', hence this change.
Therefore, python2 is used by default in lib/Makefile, though
this can be overriden with PYTHON_BIN.
Tested with:
a) PYTHON_BIN=python2 make install
b) make install
c) export PYTHON_BIN=python2
make test
Signed-off-by: Raghavendra Prabhu <me at rdprabhu dot com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Do not dump external sockets, that are not peers
for some processes sockets. We do not use them on
restore ==> we do not need to dump them.
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
criu/sk-unix.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Build in tests/others/rpc folder was failing due to the use of LDFLAGS
variable instead of LDLIBS variable to link libprotobuf-c. The makefile
uses implicit build rules.
$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)
Using LDFLAGS places -llibprotobuf-c before the object files, preventing
the library from being searched for required functions. This commit
changes the variable to LDLIBS instead to fix the issue.
travis-ci: success for test/others/rpc: fix build error
Signed-off-by: Venkateswara Rao Mandela <venkat.mandela@ti.com>
Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
We can MSG_PEEK those and can dump the files easily. The
problem is in restore -- we need to first pass through all
the fdinfo openings before sending the descriptors out, but
by that time some sending sockets may have already closed :(
So for now just detect SCM-s in queue and abort the dump,
otherwise we'd just have them lost and the state spoiled.
https://travis-ci.org/criupatchwork/criu/builds/177945936
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
1. Dropped check for (fd < 0) - there is check after open() in the
test, just two lines upper or so.
2. Combined two test to share common code: they differ only by proc
path to open in a dead process.
travis-ci: success for pstree: rename lookup_create_{item <=> pid} (rev2)
Cc: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Currently each page read request results in pread() call. But
we can do better -- if there's no urgent need in data (which is
likely the case for non-cow pagemaps) we can save where the
date should go to and then read it in in one preadv syscall.
For lazy pages we get an ability to do async read_pages call
that would send the request to server and return w/o data in
the buffer.
The explicit sync() method is added since .close is void and
nobody checks its return code.
v2: Lost limits.h in pagemap.c for IOV_MAX (compilation).
v3: split added code into smaller chunks
https://travis-ci.org/criupatchwork/criu/builds/175451746
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Flag PR_ASYNC means, that the caller is OK if the routine
returns w/o data read into the buffer provided.
https://travis-ci.org/criupatchwork/criu/builds/175451746
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
travis-ci: success for page-xfer: spelling: s/heppen/happen
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
With in-memory pagemap put_pagemap is not required because it does not
frees any resources. Minor modifications to get_pagemap and init_pagemaps
allow proper bookkeeping without put_pagemap.
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
travis-ci: success for headers: Switch to common linkage.h
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
The 2nd big splitting patch -- move most of the code that is
infect-related and doesn't know about criu internals (like
protobuf) out of types.h headers.
This is also big and fat patch, but it just moves the code
around. Applies on top of sigframe extracting patch.
Travis: https://travis-ci.org/xemul/criu/builds/171439595
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-and-ported-on-dev-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
There's a lot of code making sigframes for PIE spread all over the
asm/restorer.h and arch/crtools.c. This patch collects it all into
asm/sigframe.h and arch/sigframe.c for better modularity and for
the sake of compel.
The patch is huge, but it just moves the code around (making u32/u64
types conversions to uint32/64_t-s where appropriate).
travis-ci: success for sigframe: Move sigframe-related code into sigframe.*
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-and-ported-on-dev-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
flake8 --config=scripts/flake8.cfg test/zdtm.py
test/zdtm.py:66:1: E305 expected 2 blank lines after class or function definition, found 1
test/zdtm.py:127:1: E305 expected 2 blank lines after class or function definition, found 1
test/zdtm.py:971:1: E305 expected 2 blank lines after class or function definition, found 1
test/zdtm.py:1618:1: E305 expected 2 blank lines after class or function definition, found 1
Makefile:377: recipe for target 'lint' failed
travis-ci: success for zdtm: fix flake8 warnings
Signed-off-by: Andrei Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
When C/R-ing a net namespace with --empty-ns net option we should also
skip netfilter rules too (as per https://github.com/docker/docker/issues/27597).
However, there's one thing to be handled -- local TCP blocking rules are
expected to be there on restore by restore_iptables() which is no longer
the case, so put them back manually.
Test included, checked on zdtm/static/socket-tcpbuf-local :)
v2: Full scripts for empty netns setup.
https://github.com/xemul/criu/issues/246
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
So, this time we've mostly have a lot of code rework for
compel. A big portion of it is still in criu-dev, but
some has been merged into master.
Other than this and a bunch of bugfixes -- .config file,
support for Tun-Tap devices and deprecation of several
CLI and RPC options by the --external one.
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Since iprule commit 67a990b81126 command "ip rule del" is not working anymore:
iproute: disallow ip rule del without parameters
Disallow run `ip rule del` without any parameter to avoid delete any first
rule from table.
Signed-off-by: Andrey Jr. Melnikov <temnota.am@gmail.com>
So, criu restore fails with:
Error (criu/net.c:1277): IP tool failed on rule delete
Fix that by explicit passing of rule's table.
v2: Use "ip rule flush" to main's and default's table rules at once.
travis-ci: success for net: Make criu do not fail on recent iproute2 (rev2)
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Introduce helper functions for reading pages from parent snapshot and for
reading pages from local pages*img
travis-ci: success for criu: pagemap: minor improvements
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Some pagemap methods mix up using PIDs and pagemap internal ids. Using the
'pid' name in places that actually refer to PIDs makes the code clearer.
travis-ci: success for criu: pagemap: minor improvements
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
It is already present in rpc, so lets add it to libcriu too.
Signed-off-by: Ruslan Kuprieiev <rkuprieiev@cloudlinux.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
When using pr_perror(), we should not end the message with \n,
as it is added automatically.
Unfortunately, I still can't figure a way to check this at compile
time, so here's the annual patch.
travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
In certain places, such as after a syscall, we use pr_perror()
to automatically add strerror(errno) to the error message.
In places we're not sure if errno was set by a function we called,
we should use pr_err() instead.
travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
1. Make sure to use xmalloc() where an error message makes sense
2. Make sure to not ignore if NULL is returned
travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Using xstrdup lets us have an error message printed if malloc() fails.
travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
We already have a wrapper that spits out an error, use it.
travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
open_proc* and fopen_proc* are all macros, and they print errors in case
something is wrong (and as they are macros they print correct file:line
info, too). So, there is no need to print another error message
right after calling those.
This fixes double error messages like these:
(00.047295) Error (criu/proc_parse.c:990): Can't open 18472/status on procfs: No such file or directory
(00.047298) Error (criu/proc_parse.c:992): Can't open proc status: No such file or directory
travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Our log functions save errno and restore it. Restoring should be
at the very end of the __print_on_level() function, but
commit 6ae4a97 ("rpc: Report back first error message on failure")
messed with it.
Move errno restore at the end of the function.
travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
An errno from setns might be lost after close()s, so change the order.
travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
travis-ci: success for tests: Add RPC testing to CI (rev2)
Acked-by: Andrey Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Travis sets up the GCOV variable to collect coverage and
provides an external mount for this. Thus handling this
option in RPC mode is essential.
travis-ci: success for tests: Add RPC testing to CI (rev2)
Acked-by: Andrey Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
travis-ci: success for tests: Add RPC testing to CI (rev2)
Acked-by: Andrey Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Now the --ext-mount-map is deprecated option, so fix it to
become the --external one.
travis-ci: success for tests: Add RPC testing to CI (rev2)
Acked-by: Andrey Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
It seems to me most of the clean hooks (used by cgroup*, macvlan* cr_veth*
and mnt_tracefs* were all designed to be run to clean up after the test, no
matter whether it failed or succeeded. Let's always run them, so Andrei
doesn't hate me :D
travis-ci: success for zdtm.py: run --clean hook on test failure
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
CC: Andrei Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Apparently, there's no clang-3.8 for Ubuntu Trusty arm64. The latest
available version is 3.6, let's try to use it.
https://travis-ci.org/kolyshkin/criu/builds/173168198
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
travis-ci: success for series starting with [1/2] ppc: Add atomic_dec_return()
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Borrowed from Linux kernel.
travis-ci: success for series starting with [1/2] ppc: Add atomic_dec_return()
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
I'm unsure where all these %%s before register names comes from,
but they confuse clang, like this:
> criu/arch/arm/parasite-head.S:6:6: error: unexpected token in operand
> sub %r2, %pc, #8 @ get the address of this instruction
> ^
This patch looks scary, but all it does is removing %s before
register names, fixing a few "many spaces instead of a tab" issues
along the way.
travis-ci: success for Fixes to compile on arm with clang
Cc: Christopher Covington <cov@codeaurora.org>
Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Reviewed-by: Christopher Covington <cov@codeaurora.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
I got the following then trying to compile CRIU on ARM with clang:
> criu/cr-restore.c:2476:22: error: implicit conversion from 'unsigned
> long long' to 'unsigned long' changes value from 18446744073709551615 to
> 4294967295 [-Werror,-Wconstant-conversion]
> return ival == -1 ? RLIM_INFINITY : ival;
> ~~~~~~ ^~~~~~~~~~~~~
> /usr/include/arm-linux-gnueabihf/bits/resource.h:117:24: note: expanded
> from macro 'RLIM_INFINITY'
> # define RLIM_INFINITY 0xffffffffffffffffuLL
> ^~~~~~~~~~~~~~~~~~~~~
> 1 error generated.
Fix by using provided rlim_t type in this and similar places.
travis-ci: success for Fixes to compile on arm with clang
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Somehow clang doesn't always like -Wa flags, for example when making
dependencies (see commit 9303ed3 ("Makefiles: move -Wa,--noexecstack
out of CFLAGS"), which causes build break, scary error messages, and
even hair loss.
There are many ways to solve this. This patch employs the one
that is simple and clean.
The -Wa,-mimplicit-it=always flag was added by commit 79c4b74
("arm: fix compilation on ARMv7"). The reason is, ARM needs an IT
instruction before certain conditionals. Those IT instructions are
almost always automatically generated by assembler itself, but in some
cases a special assembler flag (like the one above) is needed.
As there is only one place in the code that need IT, it's easy to patch
it (add explicit IT) and remove the flag. Note that "IT" generates
no machine code per se, so there should not be any functional change
(although I haven't checked it).
For more info on IT, see http://tinyurl.com/z3ldsdr
Hope for a review from our ARM experts.
travis-ci: success for Fixes to compile on arm with clang
Cc: Christopher Covington <cov@codeaurora.org>
Cc: Dmitry Safonov <dsafonov@virtuozzo.com>
Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>