[lxc-devel] [lxc/master] commands: cleanup

brauner on Github lxc-bot at linuxcontainers.org
Tue Mar 10 10:31:48 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 364 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200310/791928bf/attachment-0001.bin>
-------------- next part --------------
From 3e8c1de496d401def43b9ad6f8d559f7a7751636 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Tue, 10 Mar 2020 11:31:07 +0100
Subject: [PATCH] commands: cleanup

Signed-off-by: Christian Brauner <christian.brauner at 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;


More information about the lxc-devel mailing list