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

Re: [libvirt] [PATCH 4/4] qemu: Move shared disk entry adding and unpriv_sgio seting



On 2013年02月11日 18:55, Daniel P. Berrange wrote:
On Fri, Feb 08, 2013 at 09:08:02PM +0800, Osier Yang wrote:
The disk def could be free'ed by qemuDomainChangeEjectableMedia
for cdrom or floppy disk. This moves the adding and setting before
the attaching takes place. And for cdrom floppy disk, if the
change is ejecting, removing the existed hash entry for it.
---
  src/qemu/qemu_driver.c  |   23 +++++++++++++----------
  src/qemu/qemu_hotplug.c |    6 +++++-
  src/qemu/qemu_hotplug.h |    3 ++-
  3 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 03fe526..4aad42f 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -5789,6 +5789,7 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
  {
      virDomainDiskDefPtr disk = dev->data.disk;
      virCgroupPtr cgroup = NULL;
+    int eject, added;
      int ret = -1;

      if (disk->driverName != NULL&&  !STREQ(disk->driverName, "qemu")) {
@@ -5798,6 +5799,12 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
          goto end;
      }

+    if (qemuAddSharedDisk(driver->sharedDisks, disk,&added)<  0)
+        goto end;
+
+    if (qemuSetUnprivSGIO(disk)<  0)
+        goto end;
+
      if (qemuDomainDetermineDiskChain(driver, disk, false)<  0)
          goto end;

@@ -5814,7 +5821,7 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
      switch (disk->device)  {
      case VIR_DOMAIN_DISK_DEVICE_CDROM:
      case VIR_DOMAIN_DISK_DEVICE_FLOPPY:
-        ret = qemuDomainChangeEjectableMedia(driver, vm, disk, false);
+        ret = qemuDomainChangeEjectableMedia(driver, vm, disk, false,&eject);
          break;
      case VIR_DOMAIN_DISK_DEVICE_DISK:
      case VIR_DOMAIN_DISK_DEVICE_LUN:
@@ -5843,22 +5850,18 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
          break;
      }

+    if (ret == 0&&  eject)
+        ignore_value(qemuRemoveSharedDisk(driver->sharedDisks, disk));

This doesn't make sense - you're removing the disk we just added.

No, the removing only happens when the operation is to eject the
media of CD-ROM or Floppy. It's determined by "eject".

You need to remove the *old* disk->src surely ?

Yes, if the operation is ejecting.

In addition it is
*not* valid to reference 'disk' at all at this point, since the
functions we just called may have free'd it.

Oh, yes, I should copy the disk def before
qemuDomainChangeEjectableMedia takes place.

Osier


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