2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-30 05:48:05 +00:00

6324 Commits

Author SHA1 Message Date
Tycho Andersen
36aedc3b11 zdtm.py: fix checkskip logic
Fix checkskip logic, also emit a clearer reason when checkskip fails as to
why the test was skipped.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 21:26:41 +03:00
Tycho Andersen
5219c5a3b8 lsm: don't crash with "undefined" profile in images
If the profile is "undefined" render_lsm_profile doesn't render anything,
since there is no need to set a profile. We shouldn't crash in this case.

We never hit this bug because we are careful not to put an "undefined"
profile into the images. But, if someone else edits the images, we
shouldn't crash on restore because of that.

Closes #110

Reported-by: Coverity
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 21:26:13 +03:00
Kirill Tkhai
7c4a37f5b3 files-reg: Fix rm_parent_dirs() counter
Looks like it's a leftover from one of intermediate versions..

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 21:25:27 +03:00
Kirill Tkhai
8822708339 files-reg: Delete ghost file numeric index
Since ghost_files content is not available for parent
tasks, leave ghost_file names unchanged.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 21:25:15 +03:00
Kirill Tkhai
f42024814b files-reg: Revert: Make try_clean_ghost() use struct ghost_file ptr
ghost_files populates another process, than who does try_clean_ghost(),
so this list is not visible for the cleaner. Revert the patch.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 21:24:58 +03:00
Dmitry Safonov
3815004841 kerndat: do not report error on loginuid feature test
Fix for commit 0ce8e4299506 ("kerndat: do not report errors on feature
test").
That commit hid error messages for feature testing when you cannot
write to /proc/*/loginuid files because of missing kernel patch that
allows unsetting loginuid value on older kernels, but it didn't hide
error messages in case of disabled CONFIG_AUDITSYSCALL - then you
don't have loginuid files.
Also fixed comment for kerndat feature test: procfs file might fail
to open if it's missing and that's fine - !CONFIG_AUDITSYSCALL case,
but it can't fail due permission fault on _read_ (then something is
wrong, lets report a problem).

Reported-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 20:25:45 +03:00
Andrew Vagin
46cf4edb60 travis: install libnl-3-dev
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 20:21:37 +03:00
Pavel Emelyanov
3606e755ce crit: Do not recode new netns-ct/-exp images
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 13:07:05 +03:00
Andrew Vagin
42165243eb test: check that contracks are dumped and restored
This tests sets filters which drops all packets which don't
belongs to current tcp connections and creates one tcp connection.

Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 11:42:43 +03:00
Andrew Vagin
afde3659e3 net: set the IP_CT_TCP_FLAG_BE_LIBERAL flag for conntracks
Currently the kernel doesn't report sequence numbers for contracks
and tries to restore them from first packets.
When we are restoring a tcp connection, we send a window probe and
set seq - 1 in it to get ack immediatly.

        /* Use a previous sequence.  This should cause the other
         * end to send an ack.  Don't queue or clone SKB, just
         * send it.
         */
        tcp_init_nondata_skb(skb, tp->snd_una - !urgent, TCPHDR_ACK);

But conntrack doesn't like this, because then we get ack, which is greater than seq.
It looks like we try to ack data which we haven't received yet.

[  735.528073] td_maxwin == 0
               seq=1081132048 ack=2965916432+(0) sack=2965916432+(0) win=342 end=1081132048
               tcp_in_window: sender end=0 maxend=0 maxwin=0 scale=0 receiver end=0 maxend=0 maxwin=0 scale=0
[  735.533409] log_invalid:
               seq=2965916431 ack=1081132049+(0) sack=1081132049+(0) win=342 end=2965916431
               tcp_in_window: sender end=2965916431 maxend=2965916773 maxwin=342 scale=0 receiver end=1081132048 maxend=1081132390 maxwin=342 scale=0
[  735.537651] nf_ct_tcp: ACK is over the upper bound (ACKed data not seen yet)

The kernel sets IP_CT_TCP_FLAG_BE_LIBERAL for new conntracks,
if we are in the middle of a connection.

Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 11:42:40 +03:00
Andrew Vagin
0dcfcc0ea5 net: dump netfilter conntracks and expectations
We request all contracks via netlink and save netlink messages which
describe them in an image file, then we send these netlink messages back on restore.

https://github.com/xemul/criu/issues/54
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-08 11:41:59 +03:00
Andrew Vagin
7ad74ec25b rst-malloc: use rst_mem_alloc_cont to allocate arrays
rst_mem_alloc() returns alligned slices. When we want to
allocate an array element, we don't expect to get a hole between
a new element and an old one.

Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-07 11:09:52 +03:00
Andrew Vagin
7458b054f9 rst-malloc: return aligned pointers to sizeof(void *) (v4)
Stas found that if we don't align a pointer,
futex and atomic operations can fail.

v2: don't hard-code the size of void *
v3: add a function to allocate memory without gaps with
    a privious slice. It's used to allocate arrays.
v4: don't change rst_mem_cpos

Cc: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com>
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-07 11:09:44 +03:00
Andrew Vagin
b09356f4d7 test/tempfs_subns: wait all child processes
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:52:28 +03:00
Tycho Andersen
2f41a8a823 check: dump seccomp filters is in --ms
As of 4.4,
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=f8e529ed9
c/r of seccomp filters is supported, so let's check for it in --ms.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:48:04 +03:00
Tycho Andersen
fe76ccde97 check: suspend seccomp is in --ms
As of 4.3,
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=13c4a9011
PTRACE_O_SUSPEND_SECCOMP is in the mainline kernel, so we should check for
it in --ms.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:47:56 +03:00
Andrew Vagin
e25c625131 util: call va_end() after va_copy() (v2)
CID 157804 (#1 of 1): Missing varargs init or cleanup (VARARGS)
16. missing_va_end: va_end was not called for tmp.

v2: typo fix

Reported-by: Mr Coverity
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:47:11 +03:00
Andrew Vagin
ced5eeeee3 crtools: terminate the case for value 1071
CID 157800 (#1 of 1): Missing break in switch (MISSING_BREAK)
unterminated_case: The case for value 1071 is not terminated by a 'break' statement.

Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:46:51 +03:00
Andrew Vagin
672f97ad4a vdso: don't call close() for a negative value
CID 157801 (#1 of 1): Argument cannot be negative (NEGATIVE_RETURNS)
19. negative_returns: fd is passed to a parameter that cannot be negative.

Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:46:51 +03:00
Andrei Vagin
a28c4a9979 test: add --force-irmap for static/inotify_irmap
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:44:53 +03:00
Laurent Dufour
8ceab588a5 crtools: no more linked with builtin syscall
crtools binary is linked with the C library and could rely on all the
services this library is providing, including system calls.

Thus it doesn't need to be linked with the builtin system calls code
made for the parasite/restorer binaries.

This patch does:
 - remove the inclusion of syscall.h
 - replace all call to sys_<syscall>() by C library <syscall>()
 - replace unwrapped system calls by syscall(SYS_<syscall>,...)
 - fix the generated compiler's issues.

There should not be any functional changes. The only 'code' changes is
appearing in locks.h when futex is called through the C library, the
errno value is fetched from errno variable instead of the return
value.

Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Reviewed-by: Christopher Covington <cov@codeaurora.org>
Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:42:03 +03:00
Laurent Dufour
34faa89bcf namespace: move definition of CLONE_SUBNS
The CRIU internal define of CLONE_SUBNS should not be put in
syscall-types.h since this define is not part of a system call.

This move is required to prepare the removal of syscall.h from the
component of crtools binary.

Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Reviewed-by: Christopher Covington <cov@codeaurora.org>
Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:42:01 +03:00
Laurent Dufour
62194b1548 build: conditional define of struct prctl_mm_map
The file include/prctl.h should define the struct prctl_mm_map only if
it is not already defined in the system include file linux/prctl.h.

The definition should be part of the '#ifndef PR_SET_MM_MAP' block
since this structure is not defined in that case.

Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Reviewed-by: Christopher Covington <cov@codeaurora.org>
Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-06 20:41:59 +03:00
Cyrill Gorcunov
e9aed2ed38 plugin: Add PRE_DUMP stage into plugins
It is missged in first place and may cause
problem on exiting via alarm hanling.

Reported-by: Igor Sukhih <igor@virtuozzo.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-05 13:24:11 +03:00
Tycho Andersen
7fc8ecc5e1 tests: remember to clean up in some failure cases of cgroup01
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-05 12:38:50 +03:00
Andrew Vagin
e68008a80a zdtm_ct: don't create a new session
All processes should exit if an user presses ctrl-c.

Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-05 12:38:14 +03:00
Kirill Tkhai
fe078a0f52 zdtm: Disable unlink_regular00 by default
Skip it till remap-links are supported.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Acked-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-05 12:37:25 +03:00
Kirill Tkhai
afe361f053 zdtm: Add unlink_regular00 test
Test checks that a deleted file content in a deleted parent directory
restores right. Initially directory is created in a separate mount,
to check the ghost file is created in right mount and link() in
rfi_remap() is working.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-03 16:27:49 +03:00
Kirill Tkhai
e62f1aea52 files-reg: Recreate deleted parent directories during restore of ghost file
This patch makes ghost files to restore with the right path.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-03 16:27:48 +03:00
Kirill Tkhai
6345b6aa6a files-reg: Create ghost files in first existing parent directory
Since a deleted file may belong to a deleted directory
(which, in turn, may belong to another deleted, etc),
it's necessary to recreate all missing dentries in the path.

Doing this in mkreg_ghost() is not a good idea, because
another ghost file may need some of the dentries in the path,
and this requires to do refcouting of recreated directories.

To avoid this, we restore a ghost file in the first existing
parent directory of the patch. This guarantees, the ghost file
will be in the same mount with target file (rfi_remap() needs
that, because it uses link()).

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-03 16:27:47 +03:00
Laurent Dufour
685953e484 test/arm: Fix building on armv7l architecture
The issue here is that ARCH is not overwritten if the caller Makefile
already define it, and the upper Makefile is not overwriting the ARCH
define to "arm", when it is "armv7l" for instance, so the SRCARCH is
set to "armv7l" which is wrong.

With this patch, SRCARCH is using the inherinted define if called from
the top level Makefile.

This is required to build test on armv7l architecture (qemu).

Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-03 16:26:05 +03:00
Tycho Andersen
ca7841601e tests: prevent zdtm_mount_cgroups from failing w/ EBUSY
Sometimes I get:

sudo ./zdtm.py run -t zdtm/live/static/cgroup03
umount: /home/tycho/packages/criu/test/zdtm.qPwsoO: target is busy
        (In some cases useful info about processes that
         use the device is found by lsof(8) or fuser(1).)
Traceback (most recent call last):
  File "./zdtm.py", line 1401, in <module>
    tst.available()
  File "./zdtm.py", line 435, in available
    subprocess.check_call(["flock", "zdtm_mount_cgroups", "./zdtm_mount_cgroups"])
  File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['flock', 'zdtm_mount_cgroups', './zdtm_mount_cgroups']' returned non-zero exit status 1

let's use a lazy unmount so we avoid this.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-03 16:25:28 +03:00
Tycho Andersen
ee2b893969 cgroup: drop cgroup.sane_behavior from global properties
cgroup.sane_behavior is read only (and in fact, the value is always 0), so
we don't need to c/r this value.

Reported-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-03 16:25:15 +03:00
Pavel Tikhomirov
33adc6d7c1 mount: separate private remount conditions for external and non-external
We have two separate cases 1) mount is external - has mi->external set,
2) mount is internal - mi->external == 0. For those two cases we need
separate decesions on making moutn private.

In both cases we need private remount if:
a)mount does not have master_id and shared_id
or
b)if mount has different shared_id from bind source.

But do not private remount if has master_id or it will be lost. As after
setting private the mount is alone in its shared group so setting master
will silently fail as kernel can not find any for our mount.
(see do_make_slave)

https://jira.sw.ru/browse/PSBM-42829

v2: rework patches 2/4 and 4/4 together and no need then in 3/4
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Acked-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-02-03 15:57:51 +03:00
Stanislav Kinsburskiy
2f70a79eac pipes: move struct pipe_info declaration to pipes.h
AutoFS will need to create write pipe end file descriptor, if it was closed.
Thus, pipe_info structure have to be exported.

Signed-off-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 17:32:19 +03:00
Stanislav Kinsburskiy
cae94b76f1 cr-restore: restore root sid before mount namespace
This is a precursor patch for AutoFS mount restore.
To restore AutoFS indirect mount points, we have to create mount point dentries.
This can do only the process with pgrp, configured to mount. Process, which
does AutoFS mount call (init) at that moment is not.
Restoring actual pgrp before sid breaks sid restoring.
Thus, restoring of sid is required to make process group leader.

Signed-off-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 17:29:17 +03:00
Kirill Tkhai
5ff22ad29b files-reg: Move applying ghost file metadata from create_ghost() to separate function
This cleanup makes create_ghost() smaller.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:58:16 +03:00
Kirill Tkhai
dbb9d5ebd7 files-reg: Make try_clean_ghost() use struct ghost_file ptr
This cleanup will be used in next patch.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:51:50 +03:00
Kirill Tkhai
78a0f8db3f files-reg: Refactor create_ghost()
In the most cases, file descriptor is not need in this function.
It's need in the case of creating a regular file only. So we can
use chown() instead of fchown(), and operate with a path directly.

The patch moves copying content of a regular file to new function
mkreg_ghost(). This will be used in next patches. Also, parameter
gf will be used.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:50:47 +03:00
Cyrill Gorcunov
da7f3ffc73 cg: Add debug printing on subset mismatch
Signed-off-by: Cyrill Gorcunov <gorcunov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:49:37 +03:00
Tycho Andersen
ffcdeb7d0a docs: add a note about the default mode
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:45:32 +03:00
Tycho Andersen
c30c6e38fe tests: add a test for cgroup perms/global props
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:45:30 +03:00
Tycho Andersen
c6e5e33414 cgroups: restore perms on tasks and cgroup.procs files
Although we don't want to restore the values on these files, we definitely
do want to restore the permissions, as certain container engines (lxc) make
use of this.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:45:27 +03:00
Tycho Andersen
fa433b7552 cgroup: restore perms on cgroup dirs as well
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:45:24 +03:00
Tycho Andersen
142f2c8e1c cgroup: dump some global properties as well
These are present in every cgroup, so let's dump them.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:45:22 +03:00
Tycho Andersen
cbe8ef4fe7 cgroup: restore cgroup property perms as well
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:45:20 +03:00
Andrew Vagin
3c18439ebd dump: save master_id for the root mount
The root mount is always external and master_id is external too.
It's required to validate mounts. We already do this on restore,
but we need to do this on dump too. Otherwise we will get the error:

Mount %d %s (master_id: %d shared_id: %d) has unreachable sharing. Try --enable-external-masters.

https://jira.sw.ru/browse/PSBM-43260
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:42:46 +03:00
Andrew Vagin
c37324b6d0 crtools: describe the inherit-fd option
Signed-off-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:38:40 +03:00
Cyrill Gorcunov
79f430ba75 parasite: Don't left memfd opened inside dumpee
If for some reason ptrace_poke_area return error
we might left dumpee with memfd descriptor opened.

Later in code we remove out injected blob making
dumpee to look untouched but descriptor will hang there.

lsof from container output:

 | systemd-u   48       root    6u      REG                0,4        0  53855 /memfd:CRIUMFD (deleted)

Thus lets close it immediately.

https://jira.sw.ru/browse/PSBM-43199

Signed-off-by: Cyrill Gorcunov <gorcunov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:35:40 +03:00
Pavel Emelyanov
e46594ae3e mount: Sanitize mounts_equal helper
* Split into two -- full/sb comparisons
* Code formatting (spaces)
* Arg names

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-01-27 16:34:31 +03:00