From: Frederic Crozat Date: Wed, 12 Oct 2011 15:18:29 +0200 Subject: module-load: handle SUSE /etc/sysconfig/kernel module list --- src/modules-load/modules-load.c | 27 ++++++++++++++++++++++++++- units/systemd-modules-load.service.in | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) --- systemd-206.orig/src/modules-load/modules-load.c +++ systemd-206/src/modules-load/modules-load.c @@ -262,6 +262,9 @@ static int parse_argv(int argc, char *ar int main(int argc, char *argv[]) { int r, k; struct kmod_ctx *ctx; +#ifdef HAVE_SYSV_COMPAT + _cleanup_free_ char *modules_on_boot = NULL; +#endif r = parse_argv(argc, argv); if (r <= 0) @@ -318,7 +321,29 @@ int main(int argc, char *argv[]) { r = k; } } - +#ifdef HAVE_SYSV_COMPAT + log_debug("apply: /etc/sysconfig/kernel MODULES_LOADED_ON_BOOT"); + if ((r = parse_env_file("/etc/sysconfig/kernel", NEWLINE, + "MODULES_LOADED_ON_BOOT", &modules_on_boot, + NULL)) < 0) { + if (r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/kernel: %s", strerror(-r)); + } else + r = EXIT_SUCCESS; + if (modules_on_boot) { + char **modules = strv_split(modules_on_boot,WHITESPACE); + char **module; + + if (modules) { + STRV_FOREACH(module, modules) { + k = load_module(ctx, *module); + if (k < 0) + r = EXIT_FAILURE; + } + } + strv_free(modules); + } +#endif finish: kmod_unref(ctx); strv_free(arg_proc_cmdline_modules); --- systemd-206.orig/units/systemd-modules-load.service.in +++ systemd-206/units/systemd-modules-load.service.in @@ -13,6 +13,7 @@ Conflicts=shutdown.target After=systemd-readahead-collect.service systemd-readahead-replay.service Before=sysinit.target shutdown.target ConditionCapability=CAP_SYS_MODULE +ConditionPathExists=|/etc/sysconfig/kernel ConditionDirectoryNotEmpty=|/lib/modules-load.d ConditionDirectoryNotEmpty=|/usr/lib/modules-load.d ConditionDirectoryNotEmpty=|/usr/local/lib/modules-load.d