]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
qemu: Support readonly filesystem passthrough
authorOsier Yang <jyang@redhat.com>
Wed, 21 Dec 2011 15:51:29 +0000 (23:51 +0800)
committerOsier Yang <jyang@redhat.com>
Thu, 22 Dec 2011 04:29:58 +0000 (12:29 +0800)
Upstream QEMU starts to support it from commit 2c74c2cb.

docs/formatdomain.html.in
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_command.c

index c57b7b3c9659113c780f76fe04ef783a55536030..9cf0f123bcb02a5d9bde2e9b02d4dc9d63e255ea 100644 (file)
 
       <dt><code>readonly</code></dt>
       <dd>
-      An optional <code>readonly</code> attribute is available but currently
-      unused.
+        Enables exporting filesytem as a readonly mount for guest, by
+        default read-write access is given (currently only works for
+        QEMU/KVM driver).
       </dd>
     </dl>
 
index de2bc13228c93022c558af37620875ccc5428047..43c75787d63722106335eb8236ca2dbf36844782 100644 (file)
@@ -143,6 +143,7 @@ VIR_ENUM_IMPL(qemuCaps, QEMU_CAPS_LAST,
               "rombar",
               "ich9-ahci",
               "no-acpi",
+              "fsdev-readonly",
     );
 
 struct qemu_feature_flags {
@@ -981,6 +982,7 @@ qemuCapsComputeCmdFlags(const char *help,
                         virBitmapPtr flags)
 {
     const char *p;
+    const char *fsdev;
 
     if (strstr(help, "-no-kqemu"))
         qemuCapsSet(flags, QEMU_CAPS_KQEMU);
@@ -1077,8 +1079,11 @@ qemuCapsComputeCmdFlags(const char *help,
         qemuCapsSet(flags, QEMU_CAPS_NESTING);
     if (strstr(help, ",menu=on"))
         qemuCapsSet(flags, QEMU_CAPS_BOOT_MENU);
-    if (strstr(help, "-fsdev"))
+    if ((fsdev = strstr(help, "-fsdev"))) {
         qemuCapsSet(flags, QEMU_CAPS_FSDEV);
+        if (strstr(fsdev, "readonly"))
+            qemuCapsSet(flags, QEMU_CAPS_FSDEV_READONLY);
+    }
     if (strstr(help, "-smbios type"))
         qemuCapsSet(flags, QEMU_CAPS_SMBIOS_TYPE);
 
index 08d84576e62f3460f9a4aab3f2d54bc23faf1d39..c759baf0e260e51a75df44de9e20f5684eb0126e 100644 (file)
@@ -116,6 +116,7 @@ enum qemuCapsFlags {
     QEMU_CAPS_PCI_ROMBAR         = 76, /* -device rombar=0|1 */
     QEMU_CAPS_ICH9_AHCI         = 77, /* -device ich9-ahci */
     QEMU_CAPS_NO_ACPI          = 78, /* -no-acpi */
+    QEMU_CAPS_FSDEV_READONLY    =79, /* -fsdev readonly supported */
 
     QEMU_CAPS_LAST,                   /* this must always be the last item */
 };
index 9d3bc23aaae91949103e6299cbf870c967732713..ea1b76335da7c848767b9be2c89d3972b89c7eb3 100644 (file)
@@ -2108,6 +2108,17 @@ char *qemuBuildFSStr(virDomainFSDefPtr fs,
     virBufferAsprintf(&opt, ",id=%s%s", QEMU_FSDEV_HOST_PREFIX, fs->info.alias);
     virBufferAsprintf(&opt, ",path=%s", fs->src);
 
+    if (fs->readonly) {
+        if (qemuCapsGet(qemuCaps, QEMU_CAPS_FSDEV_READONLY)) {
+            virBufferAddLit(&opt, ",readonly");
+        } else {
+            qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                            _("readonly filesystem is not supported by this "
+                              "QEMU binary"));
+            goto error;
+        }
+    }
+
     if (virBufferError(&opt)) {
         virReportOOMError();
         goto error;