[libvirt] [PATCH v2] xen: Prevent updating device when attaching a device

Osier Yang jyang at redhat.com
Sat Feb 12 07:37:31 UTC 2011


于 2011年02月11日 16:07, Osier Yang 写道:
> 于 2011年02月10日 14:09, Daniel Veillard 写道:
>> On Wed, Feb 09, 2011 at 02:01:25PM +0000, Daniel P. Berrange wrote:
>>> On Wed, Feb 09, 2011 at 04:51:27PM +0800, Osier Yang wrote:
>>>> When attaching a device that already exists, xend driver updates
>>>> the device with "device_configure", it causes problems (e.g. for
>>>> disk device, 'device_configure' only can be used to update device
>>>> like CDROM), on the other hand, we provide additional API
>>>> (virDomainUpdateDevice) to update device, this fix is to raise up
>>>> errors instead of updating the existed device which is not CDROM
>>>> device.
>>>>
>>>> Changes from v1 to v2:
>>>> - allow update CDROM
>>>>
>>>> * src/xen/xend_internal.c
>>>> ---
>>>> src/xen/xend_internal.c | 42 +++++++++++++++++++++++++++++++++++++-----
>>>> 1 files changed, 37 insertions(+), 5 deletions(-)
>>>
>>>
>>>
>>>>
>>>> diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
>>>> index cd30336..bc23595 100644
>>>> --- a/src/xen/xend_internal.c
>>>> +++ b/src/xen/xend_internal.c
>>>> @@ -3965,6 +3965,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
>>>> domain, const char *xml,
>>>> virDomainDefPtr def = NULL;
>>>> virBuffer buf = VIR_BUFFER_INITIALIZER;
>>>> char class[8], ref[80];
>>>> + char *target = NULL;
>>>>
>>>> if ((domain == NULL) || (domain->conn == NULL) || (domain->name ==
>>>> NULL)) {
>>>> virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
>>>> @@ -4029,6 +4030,13 @@ xenDaemonAttachDeviceFlags(virDomainPtr
>>>> domain, const char *xml,
>>>> STREQ(def->os.type, "hvm") ? 1 : 0,
>>>> priv->xendConfigVersion, 1)< 0)
>>>> goto cleanup;
>>>> +
>>>> + if (dev->data.disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM) {
>>>
>>> I can't remember if Xen supports it or not, but do we need DEVICE_FLOPPY
>>> here too ?
>>
>> I would guess that yes, we use it in the xend driver
>>
>>> The patch looks good aside from that question
>>
>> Daniel
>>
>
> Checked xend's code, from the code, floppy device updating is not
> supported, and also tried to update a floppy device via "xm",
> that's true.
>
> file: "xend/server/blkif.py"
>
> def reconfigureDevice(self, _, config):
> """@see DevController.reconfigureDevice"""
> (devid, new_back, new_front) = self.getDeviceDetails(config)
>
> (dev, mode) = self.readBackend(devid, 'dev', 'mode')
> dev_type = self.readFrontend(devid, 'device-type')
>
> if (dev_type == 'cdrom' and new_front['device-type'] == 'cdrom' and
> dev == new_back['dev'] and mode == 'r'):
>
> if not os.access(new_back['params'],os.R_OK):
> raise VmError("Can't read disk file %s" % new_back['params'])
>
> self.writeBackend(devid,
> 'type', new_back['type'],
> 'params', new_back['params'])
> else:
> raise VmError('Refusing to reconfigure device %s:%d to %s' %
> (self.deviceClass, devid, config))
>
>
> [root at dhcp exp]# xm block-list RHEL5-hvm-64
> Vdev BE handle state evt-ch ring-ref BE-path
> 51712 0 0 1 -1 -1 /local/domain/0/backend/tap/18/51712
> 4058 0 0 1 -1 -1 /local/domain/0/backend/vbd/18/4058
>
> [root at dhcp- exp]# xm block-configure 18
> file:/var/lib/xen/images/floppy.img fda:floppy r
> Error: Refusing to reconfigure device vbd:4058 to ['vbd', ['uname',
> 'file:/var/lib/xen/images/floppy.img'], ['dev', 'fda:floppy'], ['mode',
> 'r']]
>
>
> so I will push the patch.
>
> Regards
> Osier

Pushed

Regards,
Osier
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list