]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
storage: Move readonly and shared flags to disk source from disk def
authorPeter Krempa <pkrempa@redhat.com>
Tue, 24 Jun 2014 13:15:55 +0000 (15:15 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 8 Jul 2014 12:27:19 +0000 (14:27 +0200)
In the future we might need to track state of individual images. Move
the readonly and shared flags to the virStorageSource struct so that we
can keep them in a per-image basis.

19 files changed:
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libxl/libxl_conf.c
src/locking/domain_lock.c
src/lxc/lxc_cgroup.c
src/lxc/lxc_controller.c
src/lxc/lxc_driver.c
src/qemu/qemu_cgroup.c
src/qemu/qemu_command.c
src/qemu/qemu_conf.c
src/qemu/qemu_driver.c
src/qemu/qemu_migration.c
src/security/security_dac.c
src/security/security_selinux.c
src/security/virt-aa-helper.c
src/util/virstoragefile.h
src/vbox/vbox_tmpl.c
src/xenxs/xen_sxpr.c
src/xenxs/xen_xm.c

index ffdbf558de907a5f077b52085fa176752dce2538..70f1103f4cb0917979983c5ef8572fbdb2813dbd 100644 (file)
@@ -5495,9 +5495,9 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
                     goto error;
                 }
             } else if (xmlStrEqual(cur->name, BAD_CAST "readonly")) {
-                def->readonly = true;
+                def->src->readonly = true;
             } else if (xmlStrEqual(cur->name, BAD_CAST "shareable")) {
-                def->shared = true;
+                def->src->shared = true;
             } else if (xmlStrEqual(cur->name, BAD_CAST "transient")) {
                 def->transient = true;
             } else if ((flags & VIR_DOMAIN_XML_INTERNAL_STATUS) &&
@@ -5624,7 +5624,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
 
     /* Force CDROM to be listed as read only */
     if (def->device == VIR_DOMAIN_DISK_DEVICE_CDROM)
-        def->readonly = true;
+        def->src->readonly = true;
 
     if ((def->device == VIR_DOMAIN_DISK_DEVICE_DISK ||
          def->device == VIR_DOMAIN_DISK_DEVICE_LUN) &&
@@ -5646,7 +5646,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
                            snapshot);
             goto error;
         }
-    } else if (def->readonly) {
+    } else if (def->src->readonly) {
         def->snapshot = VIR_DOMAIN_SNAPSHOT_LOCATION_NONE;
     }
 
@@ -13349,7 +13349,8 @@ virDomainDiskDefCheckABIStability(virDomainDiskDefPtr src,
         return false;
     }
 
-    if (src->readonly != dst->readonly || src->shared != dst->shared) {
+    if (src->src->readonly != dst->src->readonly ||
+        src->src->shared != dst->src->shared) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("Target disk access mode does not match source"));
         return false;
@@ -15096,7 +15097,8 @@ virDomainDiskDefFormat(virBufferPtr buf,
         virBufferAsprintf(buf, " sgio='%s'", sgio);
 
     if (def->snapshot &&
-        !(def->snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_NONE && def->readonly))
+        !(def->snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_NONE &&
+          def->src->readonly))
         virBufferAsprintf(buf, " snapshot='%s'",
                           virDomainSnapshotLocationTypeToString(def->snapshot));
     virBufferAddLit(buf, ">\n");
@@ -15235,9 +15237,9 @@ virDomainDiskDefFormat(virBufferPtr buf,
         virBufferAddLit(buf, "</iotune>\n");
     }
 
-    if (def->readonly)
+    if (def->src->readonly)
         virBufferAddLit(buf, "<readonly/>\n");
-    if (def->shared)
+    if (def->src->shared)
         virBufferAddLit(buf, "<shareable/>\n");
     if (def->transient)
         virBufferAddLit(buf, "<transient/>\n");
index a00e30a58670c289ce3f87deebc16e44c3274794..32674e06c0925903d6447f4338c0cb4dfffbae89 100644 (file)
@@ -636,8 +636,6 @@ struct _virDomainDiskDef {
     int copy_on_read; /* enum virDomainDiskCopyOnRead */
     int snapshot; /* virDomainSnapshotLocation, snapshot_conf.h */
     int startupPolicy; /* enum virDomainStartupPolicy */
-    bool readonly;
-    bool shared;
     bool transient;
     virDomainDeviceInfo info;
     bool rawio_specified;
index 8eeaf82d22933357c2d6270ec419fd629da131a4..a1ffdb206301b44bf372451464be6bfb24f7b9db 100644 (file)
@@ -827,7 +827,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
 
     /* XXX is this right? */
     x_disk->removable = 1;
-    x_disk->readwrite = !l_disk->readonly;
+    x_disk->readwrite = !l_disk->src->readonly;
     x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0;
     /* An empty CDROM must have the empty format, otherwise libxl fails. */
     if (x_disk->is_cdrom && !x_disk->pdev_path)
index 4b3f4d48292ff0b12e96779c70d8152f298b74b6..78acaa60614156fe65874a5698bb086c3f026120 100644 (file)
@@ -83,9 +83,9 @@ static int virDomainLockManagerAddDisk(virLockManagerPtr lock,
           type == VIR_STORAGE_TYPE_DIR))
         return 0;
 
-    if (disk->readonly)
+    if (disk->src->readonly)
         diskFlags |= VIR_LOCK_MANAGER_RESOURCE_READONLY;
-    if (disk->shared)
+    if (disk->src->shared)
         diskFlags |= VIR_LOCK_MANAGER_RESOURCE_SHARED;
 
     VIR_DEBUG("Add disk %s", src);
index 39e30ad21e5a016ac054dbe002f9673dd4c970b1..00ff8072fd92b8e994576fb753d76c3955137f16 100644 (file)
@@ -380,7 +380,7 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr def,
 
         if (virCgroupAllowDevicePath(cgroup,
                                      virDomainDiskGetSource(def->disks[i]),
-                                     (def->disks[i]->readonly ?
+                                     (def->disks[i]->src->readonly ?
                                       VIR_CGROUP_DEVICE_READ :
                                       VIR_CGROUP_DEVICE_RW) |
                                      VIR_CGROUP_DEVICE_MKNOD) < 0)
index bc1b96206c14f9822adf07e779a1392586430eb7..4aa7e0292651d14fabbd55beb8d5b750c4058199 100644 (file)
@@ -455,7 +455,7 @@ static int virLXCControllerSetupNBDDeviceDisk(virDomainDiskDefPtr disk)
 
     if (virFileNBDDeviceAssociate(src,
                                   format,
-                                  disk->readonly,
+                                  disk->src->readonly,
                                   &dev) < 0)
         return -1;
 
index b47ac5ed6af2e4cbe4bc7b2e83db76ce03750103..6e6108204b6eb5f92a627e32896bc6a3837c9ada 100644 (file)
@@ -4057,7 +4057,7 @@ lxcDomainAttachDeviceDiskLive(virLXCDriverPtr driver,
         goto cleanup;
     }
 
-    perms = (def->readonly ?
+    perms = (def->src->readonly ?
              VIR_CGROUP_DEVICE_READ :
              VIR_CGROUP_DEVICE_RW) |
         VIR_CGROUP_DEVICE_MKNOD;
index a31558f1700de4916b39ad9d382a8bca66b192f9..3394c682a29cd47cc838b3983aa06c3565bf63f5 100644 (file)
@@ -61,10 +61,10 @@ qemuSetupDiskPathAllow(virDomainDiskDefPtr disk,
 
     VIR_DEBUG("Process path %s for disk", path);
     ret = virCgroupAllowDevicePath(priv->cgroup, path,
-                                   (disk->readonly ? VIR_CGROUP_DEVICE_READ
+                                   (disk->src->readonly ? VIR_CGROUP_DEVICE_READ
                                     : VIR_CGROUP_DEVICE_RW));
     virDomainAuditCgroupPath(vm, priv->cgroup, "allow", path,
-                             disk->readonly ? "r" : "rw", ret == 0);
+                             disk->src->readonly ? "r" : "rw", ret == 0);
 
     /* Get this for root squash NFS */
     if (ret < 0 &&
index fb64cdad3a584dfda4ee751dea93a69f792618ab..f4c0b12c85016ff1b07e1849ce9d088ff7ca0add 100644 (file)
@@ -3344,7 +3344,7 @@ qemuBuildDriveStr(virConnectPtr conn,
                 goto error;
             }
 
-            if (!disk->readonly) {
+            if (!disk->src->readonly) {
                 virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                                _("cannot create virtual FAT disks in read-write mode"));
                 goto error;
@@ -3412,7 +3412,7 @@ qemuBuildDriveStr(virConnectPtr conn,
          disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) &&
         disk->bus != VIR_DOMAIN_DISK_BUS_IDE)
         virBufferAddLit(&opt, ",boot=on");
-    if (disk->readonly &&
+    if (disk->src->readonly &&
         virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_READONLY)) {
         if (disk->bus == VIR_DOMAIN_DISK_BUS_IDE &&
             disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
@@ -3478,7 +3478,7 @@ qemuBuildDriveStr(virConnectPtr conn,
         }
 
         virBufferAsprintf(&opt, ",cache=%s", mode);
-    } else if (disk->shared && !disk->readonly) {
+    } else if (disk->src->shared && !disk->src->readonly) {
         virBufferAddLit(&opt, ",cache=off");
     }
 
@@ -8005,7 +8005,7 @@ qemuBuildCommandLine(virConnectPtr conn,
                                    virStorageFileFormatTypeToString(disk->src->format));
                     goto error;
                 }
-                if (!disk->readonly) {
+                if (!disk->src->readonly) {
                     virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                                    _("cannot create virtual FAT disks in read-write mode"));
                     goto error;
@@ -9629,7 +9629,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
         } else if (STREQ(keywords[i], "media")) {
             if (STREQ(values[i], "cdrom")) {
                 def->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
-                def->readonly = true;
+                def->src->readonly = true;
             } else if (STREQ(values[i], "floppy"))
                 def->device = VIR_DOMAIN_DISK_DEVICE_FLOPPY;
         } else if (STREQ(keywords[i], "format")) {
@@ -9685,7 +9685,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
             }
         } else if (STREQ(keywords[i], "readonly")) {
             if ((values[i] == NULL) || STREQ(values[i], "on"))
-                def->readonly = true;
+                def->src->readonly = true;
         } else if (STREQ(keywords[i], "aio")) {
             if ((def->iomode = virDomainDiskIoTypeFromString(values[i])) < 0) {
                 virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -10853,7 +10853,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
                     disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
                 if (VIR_STRDUP(disk->dst, "hdc") < 0)
                     goto error;
-                disk->readonly = true;
+                disk->src->readonly = true;
             } else {
                 if (STRPREFIX(arg, "-fd")) {
                     disk->device = VIR_DOMAIN_DISK_DEVICE_FLOPPY;
index f92f831cfcaab09cfb18df5d39cf172c2863108c..e62bec00859bf2ae4633b67a37550fa81bbd2ce0 100644 (file)
@@ -906,7 +906,7 @@ qemuAddSharedDevice(virQEMUDriverPtr driver,
     if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
         disk = dev->data.disk;
 
-        if (!disk->shared || !virDomainDiskSourceIsBlockType(disk))
+        if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk))
             return 0;
     } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
         hostdev = dev->data.hostdev;
@@ -1013,7 +1013,7 @@ qemuRemoveSharedDevice(virQEMUDriverPtr driver,
     if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
         disk = dev->data.disk;
 
-        if (!disk->shared || !virDomainDiskSourceIsBlockType(disk))
+        if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk))
             return 0;
     } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
         hostdev = dev->data.hostdev;
index e1425e158cf5ef38fc327b2bcffdb1913ec1c5d3..fd68324735d8483c32a69949672db4e5c2cb6e32 100644 (file)
@@ -12082,7 +12082,7 @@ qemuDomainPrepareDiskChainElement(virQEMUDriverPtr driver,
      * permissions it would have as if part of the disk chain is to
      * temporarily modify the disk in place.  */
     virStorageSource origdisk;
-    bool origreadonly = disk->readonly;
+    bool origreadonly = disk->src->readonly;
     virQEMUDriverConfigPtr cfg = NULL;
     int ret = -1;
 
@@ -12097,7 +12097,7 @@ qemuDomainPrepareDiskChainElement(virQEMUDriverPtr driver,
      * than a full virDomainDiskDef.  */
     memcpy(&origdisk, disk->src, sizeof(origdisk));
     memcpy(disk->src, elem, sizeof(*elem));
-    disk->readonly = mode == VIR_DISK_CHAIN_READ_ONLY;
+    disk->src->readonly = mode == VIR_DISK_CHAIN_READ_ONLY;
 
     if (mode == VIR_DISK_CHAIN_NO_ACCESS) {
         if (virSecurityManagerRestoreDiskLabel(driver->securityManager,
@@ -12120,7 +12120,7 @@ qemuDomainPrepareDiskChainElement(virQEMUDriverPtr driver,
 
  cleanup:
     memcpy(disk->src, &origdisk, sizeof(origdisk));
-    disk->readonly = origreadonly;
+    disk->src->readonly = origreadonly;
     virObjectUnref(cfg);
     return ret;
 }
@@ -12772,7 +12772,7 @@ qemuDomainSnapshotPrepare(virConnectPtr conn,
 
         case VIR_DOMAIN_SNAPSHOT_LOCATION_NONE:
             /* Remember seeing a disk that has snapshot disabled */
-            if (!dom_disk->readonly)
+            if (!dom_disk->src->readonly)
                 forbid_internal = true;
             break;
 
index 7aa772a8df9ce88a57679eba830933d02500e7cb..767d8406356d60fb1be385c12aface4a5b130733 100644 (file)
@@ -1156,7 +1156,8 @@ qemuMigrationStartNBDServer(virQEMUDriverPtr driver,
         virDomainDiskDefPtr disk = vm->def->disks[i];
 
         /* skip shared, RO and source-less disks */
-        if (disk->shared || disk->readonly || !virDomainDiskGetSource(disk))
+        if (disk->src->shared || disk->src->readonly ||
+            !virDomainDiskGetSource(disk))
             continue;
 
         VIR_FREE(diskAlias);
@@ -1262,7 +1263,8 @@ qemuMigrationDriveMirror(virQEMUDriverPtr driver,
         virDomainBlockJobInfo info;
 
         /* skip shared, RO and source-less disks */
-        if (disk->shared || disk->readonly || !virDomainDiskGetSource(disk))
+        if (disk->src->shared || disk->src->readonly ||
+            !virDomainDiskGetSource(disk))
             continue;
 
         VIR_FREE(diskAlias);
@@ -1348,7 +1350,8 @@ qemuMigrationDriveMirror(virQEMUDriverPtr driver,
         virDomainDiskDefPtr disk = vm->def->disks[--lastGood];
 
         /* skip shared, RO disks */
-        if (disk->shared || disk->readonly || !virDomainDiskGetSource(disk))
+        if (disk->src->shared || disk->src->readonly ||
+            !virDomainDiskGetSource(disk))
             continue;
 
         VIR_FREE(diskAlias);
@@ -1411,7 +1414,8 @@ qemuMigrationCancelDriveMirror(qemuMigrationCookiePtr mig,
         virDomainDiskDefPtr disk = vm->def->disks[i];
 
         /* skip shared, RO and source-less disks */
-        if (disk->shared || disk->readonly || !virDomainDiskGetSource(disk))
+        if (disk->src->shared || disk->src->readonly ||
+            !virDomainDiskGetSource(disk))
             continue;
 
         VIR_FREE(diskAlias);
@@ -1540,8 +1544,8 @@ qemuMigrationIsSafe(virDomainDefPtr def)
         /* Our code elsewhere guarantees shared disks are either readonly (in
          * which case cache mode doesn't matter) or used with cache=none */
         if (src &&
-            !disk->shared &&
-            !disk->readonly &&
+            !disk->src->shared &&
+            !disk->src->readonly &&
             disk->cachemode != VIR_DOMAIN_DISK_CACHE_DISABLE) {
             int rc;
 
index 639f9b0afc67a7ddc8537bd400819f48c043d26b..38cb47f4ef075515dc364388c4c2cf137935b92a 100644 (file)
@@ -383,7 +383,7 @@ virSecurityDACRestoreSecurityImageLabelInt(virSecurityManagerPtr mgr,
      * we can't see running VMs using the file on other nodes
      * Safest bet is thus to skip the restore step.
      */
-    if (disk->readonly || disk->shared)
+    if (disk->src->readonly || disk->src->shared)
         return 0;
 
     if (!src)
index 572f8a16b4430394474058c8d2e2a6bbd667d091..7740e6977ed7ba3d233f115f3a4e3d7f9c58b8dc 100644 (file)
@@ -1155,7 +1155,7 @@ virSecuritySELinuxRestoreSecurityImageLabelInt(virSecurityManagerPtr mgr,
      * we can't see running VMs using the file on other nodes
      * Safest bet is thus to skip the restore step.
      */
-    if (disk->readonly || disk->shared)
+    if (disk->src->readonly || disk->src->shared)
         return 0;
 
     if (!src || virDomainDiskGetType(disk) == VIR_STORAGE_TYPE_NETWORK)
@@ -1213,9 +1213,9 @@ virSecuritySELinuxSetSecurityFileLabel(virDomainDiskDefPtr disk,
         ret = virSecuritySELinuxSetFilecon(path, disk_seclabel->label);
     } else if (depth == 0) {
 
-        if (disk->shared) {
+        if (disk->src->shared) {
             ret = virSecuritySELinuxSetFileconOptional(path, data->file_context);
-        } else if (disk->readonly) {
+        } else if (disk->src->readonly) {
             ret = virSecuritySELinuxSetFileconOptional(path, data->content_context);
         } else if (secdef->imagelabel) {
             ret = virSecuritySELinuxSetFileconOptional(path, secdef->imagelabel);
index e54f73f6282ab67ac97d0cccc5d362b1f0113a8e..b5f66f3c01e905021cc1bac4a993daffa0f8751c 100644 (file)
@@ -907,7 +907,7 @@ add_file_path(virDomainDiskDefPtr disk,
     int ret;
 
     if (depth == 0) {
-        if (disk->readonly)
+        if (disk->src->readonly)
             ret = vah_add_file(buf, path, "r");
         else
             ret = vah_add_file(buf, path, "rw");
index 18d3a753b1b79bdd887f40ba8931de8e27fee69d..e0689dbf9894183bf8420c4a8daa193eff5bc937 100644 (file)
@@ -255,6 +255,12 @@ struct _virStorageSource {
     size_t nseclabels;
     virSecurityDeviceLabelDefPtr *seclabels;
 
+    /* Don't ever write to the image */
+    bool readonly;
+
+    /* image is shared across hosts */
+    bool shared;
+
     /* backing chain of the storage source */
     virStorageSourcePtr backingStore;
 
index b27ab027331e90d1481cd5845e6e928a57491878..382508368c40c40debf980d99340be48950f7932 100644 (file)
@@ -2791,7 +2791,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
                 hardDiskPM->vtbl->GetType(hardDiskPM, &hddType);
 
                 if (hddType == HardDiskType_Immutable)
-                    def->disks[hddNum]->readonly = true;
+                    def->disks[hddNum]->src->readonly = true;
                 ignore_value(virDomainDiskSetSource(def->disks[hddNum],
                                                     hddlocation));
                 ignore_value(VIR_STRDUP(def->disks[hddNum]->dst, "hda"));
@@ -2813,7 +2813,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
                 hardDiskPS->vtbl->GetType(hardDiskPS, &hddType);
 
                 if (hddType == HardDiskType_Immutable)
-                    def->disks[hddNum]->readonly = true;
+                    def->disks[hddNum]->src->readonly = true;
                 ignore_value(virDomainDiskSetSource(def->disks[hddNum],
                                                     hddlocation));
                 ignore_value(VIR_STRDUP(def->disks[hddNum]->dst, "hdb"));
@@ -2835,7 +2835,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
                 hardDiskSS->vtbl->GetType(hardDiskSS, &hddType);
 
                 if (hddType == HardDiskType_Immutable)
-                    def->disks[hddNum]->readonly = true;
+                    def->disks[hddNum]->src->readonly = true;
                 ignore_value(virDomainDiskSetSource(def->disks[hddNum],
                                                     hddlocation));
                 ignore_value(VIR_STRDUP(def->disks[hddNum]->dst, "hdd"));
@@ -2977,7 +2977,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
 
                 medium->vtbl->GetReadOnly(medium, &readOnly);
                 if (readOnly == PR_TRUE)
-                    def->disks[diskCount]->readonly = true;
+                    def->disks[diskCount]->src->readonly = true;
 
                 virDomainDiskSetType(def->disks[diskCount],
                                      VIR_STORAGE_TYPE_FILE);
@@ -3257,7 +3257,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
                                 def->disks[def->ndisks - 1]->bus = VIR_DOMAIN_DISK_BUS_IDE;
                                 virDomainDiskSetType(def->disks[def->ndisks - 1],
                                                      VIR_STORAGE_TYPE_FILE);
-                                def->disks[def->ndisks - 1]->readonly = true;
+                                def->disks[def->ndisks - 1]->src->readonly = true;
                                 ignore_value(virDomainDiskSetSource(def->disks[def->ndisks - 1], location));
                                 ignore_value(VIR_STRDUP(def->disks[def->ndisks - 1]->dst, "hdc"));
                                 def->ndisks--;
@@ -3304,7 +3304,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
                                     def->disks[def->ndisks - 1]->bus = VIR_DOMAIN_DISK_BUS_FDC;
                                     virDomainDiskSetType(def->disks[def->ndisks - 1],
                                                          VIR_STORAGE_TYPE_FILE);
-                                    def->disks[def->ndisks - 1]->readonly = false;
+                                    def->disks[def->ndisks - 1]->src->readonly = false;
                                     ignore_value(virDomainDiskSetSource(def->disks[def->ndisks - 1], location));
                                     ignore_value(VIR_STRDUP(def->disks[def->ndisks - 1]->dst, "fda"));
                                     def->ndisks--;
@@ -3910,9 +3910,9 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
         VIR_DEBUG("disk(%zu) driverType: %s", i,
                   virStorageFileFormatTypeToString(format));
         VIR_DEBUG("disk(%zu) cachemode:  %d", i, def->disks[i]->cachemode);
-        VIR_DEBUG("disk(%zu) readonly:   %s", i, (def->disks[i]->readonly
+        VIR_DEBUG("disk(%zu) readonly:   %s", i, (def->disks[i]->src->readonly
                                              ? "True" : "False"));
-        VIR_DEBUG("disk(%zu) shared:     %s", i, (def->disks[i]->shared
+        VIR_DEBUG("disk(%zu) shared:     %s", i, (def->disks[i]->src->shared
                                              ? "True" : "False"));
 
         if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
@@ -4014,11 +4014,11 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
                                          "attached as harddisk: %s, rc=%08x"),
                                        src, (unsigned)rc);
                     } else {
-                        if (def->disks[i]->readonly) {
+                        if (def->disks[i]->src->readonly) {
                             hardDisk->vtbl->SetType(hardDisk,
                                                     HardDiskType_Immutable);
                             VIR_DEBUG("setting harddisk to readonly");
-                        } else if (!def->disks[i]->readonly) {
+                        } else if (!def->disks[i]->src->readonly) {
                             hardDisk->vtbl->SetType(hardDisk,
                                                     HardDiskType_Normal);
                             VIR_DEBUG("setting harddisk type to normal");
@@ -4193,9 +4193,9 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
         VIR_DEBUG("disk(%zu) driverType: %s", i,
                   virStorageFileFormatTypeToString(format));
         VIR_DEBUG("disk(%zu) cachemode:  %d", i, def->disks[i]->cachemode);
-        VIR_DEBUG("disk(%zu) readonly:   %s", i, (def->disks[i]->readonly
+        VIR_DEBUG("disk(%zu) readonly:   %s", i, (def->disks[i]->src->readonly
                                              ? "True" : "False"));
-        VIR_DEBUG("disk(%zu) shared:     %s", i, (def->disks[i]->shared
+        VIR_DEBUG("disk(%zu) shared:     %s", i, (def->disks[i]->src->shared
                                              ? "True" : "False"));
 
         if (type == VIR_STORAGE_TYPE_FILE && src) {
@@ -4317,10 +4317,10 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
             }
 
             if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
-                if (def->disks[i]->readonly) {
+                if (def->disks[i]->src->readonly) {
                     medium->vtbl->SetType(medium, MediumType_Immutable);
                     VIR_DEBUG("setting harddisk to immutable");
-                } else if (!def->disks[i]->readonly) {
+                } else if (!def->disks[i]->src->readonly) {
                     medium->vtbl->SetType(medium, MediumType_Normal);
                     VIR_DEBUG("setting harddisk type to normal");
                 }
@@ -7500,7 +7500,7 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr snapshot,
             goto cleanup;
         }
         if (readOnly == PR_TRUE)
-            def->dom->disks[diskCount]->readonly = true;
+            def->dom->disks[diskCount]->src->readonly = true;
         def->dom->disks[diskCount]->src->type = VIR_STORAGE_TYPE_FILE;
         def->dom->disks[diskCount]->dst = vboxGenerateMediumName(storageBus,
                                                                  deviceInst,
index 38b8423f6a103a00f8006959cfa60fc7178ca9ff..9e598045d6d8e4504355ccc94fbfe1b04ebcb4d3 100644 (file)
@@ -495,10 +495,10 @@ xenParseSxprDisks(virDomainDefPtr def,
 
             if (mode &&
                 strchr(mode, 'r'))
-                disk->readonly = true;
+                disk->src->readonly = true;
             if (mode &&
                 strchr(mode, '!'))
-                disk->shared = true;
+                disk->src->shared = true;
 
             if (VIR_REALLOC_N(def->disks, def->ndisks+1) < 0)
                 goto error;
@@ -1321,7 +1321,7 @@ xenParseSxpr(const struct sexpr *root,
                 goto error;
             }
             disk->bus = VIR_DOMAIN_DISK_BUS_IDE;
-            disk->readonly = true;
+            disk->src->readonly = true;
 
             if (VIR_APPEND_ELEMENT(def->disks, def->ndisks, disk) < 0) {
                 virDomainDiskDefFree(disk);
@@ -1816,9 +1816,9 @@ xenFormatSxprDisk(virDomainDiskDefPtr def,
         }
     }
 
-    if (def->readonly)
+    if (def->src->readonly)
         virBufferAddLit(buf, "(mode 'r')");
-    else if (def->shared)
+    else if (def->src->shared)
         virBufferAddLit(buf, "(mode 'w!')");
     else
         virBufferAddLit(buf, "(mode 'w')");
index 2b281502681a668fa9049e84b1254fd263066e10..25a042da461b89586021fce9668f89381ac98ec1 100644 (file)
@@ -625,10 +625,10 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
 
             if (STREQ(head, "r") ||
                 STREQ(head, "ro"))
-                disk->readonly = true;
+                disk->src->readonly = true;
             else if ((STREQ(head, "w!")) ||
                      (STREQ(head, "!")))
-                disk->shared = true;
+                disk->src->shared = true;
 
             /* Maintain list in sorted order according to target device name */
             if (VIR_APPEND_ELEMENT(def->disks, def->ndisks, disk) < 0)
@@ -656,7 +656,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
             if (VIR_STRDUP(disk->dst, "hdc") < 0)
                 goto cleanup;
             disk->bus = VIR_DOMAIN_DISK_BUS_IDE;
-            disk->readonly = true;
+            disk->src->readonly = true;
 
             if (VIR_APPEND_ELEMENT(def->disks, def->ndisks, disk) < 0)
                 goto cleanup;
@@ -1249,9 +1249,9 @@ xenFormatXMDisk(virConfValuePtr list,
     if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM)
         virBufferAddLit(&buf, ":cdrom");
 
-    if (disk->readonly)
+    if (disk->src->readonly)
         virBufferAddLit(&buf, ",r");
-    else if (disk->shared)
+    else if (disk->src->shared)
         virBufferAddLit(&buf, ",!");
     else
         virBufferAddLit(&buf, ",w");