- 06 Sep, 2016 40 commits
-
-
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>
-
Eugene Batalov authored
Test does its checking both after dump and after restore. Checking is done in the following way: 1. Check that every ps tree process is stopped or dead 2a. SIGKILL every ps tree process if checking after dump 2b. SIGCONT every ps tree process if checking after restore Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
It can hapen in tty tests, where we get SIGHUP. Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
If a test crashes, its logs may be in testname.out.inprogress. Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
It works faster and checks that two criu processes can work concurrently. Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Pavel Tikhomirov authored
as these sysctls can not be set to -1(default) leave them uninitialized sometimes https://jira.sw.ru/browse/PSBM-48397Signed-off-by:
Pavel Tikhomirov <ptikhomirov@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Eugene Batalov authored
Main test features: - Non trivial ps tree with non trivial anon shmem regions (no such test exists now). - Each ps tree process continuously writes parts of anon shmem vmas and validates these writes after restore (required for dedup testing). - Checking simultaneous changing of anon shmem contents in different processes. Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Fyodor Bocharov authored
We use the same dumping and restoring mechanism for anon private and anon shared memory. Because of this we can implement manual deduplication of shared anon memory the same way we do it with private anonymous memory. Also we need to rename pid parameter of cr_dedup_one_pagemap to id because now we can pass either pid or shmid there and the actual meaning depends on flags: PR_TASK is for pid, PR_SHMEM is for shmid. Signed-off-by:
Fyodor Bocharov <bocharovfedor@gmail.com> Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Eugene Batalov authored
As anon shmem dumping supports page changes tracking we can call it during predump. Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Fyodor Bocharov authored
This allows us not to dump anon shmem pages that weren't changed since last dump. We dump each anon shmem vma using page-xfer. page-xfer does all magic with storing "in_parent" field in pagemap-entry. When restoring we simply read every page with page-read and it does all magic of reading from right place in image hierarchy. auto-dedup on restore is already implemented by page-read so we don't need to code it. Signed-off-by:
Fyodor Bocharov <fbocharov@yandex.ru> Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Fyodor Bocharov authored
Anon shmem pages state tracking allows us not to dump unused anon shmem pages at all. To track anon anon shmem pages state we create a bitmap. Each 2 bits in this bitmap correspond to particular page. Each 2 bits store one page state: PST_DONT_DUMP, PST_DUMP, PST_ZERO, PST_DIRTY. This number of states is enough to decide what to do with the page on dump. With anon shmem there is a peculiarity. To decide what state page has we need to examine its PME bits in all the processes that share it. So page state derived from PME bits in one process may be overriden by page state derived from PME bits from another process. See implementation of this overrides in the patch. Signed-off-by:
Fyodor Bocharov <fbocharov@yandex.ru> Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Eugene Batalov authored
We'll use it to decide should we dump anon shmem page or not. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Fyodor Bocharov authored
So we would be able to analyze pagemap bits for each anonymous shmem page and decide on its dirtiness and usage by dumpee process. Signed-off-by:
Fyodor Bocharov <fbocharov@yandex.ru> Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
proc_parse.h is too generic and it is a bad idea to include it everywhere. Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
It removes a dependence between proc_parse.h and cgroup.h v2: type fix in the subject Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
It remove a dependece between proc_parse.h and mount.c. v2: type fix in the subject Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
There are files that include both vma.h and proc_parse.h and since dump_filemap_t is declared in both some gccs generate a warning. Warning: proc_parse.h:131: note: previous declaration of ‘dump_filemap_t’ was here Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Nikolay Borisov authored
restorer.h eventually includes fcntl-linux.h system file, which indiscriminately defines F_SETPIPE_SZ/F_GETPIPE_SZ. But those are also defined by CRIU's own headers in config-base.h. The latter contains ifdef guards, however in arch/x86/crtools.c it's included after restorer.h which causes gcc warnings for macro redefinition. Fix this by reordering the 2 headers, ensuring the ifdef guards in config-base.h actually work. Signed-off-by:
Nikolay Borisov <kernel@kyup.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Dmitry Safonov authored
Impact: cleanup, improve readability Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Acked-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Dmitry Safonov authored
>From the commit 64e74fab ("parasite: handle errors while a transport socket is being created"), we have futex in parasite init args to synchronize parasite and criu during initialization. And man futex(2): "On all platforms, futexes are four-byte integers that must be aligned on a four-byte boundary." This is checked by kernel in get_futex_key(): if (unlikely((address % sizeof(u32)) != 0)) return -EINVAL; So, we need to align parasite arguments on four bytes, while mapping of parasite blob on page-aligned address will guarantee that it'll be aligned on four bytes in memory. Fixes: (00.013468) ----------------------- (00.013470) Putting tsock into pid 22043 (00.014024) Error (criu/parasite-syscall.c:541): futex() returned an unexpected error: -22 (00.014026) Error (criu/parasite-syscall.c:541): BUG at criu/parasite-syscall.c:541 Cc: Andrew Vagin <avagin@virtuozzo.com> Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Acked-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
Process private memory was dumped at this moment, but a memory tracker isn't reseted, so we can't use a process memory here. https://github.com/xemul/criu/issues/203 Cc: Eugene Batalov <eabatalov89@gmail.com> Cc: Fyodor Bocharov <fbocharov@yandex.ru> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Fixes: 101e3ba49d08 ("mem: reset SOFT_DIRTY bits after dumping of all vmas in the process") Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Tycho Andersen authored
Initially, the cgroupns patchset that went into the Ubuntu kernels had the nsroot= argument in mountopts, which allowed us to distinguish between cgroupfs mounts. The upstream kernel doesn't have this (the reasoning was that it showed up in the root field of mountinfo), so all cgroup mounts look idential if we don't consider the root mount, and we wrongly detect the mounts as bind mounts. Instead, let's remember the root path and compare this when considering when a mount is a bind mount. This patch is a little ugly because it intorduces cgroup specific behavior into the generic code, which we've thus far been able to avoid. One way to deal with this might be able to add a ->sb_equal hook to the fstype struct that could compare mountinfos' superblocks, and then fall back to mounts_sb_equal if that isn't present. Or we can leave this specific code in the generic bits until more of these appear. Either way is fine with me. v2: move the cgroup specific code to mounts_sb_equal() Signed-off-by:
Tycho Andersen <tycho.andersen@canonical.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Pavel Emelyanov authored
Out-of-core rlims and timers existed before 1.3, so people trying to restore from images generated of this old CRIU would have to upgrade. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Pavel Emelyanov authored
This is the option that would enable the deprecated (to be removed) functionality. For convenience it's also possible to set one via the environment. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Pavel Emelyanov authored
When serving out fds in files engine we _may_ goto move_fd_from() call on the recently added service transport fd. Avoid this theoretical situation. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Acked-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
The same thing as in e46ba886 exists in pipes, unix sockets and ttys, so let's re-use the service transport fd there as well. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Tycho Andersen authored
Similar to f444f7fac40, we need to treat memory.oom_control as a "special" property and try not to write its default value, since in the 3.11 kernel it can't be written when memory.use_heirarchy is true, which is the default. CC: Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Tycho Andersen <tycho.andersen@canonical.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
It's what we have when ReadOnlyDirectories=/ is set for systemd services. Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Andrei Vagin authored
pivot_root requires a place where to move an old root. Currently a temporary directory is created for that, but it doesn't work if the / directory is read-only. Actually we can use any existing directory. In this patch, criu tries to use /tmp and only if it doesn't exist, criu creates a temporary directory. https://bugs.openvz.org/browse/OVZ-6778 v2: don't give a constant string to mkdtemp Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Dmitry Safonov authored
Cc: Andrew Vagin <avagin@virtuozzo.com> Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Acked-by:
Andrew Vagin <avagin@virtuozzo.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Fyodor Bocharov authored
If we want to dedup anon shared memory we need to call page_in_parent. So we need to make it extern. Also in case of anon shared mem we have only 1 bit per page so we have to change page_in_parent signature. Signed-off-by:
Fyodor Bocharov <fbocharov@yandex.ru> Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-
Fyodor Bocharov authored
In order to restore deduplicated anonymous shared memory we need to open it's parent pagemap images. Code that opens parent pagemap images already exists for anonymous private memory. All we need to do is to remove couple of checks from existing code. Also we need to rename pid to id because now we can pass either pid or shmid and the actual meaning depends on pr_flags. Signed-off-by:
Fyodor Bocharov <fbocharov@yandex.ru> Signed-off-by:
Eugene Batalov <eabatalov89@gmail.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
-