- 06 Sep, 2016 40 commits
-
-
Kir Kolyshkin authored
* fix a typo (descrition -> description) * add a comma before "but" * remove a period at the end of the sentence Was: --cgroup-props-file FILE same as --cgroup-props but taking descrition from the path specified. Now: --cgroup-props-file FILE same as --cgroup-props, but taking description from the path specified Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Kir Kolyshkin authored
* fix a typo (usig) * slightly rephrased * remove a period at the end Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Kir Kolyshkin authored
Hopefully without losing any meaning, but now it fits in 80 cols Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Kir Kolyshkin authored
Such a lengthy description is not quite suitable for --help output. Also, it violates 80 columns and looks ugly as a result. Fix both issues. Was: --skip-in-flight this option skips in-flight TCP connections. if TCP connections are found which are not yet completely established, criu will ignore these connections in favor of erroring out. Now: --skip-in-flight skip (ignore) in-flight TCP connections Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Kir Kolyshkin authored
* add missing space between option and the argument * mark argument as optional * fix English * obey 80 columns width Was: -x|--ext-unix-skinode,.. allow external unix connections (optionally can be assign socket's inode that allows one-sided dump) Now: -x|--ext-unix-sk [inode,...] allow external unix connections (optional arguments are socketpair inode(s) that allow one-sided dump) Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Kir Kolyshkin authored
There is no need for empty line. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Kir Kolyshkin authored
It is somewhat hard to fully describe --cpu-cap in --help output, but let's at least say that: - option is used to either write or check capabilities; - the argument is a comma-separated list; - empty argument means "all". Also, while saying it, contain ourselves within 80 columns of output. The last item requires more work of course. I'm not sure about others, but I often work in terminals which are 80 columns wide, and non-wrapped output looks pretty ugly. I mean, we surely can be better than 'adp'. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
We need to allow read/write access for these directories to execute tests in user namespaces. zdtm.py does this too, but it is racy if we run a few tests in parallel. ------------------------ grep Error ------------------------ (00.748406) 5: Error (criu/files-reg.c:1487): File zdtm/static has bad mode 040777 (expect 040775) (00.752027) 1: Error (criu/cr-restore.c:1132): 5 exited, status=1 (00.790562) Error (criu/cr-restore.c:1135): 88 killed by signal 9: Killed (00.790623) Error (criu/cr-restore.c:2019): Restoring FAILED. ------------------------ ERROR OVER ------------------------ Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Laurent Dufour authored
The Power 8 introduces the transactional memory (TM) operations (see Power ISA 3.0 for details). The support for the transactional memory operation during the checkpoint and restart requires extended ptrace API provided by the kernel 4.8. When checkpointing a thread while a transactional memory operation is in progress, the TM checkpointed state is checkpointed through the new ptrace API. If these new APIs are not available, the checkpoint is aborted and an explicit error is reported. At restart time, the TM state is pushed on the stack frame to be reloaded by the kernel when reading the stack frame. Only suspended TM operation could be checkpointed since active one will be aborted once a system call is made. Suspended operation will be aborted as well, and the checkpointed thread is expected to handle the TM failure as usual (retrying is a good option). Signed-off-by:
Laurent Dufour <ldufour@linux.vnet.ibm.com> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Laurent Dufour authored
Since the Transactional memory state will contains VSX, VMX and FP registers, extracting the common code copying data to protobuf buffer in separate functions. Signed-off-by:
Laurent Dufour <ldufour@linux.vnet.ibm.com> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Laurent Dufour authored
The new constant NVSXREG is defining the number of double word needed to be save to get the remaining part of the VSX registers to be save. A major part of the VSX registers is saved when saving FPU and Altivec registers. Signed-off-by:
Laurent Dufour <ldufour@linux.vnet.ibm.com> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Laurent Dufour authored
When dealing with the number of Altivec registers (VR), we should use the NVRREG constant defined in system file /usr/include/powerpc64le-linux-gnu/sys/ucontext.h. However this constant take in account the extra quad word containing vrsave in split vectors so we must remove 1 to get the exact number of registers VR. Signed-off-by:
Laurent Dufour <ldufour@linux.vnet.ibm.com> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Laurent Dufour authored
Don't display an error message when the checkpointed data read at restart time are corrupted. Signed-off-by:
Laurent Dufour <ldufour@linux.vnet.ibm.com> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Laurent Dufour authored
No more use C++ comment style Signed-off-by:
Laurent Dufour <ldufour@linux.vnet.ibm.com> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Cyrill Gorcunov authored
Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Cyrill Gorcunov authored
Currently when we create peers we don't consider if they were owned by someone else. Lest carry uid/gid into image and restore then. https://github.com/xemul/criu/issues/198Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Cyrill Gorcunov authored
They are zero and may clash one day. Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
It gives us more information why a test hasn't completed in time. Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Dmitry Safonov authored
Fixes: cow01.c: In function 'parent_check': ../lib/zdtmtst.h:120:11: error: format '%lx' expects argument of type 'long unsigned int', but argument 7 has type 'uint64_t {aka long long unsigned int}' [-Werror=format=] test_msg("FAIL: %s:%d: " format " (errno = %d (%s))\n", \ ^ cow01.c:287:5: note: in expansion of macro 'fail' fail("%s[%#x]: %p is not COW-ed (pagemap of " ^~~~ In file included from inotify_system.c:14:0: inotify_system.c: In function 'read_set': ../lib/zdtmtst.h:117:11: error: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type 'unsigned int' [-Werror=form at=] test_msg("ERR: %s:%d: " format " (errno = %d (%s))\n", \ ^ inotify_system.c:299:3: note: in expansion of macro 'pr_perror' pr_perror("read(%d, buf, %lu) Failed, errno=%d", ^~~~~~~~~ deleted_dev.c:53:36: error: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type '__dev_t {aka long long unsigned int}' [-Werror=format=] test_msg("mode %x want %x, dev %lx want %lx\n", ^ deleted_dev.c:53:45: error: format '%lx' expects argument of type 'long unsigned int', but argument 5 has type 'dev_t {aka long long unsigned i nt}' [-Werror=format=] test_msg("mode %x want %x, dev %lx want %lx\n", ^ ../lib/zdtmtst.h:117:11: error: format '%lx' expects argument of type 'long unsigned int', but argument 5 has type 'off64_t {aka long long int ' [-Werror=format=] test_msg("ERR: %s:%d: " format " (errno = %d (%s))\n", \ ^ Nothing really interesting, but printings with right format specifier. Signed-off-by:
Dmitry Safonov <0x7f454c46@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Dmitry Safonov authored
It looks like, on arm32 in <features.h>: #ifdef _XOPEN_SOURCE # define __USE_XOPEN 1 # if (_XOPEN_SOURCE - 0) >= 500 # define __USE_XOPEN_EXTENDED 1 /* ... */ And ptsname(), unlockpt(), grantpt() are under: #ifdef __USE_XOPEN_EXTENDED extern int grantpt (int __fd) __THROW; extern int unlockpt (int __fd) __THROW; extern char *ptsname (int __fd) __THROW __wur; #endif /* ... */ Fixes: pty00.c:50:2: error: implicit declaration of function 'grantpt' [-Werror=implicit-function-declaration] grantpt(fdm); ^~~~~~~ pty00.c:51:2: error: implicit declaration of function 'unlockpt' [-Werror=implicit-function-declaration] unlockpt(fdm); ^~~~~~~~ pty00.c:52:14: error: implicit declaration of function 'ptsname' [-Werror=implicit-function-declaration] slavename = ptsname(fdm); ^~~~~~~ pty00.c:52:12: error: assignment makes pointer from integer without a cast [-Werror=int-conversion] slavename = ptsname(fdm); ^ Signed-off-by:
Dmitry Safonov <0x7f454c46@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Dmitry Safonov authored
Fixes: maps03.c: In function 'main': maps03.c:15:32: error: result of '10l << 30' requires 35 bits to represent, but 'long int' only has 32 bits [-Werror=shift-overflow=] mem = (void *)mmap(NULL, (10L << 30), PROT_READ | PROT_WRITE, ^~ maps03.c:22:9: error: result of '4l << 30' requires 34 bits to represent, but 'long int' only has 32 bits [-Werror=shift-overflow=] mem[4L << 30] = 1; ^~ maps03.c:23:9: error: result of '8l << 30' requires 35 bits to represent, but 'long int' only has 32 bits [-Werror=shift-overflow=] mem[8L << 30] = 2; ^~ maps03.c:30:13: error: result of '4l << 30' requires 34 bits to represent, but 'long int' only has 32 bits [-Werror=shift-overflow=] if (mem[4L << 30] != 1 || mem[8L << 30] != 2) { ^~ maps03.c:30:35: error: result of '8l << 30' requires 35 bits to represent, but 'long int' only has 32 bits [-Werror=shift-overflow=] if (mem[4L << 30] != 1 || mem[8L << 30] != 2) { ^~ Proceses virtual address space is smaller than 4Gb - omit this test for those archs. Signed-off-by:
Dmitry Safonov <0x7f454c46@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Pavel Emelyanov authored
As RPC server the swrk mode is used which, in turn, is easily used by nice lib/py/criu.py thingie from Ruslan. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Pavel Emelyanov authored
Now we have a single place that is really about calling criu as CLI tool inside this class, so pull one out as a preparation to having RPC support. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Pavel Emelyanov authored
In the criu_cli class there's the whole bunch of useful code which not CLI-specific, so drop the _cli suffix. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Cyrill Gorcunov authored
When migrating process it might not have slave tty peers at all so instead of exiting early just wait for its real usage and only then fail. Reported-by:
Manuel Rodríguez Pascual <manuel.rodriguez.pascual@gmail.com> Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
This files are used by zdtm.sh. zdtm.py uses *.desc files. Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Cyrill Gorcunov authored
Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Stanislav Kinsburskiy authored
Without this patch any error in check_fs_type function is considered as a grant to process to bind-mount. This patch splits mount point fs type discovering and comparison to autofs type, thus allowing to check for discovery errors. Signed-off-by:
Stanislav Kinsburskiy <skinsbursky@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Eugene Batalov authored
It turned out that anon shmem can have pages with non zero content and with both PME_PRESENT and PME_SWAP bits unset in all its vmas in the whole ps tree. Such case is reproduced in issue #209: 1. Dump ps tree with anon shmem filled using datagen. 2. Restore ps tree. anon shmem content is restored in open_shmem(). fd is created for it and it is unmapped from restorer process. 3. anon shmem vma is mapped in restore_mapping() of pie restorer context. anon shmem content is already initialized to non zero content but restored process doesn't touch its newly mapped vma. 4. Run CRIU dump again. All the pages of anon shmem vmas have PME_PRESENT and PME_SWAP bits unset and we don't put vma pages to dump. So if we filter anon shmem pages using PME_PRESENT and PME_SWAP bits the same way as we do it for anon private mem then we have a bug. PME_PRESENT and PME_SWAP bits work for anon private mem because at least one process would restore content of private anon vma in its own address space thus PME bits will be set and pages will be damped. We can't just stop using PME_PRESENT and PME_SWAP bits and dump all non soft dirty and non zero pfn pages. In this case each 1Gb of mapped and not used anon shmem vma will go to dump. This is too bad. To fix the bug in this patch we use mincore bits to finally understand should we dump page or not. mincore bits show page usage status better because mincore performs deeper checking of internal in-kernel state. PME bits filling is based only on process page table. Using mincore has a drawback. It doesn't work when page is in swap. But it's ok for now because mincore was used before we started using PME bits. Also mincore doesn't break page changes tracking functionality for anon shmem that we have now. This bug can be fixed in another way. For example we can make anon shmem restoration work similar to anon private mem restoration. But this fix looks much harder to implement. Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Pavel Emelyanov authored
When running criu in swrk mode the client typically wants to know the reason of failure. Right now criu reports back NOTHING but the fact that dump/restore/etc fails. We've tried to address this by introducing the cr-errno engine, but it doesn't seem to be informative enough and is hard to maintain -- adding new errno-s is boring :( I propose to report back the first message with ERROR level upon failrure as __typically__ the very first error message indicates that proceeding is impossible and criu rolls back (generating more error messages, so it's crucial to know the very first one). If we ever meet the situation that the first pr_err/pr_perror doesn't cause criu to exit, this printing should be fixed to be pr_warn. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Acked-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Acked-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Cyrill Gorcunov authored
If we can't freeze process don't forget to return error sign, otherwise we continue operating over nonfrozen processes, leading into various errors. Signed-off-by:
Cyrill Gorcunov <gorcunov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Eugene Batalov authored
Running test/zdtm.py run -t zdtm/transition/maps008 --snap --pre 30 in a loop I got test failure with "Mem differs" error each ~20 minutes. The cause of the bug is in lack of synchronization between processes that still do datagen stage of test and processes that already do datacheck stage of test. As a result we can get "Mem differs" error if: 1. Process P1 being on datacheck stage fetches a byte with offset X from ashmem vma VMA1 into CPU register. 2. Process P2 still being on datagen stage changes byte with offset X in the same ashmem vma VMA1. 3. Process P1 fetches byte with offset X from another ashmem vma VMA2 mapped to the same physical memory as VMA1. 4. Process P1 compares two fetched bytes and finds out that they have different values. 5. Process P1 reports "Mem differs" error. Race is fixed by waiting for all processes to exit datagen stage before proceeding to datacheck stage. Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
Here is a race when someone umounted something and this operation isn't propagated into our namespace. CRIU | Another process ----------------------------------------------------------------- pivot_root(".", put_root) | mount(put_root, MS_REC|MS_PRIVATE) | | umount /xxx/yyy | umount /xxx -> EBUSY umount(put_root) We do this to not affect mounts in put_root, but we can mask these mounts as slave and this will work for us and for external users. Reported-by: Mr Travis Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Pavel Emelyanov authored
When linkat fails in uns we print error (!) and then sometimes try some other way to linkat anyway %). Fix this place not to produce the error message all the time, but only when it's needed. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
We found that the 3.19 Ubuntu kernel has a bug and the pagemap cache doesn't work properly on this kernel. Unfortunately Travis-CI allows to create intancies only with this kernel, so we need to add this workaround. https://github.com/xemul/criu/issues/207 Cc: Cyrill Gorcunov <gorcunov@openvz.org> Cc: Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Cyrill Gorcunov authored
Lets make name an unique to not shadow the global instance. On gcc-6.x series this doesn't cause problems but did on gcc-4.9 series. Nikolay Borisov <kernel@kyup.com> Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Cyrill Gorcunov authored
The @task_entries variable is declared as external in criu/include/pstree.h and restore_finish_stage refers to it implicitly. This is a bad habbit because the name get propagated into pie code where we have a local static variable, which eventually may shadow the former copy with gcc 4.9 series as been reported by Nikolay. Lets make restore_finish_stage helper to take variable name explicitly. Reported-by:
Nikolay Borisov <kernel@kyup.com> Signed-off-by:
Cyrill Gorcunov <gorcunov@openvz.org> Reviewed-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
It is very hard to investigate travis fails, when something is segfaulted. Let's add our own core file handler which will provide all required information for us. Now test/abrt.sh shows a process tree, process mappings, registers and backtraces. v2: change a variable name Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Thanked-by:
Dmitry Safonov <0x7f454c46@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Eugene Batalov authored
There is no similar jenkins script that tests similar options now. So make a new script. Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-