Commit f2978d2a authored by Pavel Emelyanov's avatar Pavel Emelyanov

parasite: Reshuffle sync and async daemon-node executing routines

The version, that might not wait for ack is always called with
"async" flag set. Cleanup things according to this.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 0dc835ac
...@@ -62,10 +62,15 @@ extern int parasite_dump_posix_timers_seized(struct proc_posix_timers_stat *proc ...@@ -62,10 +62,15 @@ extern int parasite_dump_posix_timers_seized(struct proc_posix_timers_stat *proc
}) })
extern void *parasite_args_s(struct parasite_ctl *ctl, int args_size); extern void *parasite_args_s(struct parasite_ctl *ctl, int args_size);
extern int parasite_execute_daemon(unsigned int cmd, struct parasite_ctl *ctl);
extern int parasite_send_fd(struct parasite_ctl *ctl, int fd); extern int parasite_send_fd(struct parasite_ctl *ctl, int fd);
extern int __parasite_execute_daemon(unsigned int cmd,
struct parasite_ctl *ctl, bool wait_ack); /*
* Execute a command in parasite when it's in daemon mode.
* The __-ed version is asyncronous (doesn't wait for ack).
*/
extern int parasite_execute_daemon(unsigned int cmd, struct parasite_ctl *ctl);
extern int __parasite_execute_daemon(unsigned int cmd, struct parasite_ctl *ctl);
extern int __parasite_execute_daemon_wait_ack(unsigned int cmd, extern int __parasite_execute_daemon_wait_ack(unsigned int cmd,
struct parasite_ctl *ctl); struct parasite_ctl *ctl);
......
...@@ -370,7 +370,7 @@ static int __parasite_dump_pages_seized(struct parasite_ctl *ctl, ...@@ -370,7 +370,7 @@ static int __parasite_dump_pages_seized(struct parasite_ctl *ctl,
pr_debug("PPB: %d pages %d segs %u pipe %d off\n", pr_debug("PPB: %d pages %d segs %u pipe %d off\n",
args->nr_pages, args->nr_segs, ppb->pipe_size, args->off); args->nr_pages, args->nr_segs, ppb->pipe_size, args->off);
ret = __parasite_execute_daemon(PARASITE_CMD_DUMPPAGES, ctl, false); ret = __parasite_execute_daemon(PARASITE_CMD_DUMPPAGES, ctl);
if (ret < 0) if (ret < 0)
goto out_pp; goto out_pp;
ret = parasite_send_fd(ctl, ppb->p[1]); ret = parasite_send_fd(ctl, ppb->p[1]);
......
...@@ -288,25 +288,23 @@ int __parasite_execute_daemon_wait_ack(unsigned int cmd, ...@@ -288,25 +288,23 @@ int __parasite_execute_daemon_wait_ack(unsigned int cmd,
return 0; return 0;
} }
int __parasite_execute_daemon(unsigned int cmd, int __parasite_execute_daemon(unsigned int cmd, struct parasite_ctl *ctl)
struct parasite_ctl *ctl, bool wait_ack)
{ {
struct ctl_msg m; struct ctl_msg m;
m = ctl_msg_cmd(cmd); m = ctl_msg_cmd(cmd);
if (__parasite_send_cmd(ctl->tsock, &m)) return __parasite_send_cmd(ctl->tsock, &m);
return -1;
if (wait_ack)
return __parasite_execute_daemon_wait_ack(cmd, ctl);
return 0;
} }
int parasite_execute_daemon(unsigned int cmd, int parasite_execute_daemon(unsigned int cmd, struct parasite_ctl *ctl)
struct parasite_ctl *ctl)
{ {
return __parasite_execute_daemon(cmd, ctl, true); int ret;
ret = __parasite_execute_daemon(cmd, ctl);
if (!ret)
ret = __parasite_execute_daemon_wait_ack(cmd, ctl);
return ret;
} }
static int munmap_seized(struct parasite_ctl *ctl, void *addr, size_t length) static int munmap_seized(struct parasite_ctl *ctl, void *addr, size_t length)
...@@ -668,7 +666,7 @@ int parasite_drain_fds_seized(struct parasite_ctl *ctl, ...@@ -668,7 +666,7 @@ int parasite_drain_fds_seized(struct parasite_ctl *ctl,
args = parasite_args_s(ctl, size); args = parasite_args_s(ctl, size);
memcpy(args, dfds, size); memcpy(args, dfds, size);
ret = __parasite_execute_daemon(PARASITE_CMD_DRAIN_FDS, ctl, false); ret = __parasite_execute_daemon(PARASITE_CMD_DRAIN_FDS, ctl);
if (ret) { if (ret) {
pr_err("Parasite failed to drain descriptors\n"); pr_err("Parasite failed to drain descriptors\n");
goto err; goto err;
...@@ -687,7 +685,7 @@ int parasite_get_proc_fd_seized(struct parasite_ctl *ctl) ...@@ -687,7 +685,7 @@ int parasite_get_proc_fd_seized(struct parasite_ctl *ctl)
{ {
int ret = -1, fd; int ret = -1, fd;
ret = __parasite_execute_daemon(PARASITE_CMD_GET_PROC_FD, ctl, false); ret = __parasite_execute_daemon(PARASITE_CMD_GET_PROC_FD, ctl);
if (ret) { if (ret) {
pr_err("Parasite failed to get proc fd\n"); pr_err("Parasite failed to get proc fd\n");
return ret; return ret;
...@@ -756,7 +754,7 @@ static int parasite_fini_seized(struct parasite_ctl *ctl) ...@@ -756,7 +754,7 @@ static int parasite_fini_seized(struct parasite_ctl *ctl)
return -1; return -1;
} }
ret = __parasite_execute_daemon(PARASITE_CMD_FINI, ctl, false); ret = __parasite_execute_daemon(PARASITE_CMD_FINI, ctl);
close_safe(&ctl->tsock); close_safe(&ctl->tsock);
if (ret) if (ret)
return -1; return -1;
......
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