The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/2525

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Signed-off-by: St├ęphane Graber <stgra...@ubuntu.com>
From 89c1be5869838d2751cf5ea84fcad13764ada1fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 18 Oct 2016 17:12:13 -0400
Subject: [PATCH] Only load kernel modules if not loaded
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: St├ęphane Graber <stgra...@ubuntu.com>
---
 lxd/container_lxc.go | 8 ++++----
 lxd/main.go          | 2 +-
 lxd/storage_zfs.go   | 2 +-
 lxd/util.go          | 8 ++++++++
 4 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 5a7ff65..7170548 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -1111,9 +1111,9 @@ func (c *containerLXC) startCommon() (string, error) {
        if kernelModules != "" {
                for _, module := range strings.Split(kernelModules, ",") {
                        module = strings.TrimPrefix(module, " ")
-                       out, err := exec.Command("modprobe", 
module).CombinedOutput()
+                       err := loadModule(module)
                        if err != nil {
-                               return "", fmt.Errorf("Failed to load kernel 
module '%s': %s", module, out)
+                               return "", fmt.Errorf("Failed to load kernel 
module '%s': %s", module, err)
                        }
                }
        }
@@ -2572,9 +2572,9 @@ func (c *containerLXC) Update(args containerArgs, 
userRequested bool) error {
                        } else if key == "linux.kernel_modules" && value != "" {
                                for _, module := range strings.Split(value, 
",") {
                                        module = strings.TrimPrefix(module, " ")
-                                       out, err := exec.Command("modprobe", 
module).CombinedOutput()
+                                       err := loadModule(module)
                                        if err != nil {
-                                               return fmt.Errorf("Failed to 
load kernel module '%s': %s", module, out)
+                                               return fmt.Errorf("Failed to 
load kernel module '%s': %s", module, err)
                                        }
                                }
                        } else if key == "limits.disk.priority" {
diff --git a/lxd/main.go b/lxd/main.go
index 95f71fe..e288faf 100644
--- a/lxd/main.go
+++ b/lxd/main.go
@@ -621,7 +621,7 @@ func cmdInit() error {
        // Detect zfs
        out, err := exec.LookPath("zfs")
        if err == nil && len(out) != 0 && !runningInUserns {
-               _ = shared.RunCommand("modprobe", "zfs")
+               _ = loadModule("zfs")
 
                err := shared.RunCommand("zpool", "list")
                if err == nil {
diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index 36d7819..8d59b57 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -52,7 +52,7 @@ func (s *storageZfs) Init(config map[string]interface{}) 
(storage, error) {
        err = s.zfsCheckPool(s.zfsPool)
        if err != nil {
                if shared.PathExists(shared.VarPath("zfs.img")) {
-                       _ = exec.Command("modprobe", "zfs").Run()
+                       _ = loadModule("zfs")
 
                        output, err := exec.Command("zpool", "import",
                                "-d", shared.VarPath(), 
s.zfsPool).CombinedOutput()
diff --git a/lxd/util.go b/lxd/util.go
index a496f82..cce5ffb 100644
--- a/lxd/util.go
+++ b/lxd/util.go
@@ -57,3 +57,11 @@ func etagCheck(r *http.Request, data interface{}) error {
 
        return nil
 }
+
+func loadModule(module string) error {
+       if shared.PathExists(fmt.Sprintf("/sys/module/%s", module)) {
+               return nil
+       }
+
+       return shared.RunCommand("modprobe", module)
+}
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to