From: Frederic Crozat <fcrozat@suse.com>
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(-)

diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
index 7b19ee0..36b1a68 100644
--- a/src/modules-load/modules-load.c
+++ b/src/modules-load/modules-load.c
@@ -262,6 +262,9 @@ static int parse_argv(int argc, char *argv[]) {
 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);
diff --git a/units/systemd-modules-load.service.in b/units/systemd-modules-load.service.in
index 32deb52..2e26d2f 100644
--- a/units/systemd-modules-load.service.in
+++ b/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