[libvirt] [PATCH 4/4] qemu: Move shared disk entry adding and unpriv_sgio seting
Osier Yang
jyang at redhat.com
Mon Feb 11 11:30:01 UTC 2013
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
More information about the libvir-list
mailing list