The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/2550

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Hello,

1. storage: exit() => _exit()
    => When exec syscall is failed, child process needs to use _exit().

2. tools: lxc-wait: add default log priority & cleanups

Thanks.
From 2c70300ad8a77c560c615c676912ff2d0e613393 Mon Sep 17 00:00:00 2001
From: 2xsec <[email protected]>
Date: Mon, 20 Aug 2018 10:41:50 +0900
Subject: [PATCH 1/2] storage: exit() => _exit(). when exec is failed, child
 process needs to use _exit()

Signed-off-by: 2xsec <[email protected]>
---
 src/lxc/storage/nbd.c | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/lxc/storage/nbd.c b/src/lxc/storage/nbd.c
index 771bd9e3e..4c3ff51ef 100644
--- a/src/lxc/storage/nbd.c
+++ b/src/lxc/storage/nbd.c
@@ -48,8 +48,8 @@ struct nbd_attach_data {
        const char *path;
 };
 
-static bool clone_attach_nbd(const char *nbd, const char *path);
 static int do_attach_nbd(void *d);
+static bool clone_attach_nbd(const char *nbd, const char *path);
 static bool nbd_busy(int idx);
 static void nbd_detach(const char *path);
 static int nbd_get_partition(const char *src);
@@ -69,16 +69,21 @@ bool attach_nbd(char *src, struct lxc_conf *conf)
        p = strchr(orig, ':');
        if (p)
                *p = '\0';
+
        while (1) {
                sprintf(path, "/dev/nbd%d", i);
+
                if (!file_exists(path))
                        return false;
+
                if (nbd_busy(i)) {
                        i++;
                        continue;
                }
+
                if (!clone_attach_nbd(path, orig))
                        return false;
+
                conf->nbd_idx = i;
                return true;
        }
@@ -152,10 +157,10 @@ int nbd_mount(struct lxc_storage *bdev)
        }
 
        /* It might take awhile for the partition files to show up */
-       if (partition) {
+       if (partition)
                if (!wait_for_partition(path))
                        return -2;
-       }
+
        ret = mount_unknown_fs(path, bdev->dest, bdev->mntopts);
        if (ret < 0)
                ERROR("Error mounting %s", bdev->src);
@@ -178,6 +183,7 @@ bool requires_nbd(const char *path)
 {
        if (strncmp(path, "nbd:", 4) == 0)
                return true;
+
        return false;
 }
 
@@ -226,6 +232,7 @@ static int do_attach_nbd(void *d)
                                exit(0);
                        } else if (fdsi.ssi_signo == SIGCHLD) {
                                int status;
+
                                /* If qemu-nbd fails, or is killed by a signal,
                                 * then exit */
                                while (waitpid(-1, &status, WNOHANG) > 0) {
@@ -240,12 +247,13 @@ static int do_attach_nbd(void *d)
        }
 
        close(sfd);
+
        if (sigprocmask(SIG_UNBLOCK, &mask, NULL) == -1)
                WARN("Warning: unblocking signals for nbd watcher");
 
        execlp("qemu-nbd", "qemu-nbd", "-c", nbd, path, (char *)NULL);
        SYSERROR("Error executing qemu-nbd");
-       exit(1);
+       _exit(1);
 }
 
 static bool clone_attach_nbd(const char *nbd, const char *path)
@@ -259,6 +267,7 @@ static bool clone_attach_nbd(const char *nbd, const char 
*path)
        pid = lxc_clone(do_attach_nbd, &data, CLONE_NEWPID);
        if (pid < 0)
                return false;
+
        return true;
 }
 
@@ -270,6 +279,7 @@ static bool nbd_busy(int idx)
        ret = snprintf(path, 100, "/sys/block/nbd%d/pid", idx);
        if (ret < 0 || ret >= 100)
                return true;
+
        return file_exists(path);
 }
 
@@ -282,15 +292,17 @@ static void nbd_detach(const char *path)
                SYSERROR("Error forking to detach nbd");
                return;
        }
+
        if (pid) {
                ret = wait_for_pid(pid);
                if (ret < 0)
                        ERROR("nbd disconnect returned an error");
                return;
        }
+
        execlp("qemu-nbd", "qemu-nbd", "-d", path, (char *)NULL);
        SYSERROR("Error executing qemu-nbd");
-       exit(1);
+       _exit(1);
 }
 
 /*
@@ -303,24 +315,31 @@ static int nbd_get_partition(const char *src)
        char *p = strchr(src, ':');
        if (!p)
                return 0;
+
        p = strchr(p+1, ':');
        if (!p)
                return 0;
+
        p++;
+
        if (*p < '1' || *p > '9')
                return 0;
+
        return *p - '0';
 }
 
 static bool wait_for_partition(const char *path)
 {
        int count = 0;
+
        while (count < 5) {
                if (file_exists(path))
                        return true;
+
                sleep(1);
                count++;
        }
+
        ERROR("Device %s did not show up after 5 seconds", path);
        return false;
 }

From 75457df5dcead628135fa033cc3478fa2b8b8e24 Mon Sep 17 00:00:00 2001
From: 2xsec <[email protected]>
Date: Mon, 20 Aug 2018 10:43:22 +0900
Subject: [PATCH 2/2] tools: lxc-wait: add default log priority & cleanups

Signed-off-by: 2xsec <[email protected]>
---
 src/lxc/tools/lxc_wait.c | 78 +++++++++++++++++++++-------------------
 1 file changed, 42 insertions(+), 36 deletions(-)

diff --git a/src/lxc/tools/lxc_wait.c b/src/lxc/tools/lxc_wait.c
index deecc7734..6c3c07085 100644
--- a/src/lxc/tools/lxc_wait.c
+++ b/src/lxc/tools/lxc_wait.c
@@ -37,25 +37,8 @@
 
 lxc_log_define(lxc_wait, lxc);
 
-static int my_checker(const struct lxc_arguments *args)
-{
-       if (!args->states) {
-               ERROR("Missing state option to wait for");
-               return -1;
-       }
-
-       return 0;
-}
-
-static int my_parser(struct lxc_arguments *args, int c, char *arg)
-{
-       switch (c) {
-       case 's': args->states = optarg; break;
-       case 't': args->timeout = atol(optarg); break;
-       }
-
-       return 0;
-}
+static int my_parser(struct lxc_arguments *args, int c, char *arg);
+static int my_checker(const struct lxc_arguments *args);
 
 static const struct option my_longopts[] = {
        {"state", required_argument, 0, 's'},
@@ -64,8 +47,8 @@ static const struct option my_longopts[] = {
 };
 
 static struct lxc_arguments my_args = {
-       .progname = "lxc-wait",
-       .help     = "\
+       .progname     = "lxc-wait",
+       .help         = "\
 --name=NAME --state=STATE\n\
 \n\
 lxc-wait waits for NAME container state to reach STATE\n\
@@ -77,12 +60,38 @@ Options :\n\
                     ABORTING, FREEZING, FROZEN, THAWED\n\
   -t, --timeout=TMO Seconds to wait for state changes\n\
   --rcfile=FILE     Load configuration file FILE\n",
-       .options  = my_longopts,
-       .parser   = my_parser,
-       .checker  = my_checker,
-       .timeout = -1,
+       .options      = my_longopts,
+       .parser       = my_parser,
+       .checker      = my_checker,
+       .log_priority = "ERROR",
+       .log_file     = "none",
+       .timeout      = -1,
 };
 
+static int my_parser(struct lxc_arguments *args, int c, char *arg)
+{
+       switch (c) {
+       case 's':
+               args->states = optarg;
+               break;
+       case 't':
+               args->timeout = atol(optarg);
+               break;
+       }
+
+       return 0;
+}
+
+static int my_checker(const struct lxc_arguments *args)
+{
+       if (!args->states) {
+               ERROR("Missing state option to wait for");
+               return -1;
+       }
+
+       return 0;
+}
+
 int main(int argc, char *argv[])
 {
        struct lxc_container *c;
@@ -91,18 +100,15 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       /* Only create log if explicitly instructed */
-       if (my_args.log_file || my_args.log_priority) {
-               log.name = my_args.name;
-               log.file = my_args.log_file;
-               log.level = my_args.log_priority;
-               log.prefix = my_args.progname;
-               log.quiet = my_args.quiet;
-               log.lxcpath = my_args.lxcpath[0];
+       log.name = my_args.name;
+       log.file = my_args.log_file;
+       log.level = my_args.log_priority;
+       log.prefix = my_args.progname;
+       log.quiet = my_args.quiet;
+       log.lxcpath = my_args.lxcpath[0];
 
-               if (lxc_log_init(&log))
-                       exit(EXIT_FAILURE);
-       }
+       if (lxc_log_init(&log))
+               exit(EXIT_FAILURE);
 
        c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
        if (!c)
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to