[PATCH] Load nbd module before running qemu-nbd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



So far qemu-nbd is run even if the nbd kernel module isn't loaded. This
leads to errors when the user starts his lxc container while libvirt
could easily load the nbd module automatically.
---
 src/util/virfile.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/util/virfile.c b/src/util/virfile.c
index 61f6e4d..76f1b7a 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -63,6 +63,7 @@
 #include "vircommand.h"
 #include "virerror.h"
 #include "virfile.h"
+#include "virkmod.h"
 #include "virlog.h"
 #include "virprocess.h"
 #include "virstring.h"
@@ -745,6 +746,7 @@ int virFileLoopDeviceAssociate(const char *file,
 
 
 # define SYSFS_BLOCK_DIR "/sys/block"
+# define NBD_DRIVER "nbd"
 
 
 static int
@@ -811,18 +813,42 @@ virFileNBDDeviceFindUnused(void)
     return ret;
 }
 
+static bool
+virFileNBDLoadDriver(void)
+{
+    if (virKModIsBlacklisted(NBD_DRIVER)) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("Failed to load nbd module: "
+                         "administratively prohibited"));
+        return false;
+    } else {
+        char *errbuf = NULL;
+
+        if ((errbuf = virKModLoad(NBD_DRIVER, true))) {
+            VIR_FREE(errbuf);
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           _("Failed to load nbd module"));
+            return false;
+        }
+        VIR_FREE(errbuf);
+    }
+    return true;
+}
 
 int virFileNBDDeviceAssociate(const char *file,
                               virStorageFileFormat fmt,
                               bool readonly,
                               char **dev)
 {
-    char *nbddev;
+    char *nbddev = NULL;
     char *qemunbd = NULL;
     virCommandPtr cmd = NULL;
     int ret = -1;
     const char *fmtstr = NULL;
 
+    if (!virFileNBDLoadDriver())
+        goto cleanup;
+
     if (!(nbddev = virFileNBDDeviceFindUnused()))
         goto cleanup;
 
-- 
2.1.4

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]