qga/commands-posix: execute_fsfreeze_hook: use ga_run_command helper
There's no need to check for the existence of the hook executable, as the exec() call will do that for us. Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> Link: https://lore.kernel.org/r/20240320161648.158226-6-andrey.drobyshev@virtuozzo.com Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
This commit is contained in:
parent
1fce82bc40
commit
8ef383b460
@ -736,8 +736,6 @@ static const char *fsfreeze_hook_arg_string[] = {
|
||||
|
||||
static void execute_fsfreeze_hook(FsfreezeHookArg arg, Error **errp)
|
||||
{
|
||||
int status;
|
||||
pid_t pid;
|
||||
const char *hook;
|
||||
const char *arg_str = fsfreeze_hook_arg_string[arg];
|
||||
Error *local_err = NULL;
|
||||
@ -746,42 +744,15 @@ static void execute_fsfreeze_hook(FsfreezeHookArg arg, Error **errp)
|
||||
if (!hook) {
|
||||
return;
|
||||
}
|
||||
if (access(hook, X_OK) != 0) {
|
||||
error_setg_errno(errp, errno, "can't access fsfreeze hook '%s'", hook);
|
||||
return;
|
||||
}
|
||||
|
||||
const char *argv[] = {hook, arg_str, NULL};
|
||||
|
||||
slog("executing fsfreeze hook with arg '%s'", arg_str);
|
||||
pid = fork();
|
||||
if (pid == 0) {
|
||||
setsid();
|
||||
reopen_fd_to_null(0);
|
||||
reopen_fd_to_null(1);
|
||||
reopen_fd_to_null(2);
|
||||
|
||||
execl(hook, hook, arg_str, NULL);
|
||||
_exit(EXIT_FAILURE);
|
||||
} else if (pid < 0) {
|
||||
error_setg_errno(errp, errno, "failed to create child process");
|
||||
return;
|
||||
}
|
||||
|
||||
ga_wait_child(pid, &status, &local_err);
|
||||
ga_run_command(argv, NULL, "execute fsfreeze hook", &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!WIFEXITED(status)) {
|
||||
error_setg(errp, "fsfreeze hook has terminated abnormally");
|
||||
return;
|
||||
}
|
||||
|
||||
status = WEXITSTATUS(status);
|
||||
if (status) {
|
||||
error_setg(errp, "fsfreeze hook has failed with status %d", status);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user