Commit b65c7919 authored by Mike Rapoport's avatar Mike Rapoport Committed by Andrei Vagin

criu: fix 'criu --version'

Currently kerndat_init() runs before command line parsing and running
simple 'criu --version' command may produce something like:

Warn  (criu/kerndat.c:847): Can't load /run/criu.kdat
Error (criu/util.c:842): exited, status=3
Error (criu/util.c:842): exited, status=3
Write 4294967295 to /proc/self/loginuid failed: Operation not permittedWarn
(criu/net.c:2732): Unable to get socket network namespace
Warn  (criu/net.c:2732): Unable to get tun network namespace
Warn  (criu/sk-unix.c:213): sk unix: Unable to open a socket file:
Operation not permitted
Error (criu/net.c:3023): Unable create a network namespace: Operation not
permitted
Warn  (criu/net.c:3069): NSID isn't reported for network links
Version: 3.6
GitID: v3.6-611-g0b27d0a

Group early calls to kerndat_* and init_service_fd calls into a function
and call this function after the command line parsing is finished.
Signed-off-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent 32833597
......@@ -232,6 +232,35 @@ static void rlimit_unlimit_nofile_self(void)
pr_debug("rlimit: RLIMIT_NOFILE unlimited for self\n");
}
static int early_init(void)
{
/*
* Service fd engine implies that file descritprs
* used won't be borrowed by the rest of the code
* and default 1024 limit is not enough for high
* loaded test/containers. Thus use kdat engine
* to fetch current system level limit for numbers
* of files allowed to open up and lift up own
* limits.
*
* Note we have to do it before the service fd
* get inited and we dont exit with errors here
* because in worst scenario where clash of fd
* happen we simply exit with explicit error
* during real action stage.
*/
if (!kerndat_files_stat(true))
rlimit_unlimit_nofile_self();
if (init_service_fd())
return 1;
if (kerndat_init())
return 1;
return 0;
}
int main(int argc, char *argv[], char *envp[])
{
#define PARSING_GLOBAL_CONF 1
......@@ -349,33 +378,13 @@ int main(int argc, char *argv[], char *envp[])
init_opts();
/*
* Service fd engine implies that file descritprs
* used won't be borrowed by the rest of the code
* and default 1024 limit is not enough for high
* loaded test/containers. Thus use kdat engine
* to fetch current system level limit for numbers
* of files allowed to open up and lift up own
* limits.
*
* Note we have to do it before the service fd
* get inited and we dont exit with errors here
* because in worst scenario where clash of fd
* happen we simply exit with explicit error
* during real action stage.
*/
if (!kerndat_files_stat(true))
rlimit_unlimit_nofile_self();
if (init_service_fd())
return 1;
if (kerndat_init())
return 1;
if (!strcmp(argv[1], "swrk")) {
if (argc < 3)
goto usage;
if (early_init())
return -1;
/*
* This is to start criu service worker from libcriu calls.
* The usage is "criu swrk <fd>" and is not for CLI/scripts.
......@@ -670,6 +679,9 @@ int main(int argc, char *argv[], char *envp[])
}
}
if (early_init())
return -1;
if (opts.deprecated_ok)
pr_msg("Turn deprecated stuff ON\n");
if (opts.tcp_skip_in_flight)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment