X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fkmod-setup.c;h=97b7c870b16797a2f56f26e2747d812d124ca694;hp=e3925c5ac92bf0dc450a5d60032cd34a4353157c;hb=bbc732830876ce75a95c57ccf8677f74e4569efc;hpb=17586c16bac1d5ecf7d60ef57d18e82e36c288c1 diff --git a/src/kmod-setup.c b/src/kmod-setup.c index e3925c5ac..97b7c870b 100644 --- a/src/kmod-setup.c +++ b/src/kmod-setup.c @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*** This file is part of systemd. @@ -41,16 +41,16 @@ int kmod_setup(void) { ExecCommand command; ExecContext context; pid_t pid; - int status, r; + int r; for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { if (access(kmod_table[i+1], F_OK) >= 0) continue; - log_info("Your kernel apparently lacks built-in %s support. Please fix that. " - "We'll now try to work around this by calling '/sbin/modprobe %s'...", - kmod_table[i], kmod_table[i]); + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by calling '/sbin/modprobe %s'...", + kmod_table[i], kmod_table[i]); cmdline[3 + n++] = kmod_table[i]; } @@ -70,39 +70,13 @@ int kmod_setup(void) { command.argv = (char**) cmdline; exec_context_init(&context); - r = exec_spawn(&command, NULL, &context, NULL, 0, NULL, false, false, false, NULL, &pid); + r = exec_spawn(&command, NULL, &context, NULL, 0, NULL, false, false, false, false, NULL, &pid); exec_context_done(&context); - if (r < 0) + if (r < 0) { + log_error("Failed to spawn %s: %s", cmdline[0], strerror(-r)); return r; - - for (;;) { - if (waitpid(pid, &status, 0) < 0) { - - if (errno == EINTR) - continue; - - return -errno; - } - - break; - } - - if (WIFEXITED(status)) { - if (WEXITSTATUS(status) != 0) { - log_warning("/sbin/modprobe failed with error code %i.", WEXITSTATUS(status)); - return -EPROTO; - } - - log_debug("/sbin/modprobe succeeded."); - return 0; - } - - if (WIFSIGNALED(status)) { - log_warning("/sbin/modprobe terminated by signal %s.", strsignal(WTERMSIG(status))); - return -EPROTO; } - log_warning("/sbin/modprobe failed due to unknown reason."); - return -EPROTO; + return wait_for_terminate_and_warn(cmdline[0], pid); }