The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/3281
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) === Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From 3e8c1de496d401def43b9ad6f8d559f7a7751636 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Tue, 10 Mar 2020 11:31:07 +0100 Subject: [PATCH] commands: cleanup Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/lxc/commands.c | 227 +++++++++++++++++++-------------------------- 1 file changed, 98 insertions(+), 129 deletions(-) diff --git a/src/lxc/commands.c b/src/lxc/commands.c index 3156f58645..3226ee1fdd 100644 --- a/src/lxc/commands.c +++ b/src/lxc/commands.c @@ -191,20 +191,16 @@ static int lxc_cmd_rsp_send(int fd, struct lxc_cmd_rsp *rsp) errno = EMSGSIZE; ret = lxc_send_nointr(fd, rsp, sizeof(*rsp), MSG_NOSIGNAL); - if (ret < 0 || (size_t)ret != sizeof(*rsp)) { - SYSERROR("Failed to send command response %zd", ret); - return -1; - } + if (ret < 0 || (size_t)ret != sizeof(*rsp)) + return log_error_errno(-1, errno, "Failed to send command response %zd", ret); if (!rsp->data || rsp->datalen <= 0) return 0; errno = EMSGSIZE; ret = lxc_send_nointr(fd, rsp->data, rsp->datalen, MSG_NOSIGNAL); - if (ret < 0 || ret != (ssize_t)rsp->datalen) { - SYSWARN("Failed to send command response data %zd", ret); - return -1; - } + if (ret < 0 || ret != (ssize_t)rsp->datalen) + return log_warn_errno(-1, errno, "Failed to send command response data %zd", ret); return 0; } @@ -277,13 +273,11 @@ static int lxc_cmd(const char *name, struct lxc_cmd_rr *cmd, int *stopped, client_fd = lxc_cmd_send(name, cmd, lxcpath, hashed_sock_name); if (client_fd < 0) { - SYSTRACE("Command \"%s\" failed to connect command socket", - lxc_cmd_str(cmd->req.cmd)); - if (errno == ECONNREFUSED || errno == EPIPE) *stopped = 1; - return -1; + return log_trace_errno(-1, errno, "Command \"%s\" failed to connect command socket", + lxc_cmd_str(cmd->req.cmd)); } ret = lxc_cmd_rsp_recv(client_fd, cmd); @@ -335,13 +329,13 @@ int lxc_try_cmd(const char *name, const char *lxcpath) pid_t lxc_cmd_get_init_pid(const char *name, const char *lxcpath) { int ret, stopped; - intmax_t pid; + intmax_t pid = -1; struct lxc_cmd_rr cmd = { .req = { .cmd = LXC_CMD_GET_INIT_PID }, .rsp = { - .data = INTMAX_TO_PTR((intmax_t){-1}) + .data = INTMAX_TO_PTR(pid) } }; @@ -384,7 +378,9 @@ int lxc_cmd_get_clone_flags(const char *name, const char *lxcpath) { int ret, stopped; struct lxc_cmd_rr cmd = { - .req = { .cmd = LXC_CMD_GET_CLONE_FLAGS }, + .req = { + .cmd = LXC_CMD_GET_CLONE_FLAGS, + }, }; ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); @@ -398,7 +394,9 @@ static int lxc_cmd_get_clone_flags_callback(int fd, struct lxc_cmd_req *req, struct lxc_handler *handler, struct lxc_epoll_descr *descr) { - struct lxc_cmd_rsp rsp = { .data = INT_TO_PTR(handler->ns_clone_flags) }; + struct lxc_cmd_rsp rsp = { + .data = INT_TO_PTR(handler->ns_clone_flags), + }; return lxc_cmd_rsp_send(fd, &rsp); } @@ -544,7 +542,9 @@ int lxc_cmd_get_state(const char *name, const char *lxcpath) { int ret, stopped; struct lxc_cmd_rr cmd = { - .req = { .cmd = LXC_CMD_GET_STATE } + .req = { + .cmd = LXC_CMD_GET_STATE, + }, }; ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); @@ -554,22 +554,21 @@ int lxc_cmd_get_state(const char *name, const char *lxcpath) if (ret < 0) return -1; - if (!ret) { - WARN("Container \"%s\" has stopped before sending its state", name); - return -1; - } - - DEBUG("Container \"%s\" is in \"%s\" state", name, - lxc_state2str(PTR_TO_INT(cmd.rsp.data))); + if (!ret) + return log_warn(-1, "Container \"%s\" has stopped before sending its state", name); - return PTR_TO_INT(cmd.rsp.data); + return log_debug(PTR_TO_INT(cmd.rsp.data), + "Container \"%s\" is in \"%s\" state", name, + lxc_state2str(PTR_TO_INT(cmd.rsp.data))); } static int lxc_cmd_get_state_callback(int fd, struct lxc_cmd_req *req, struct lxc_handler *handler, struct lxc_epoll_descr *descr) { - struct lxc_cmd_rsp rsp = { .data = INT_TO_PTR(handler->state) }; + struct lxc_cmd_rsp rsp = { + .data = INT_TO_PTR(handler->state), + }; return lxc_cmd_rsp_send(fd, &rsp); } @@ -587,15 +586,15 @@ int lxc_cmd_stop(const char *name, const char *lxcpath) { int ret, stopped; struct lxc_cmd_rr cmd = { - .req = { .cmd = LXC_CMD_STOP }, + .req = { + .cmd = LXC_CMD_STOP, + }, }; ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); if (ret < 0) { - if (stopped) { - INFO("Container \"%s\" is already stopped", name); - return 0; - } + if (stopped) + return log_info(0, "Container \"%s\" is already stopped", name); return -1; } @@ -603,14 +602,10 @@ int lxc_cmd_stop(const char *name, const char *lxcpath) /* We do not expect any answer, because we wait for the connection to be * closed. */ - if (ret > 0) { - errno = -cmd.rsp.ret; - SYSERROR("Failed to stop container \"%s\"", name); - return -1; - } + if (ret > 0) + return log_error_errno(-1, -cmd.rsp.ret, "Failed to stop container \"%s\"", name); - INFO("Container \"%s\" has stopped", name); - return 0; + return log_info(0, "Container \"%s\" has stopped", name); } static int lxc_cmd_stop_callback(int fd, struct lxc_cmd_req *req, @@ -657,7 +652,7 @@ static int lxc_cmd_terminal_winch_callback(int fd, struct lxc_cmd_req *req, struct lxc_epoll_descr *descr) { /* should never be called */ - return -1; + return log_error_errno(-1, ENOSYS, "Called lxc_cmd_terminal_winch_callback()"); } /* @@ -676,7 +671,10 @@ int lxc_cmd_console(const char *name, int *ttynum, int *fd, const char *lxcpath) __do_free struct lxc_cmd_console_rsp_data *rspdata = NULL; int ret, stopped; struct lxc_cmd_rr cmd = { - .req = { .cmd = LXC_CMD_CONSOLE, .data = INT_TO_PTR(*ttynum) }, + .req = { + .cmd = LXC_CMD_CONSOLE, + .data = INT_TO_PTR(*ttynum), + }, }; ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); @@ -684,28 +682,20 @@ int lxc_cmd_console(const char *name, int *ttynum, int *fd, const char *lxcpath) return ret; rspdata = cmd.rsp.data; - if (cmd.rsp.ret < 0) { - errno = -cmd.rsp.ret; - SYSERROR("Denied access to tty"); - return -1; - } + if (cmd.rsp.ret < 0) + return log_error_errno(-1, -cmd.rsp.ret, "Denied access to tty"); - if (ret == 0) { - ERROR("tty number %d invalid, busy or all ttys busy", *ttynum); - return -1; - } + if (ret == 0) + return log_error(-1, "tty number %d invalid, busy or all ttys busy", *ttynum); - if (rspdata->masterfd < 0) { - ERROR("Unable to allocate fd for tty %d", rspdata->ttynum); - return -1; - } + if (rspdata->masterfd < 0) + return log_error(-1, "Unable to allocate fd for tty %d", rspdata->ttynum); ret = cmd.rsp.ret; /* socket fd */ *fd = rspdata->masterfd; *ttynum = rspdata->ttynum; - INFO("Alloced fd %d for tty %d via socket %d", *fd, rspdata->ttynum, ret); - return ret; + return log_info(ret, "Alloced fd %d for tty %d via socket %d", *fd, rspdata->ttynum, ret); } static int lxc_cmd_console_callback(int fd, struct lxc_cmd_req *req, @@ -749,7 +739,9 @@ char *lxc_cmd_get_name(const char *hashed_sock_name) { int ret, stopped; struct lxc_cmd_rr cmd = { - .req = { .cmd = LXC_CMD_GET_NAME}, + .req = { + .cmd = LXC_CMD_GET_NAME, + }, }; ret = lxc_cmd(NULL, &cmd, &stopped, NULL, hashed_sock_name); @@ -788,7 +780,9 @@ char *lxc_cmd_get_lxcpath(const char *hashed_sock_name) { int ret, stopped; struct lxc_cmd_rr cmd = { - .req = { .cmd = LXC_CMD_GET_LXCPATH}, + .req = { + .cmd = LXC_CMD_GET_LXCPATH, + }, }; ret = lxc_cmd(NULL, &cmd, &stopped, NULL, hashed_sock_name); @@ -805,13 +799,11 @@ static int lxc_cmd_get_lxcpath_callback(int fd, struct lxc_cmd_req *req, struct lxc_handler *handler, struct lxc_epoll_descr *descr) { - struct lxc_cmd_rsp rsp; - - memset(&rsp, 0, sizeof(rsp)); - - rsp.ret = 0; - rsp.data = (char *)handler->lxcpath; - rsp.datalen = strlen(handler->lxcpath) + 1; + struct lxc_cmd_rsp rsp = { + .ret = 0, + .data = (char *)handler->lxcpath, + .datalen = strlen(handler->lxcpath) + 1, + }; return lxc_cmd_rsp_send(fd, &rsp); } @@ -824,11 +816,11 @@ int lxc_cmd_add_state_client(const char *name, const char *lxcpath, int state, stopped; ssize_t ret; struct lxc_cmd_rr cmd = { - .req = { - .cmd = LXC_CMD_ADD_STATE_CLIENT, - .data = states, - .datalen = (sizeof(lxc_state_t) * MAX_STATE) - }, + .req = { + .cmd = LXC_CMD_ADD_STATE_CLIENT, + .data = states, + .datalen = (sizeof(lxc_state_t) * MAX_STATE) + }, }; ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); @@ -846,21 +838,15 @@ int lxc_cmd_add_state_client(const char *name, const char *lxcpath, * function. */ clientfd = cmd.rsp.ret; - if (clientfd < 0) { - errno = -clientfd; - SYSERROR("Failed to receive socket fd"); - return -1; - } + if (clientfd < 0) + return log_error_errno(-1, -clientfd, "Failed to receive socket fd"); state = PTR_TO_INT(cmd.rsp.data); - if (state < MAX_STATE) { - TRACE("Container is already in requested state %s", lxc_state2str(state)); - return state; - } + if (state < MAX_STATE) + return log_trace(state, "Container is already in requested state %s", lxc_state2str(state)); *state_client_fd = move_fd(clientfd); - TRACE("Added state client %d to state client list", *state_client_fd); - return MAX_STATE; + return log_trace(MAX_STATE, "Added state client %d to state client list", *state_client_fd); } static int lxc_cmd_add_state_client_callback(__owns int fd, struct lxc_cmd_req *req, @@ -908,11 +894,11 @@ int lxc_cmd_add_bpf_device_cgroup(const char *name, const char *lxcpath, #ifdef HAVE_STRUCT_BPF_CGROUP_DEV_CTX int stopped = 0; struct lxc_cmd_rr cmd = { - .req = { - .cmd = LXC_CMD_ADD_BPF_DEVICE_CGROUP, - .data = device, - .datalen = sizeof(struct device_item), - }, + .req = { + .cmd = LXC_CMD_ADD_BPF_DEVICE_CGROUP, + .data = device, + .datalen = sizeof(struct device_item), + }, }; int ret; @@ -1094,17 +1080,15 @@ int lxc_cmd_serve_state_clients(const char *name, const char *lxcpath, int stopped; ssize_t ret; struct lxc_cmd_rr cmd = { - .req = { - .cmd = LXC_CMD_SERVE_STATE_CLIENTS, - .data = INT_TO_PTR(state) - }, + .req = { + .cmd = LXC_CMD_SERVE_STATE_CLIENTS, + .data = INT_TO_PTR(state) + }, }; ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); - if (ret < 0) { - SYSERROR("Failed to execute command"); - return -1; - } + if (ret < 0) + return log_error_errno(-1, errno, "Failed to serve state clients"); return 0; } @@ -1128,8 +1112,9 @@ static int lxc_cmd_serve_state_clients_callback(int fd, struct lxc_cmd_req *req, return 0; reap_client_fd: - /* Special indicator to lxc_cmd_handler() to close the fd and do related - * cleanup. + /* + * Special indicator to lxc_cmd_handler() to close the fd and do + * related cleanup. */ return 1; } @@ -1150,10 +1135,8 @@ int lxc_cmd_seccomp_notify_add_listener(const char *name, const char *lxcpath, }; ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); - if (ret < 0) { - SYSERROR("Failed to execute command"); - return -1; - } + if (ret < 0) + return log_error_errno(-1, errno, "Failed to add seccomp listener"); return cmd.rsp.ret; #else @@ -1224,7 +1207,7 @@ static int lxc_cmd_freeze_callback(int fd, struct lxc_cmd_req *req, { int timeout = PTR_TO_INT(req->data); struct lxc_cmd_rsp rsp = { - .ret = -ENOENT, + .ret = -ENOENT, }; struct cgroup_ops *ops = handler->cgroup_ops; @@ -1257,7 +1240,7 @@ static int lxc_cmd_unfreeze_callback(int fd, struct lxc_cmd_req *req, { int timeout = PTR_TO_INT(req->data); struct lxc_cmd_rsp rsp = { - .ret = -ENOENT, + .ret = -ENOENT, }; struct cgroup_ops *ops = handler->cgroup_ops; @@ -1451,28 +1434,20 @@ static int lxc_cmd_accept(int fd, uint32_t events, void *data, int opt = 1, ret = -1; connection = accept(fd, NULL, 0); - if (connection < 0) { - SYSERROR("Failed to accept connection to run command"); - return LXC_MAINLOOP_ERROR; - } + if (connection < 0) + return log_error_errno(LXC_MAINLOOP_ERROR, errno, "Failed to accept connection to run command"); ret = fcntl(connection, F_SETFD, FD_CLOEXEC); - if (ret < 0) { - SYSERROR("Failed to set close-on-exec on incoming command connection"); - return ret; - } + if (ret < 0) + return log_error_errno(ret, "Failed to set close-on-exec on incoming command connection"); ret = setsockopt(connection, SOL_SOCKET, SO_PASSCRED, &opt, sizeof(opt)); - if (ret < 0) { - SYSERROR("Failed to enable necessary credentials on command socket"); - return ret; - } + if (ret < 0) + return log_error_errno(ret, errno, "Failed to enable necessary credentials on command socket"); ret = lxc_mainloop_add_handler(descr, connection, lxc_cmd_handler, data); - if (ret) { - ERROR("Failed to add command handler"); - return ret; - } + if (ret) + return log_error(ret, "Failed to add command handler"); move_fd(connection); return ret; @@ -1490,21 +1465,17 @@ int lxc_cmd_init(const char *name, const char *lxcpath, const char *suffix) fd = lxc_abstract_unix_open(path, SOCK_STREAM, 0); if (fd < 0) { - SYSERROR("Failed to create command socket %s", &path[1]); if (errno == EADDRINUSE) ERROR("Container \"%s\" appears to be already running", name); - return -1; + return log_error_errno(-1, errno, "Failed to create command socket %s", &path[1]); } ret = fcntl(fd, F_SETFD, FD_CLOEXEC); - if (ret < 0) { - SYSERROR("Failed to set FD_CLOEXEC on command socket file descriptor"); - return -1; - } + if (ret < 0) + return log_error_errno(-1, errno, "Failed to set FD_CLOEXEC on command socket file descriptor"); - TRACE("Created abstract unix socket \"%s\"", &path[1]); - return move_fd(fd); + return log_trace(move_fd(fd), "Created abstract unix socket \"%s\"", &path[1]); } int lxc_cmd_mainloop_add(const char *name, struct lxc_epoll_descr *descr, @@ -1514,10 +1485,8 @@ int lxc_cmd_mainloop_add(const char *name, struct lxc_epoll_descr *descr, int ret; ret = lxc_mainloop_add_handler(descr, fd, lxc_cmd_accept, handler); - if (ret < 0) { - ERROR("Failed to add handler for command socket"); - return ret; - } + if (ret < 0) + return log_error(ret, "Failed to add handler for command socket"); move_fd(fd); return ret;
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel