pvSCSI: fix xend

Previous "xend" assumed initial Xenbus state would be "Connected" when
LUN hot-plug starts. However it was not guaranteed in general, and it
may cause some problems.

Signed-off-by: Tomonari Horikoshi <t.horikoshi@jp.fujitsu.com>
Signed-off-by: Jun Kamada <kama@jp.fujitsu.com>
This commit is contained in:
Keir Fraser committed 2008-07-08 09:28:50 +01:00
1 parent eabcd59fd9
commit a3de16cb53
3 files changed
+38 -32

No files matched your search

+33 -31
View File
@@ -1223,22 +1223,23 @@ class XendConfig(dict):
pci_dict = self.pci_convert_sxp_to_dict(config)
pci_devs = pci_dict['devs']
# create XenAPI DPCI objects.
for pci_dev in pci_devs:
dpci_uuid = pci_dev.get('uuid')
ppci_uuid = XendPPCI.get_by_sbdf(pci_dev['domain'],
pci_dev['bus'],
pci_dev['slot'],
pci_dev['func'])
if ppci_uuid is None:
continue
dpci_record = {
'VM': self['uuid'],
'PPCI': ppci_uuid,
'hotplug_slot': pci_dev.get('vslot', 0)
}
XendDPCI(dpci_uuid, dpci_record)
if dev_type != 'vscsi':
# create XenAPI DPCI objects.
for pci_dev in pci_devs:
dpci_uuid = pci_dev.get('uuid')
ppci_uuid = XendPPCI.get_by_sbdf(pci_dev['domain'],
pci_dev['bus'],
pci_dev['slot'],
pci_dev['func'])
if ppci_uuid is None:
continue
dpci_record = {
'VM': self['uuid'],
'PPCI': ppci_uuid,
'hotplug_slot': pci_dev.get('vslot', 0)
}
XendDPCI(dpci_uuid, dpci_record)
target['devices'][pci_devs_uuid] = (dev_type,
{'devs': pci_devs,
'uuid': pci_devs_uuid})
@@ -1633,21 +1634,22 @@ class XendConfig(dict):
for dpci_uuid in XendDPCI.get_by_VM(self['uuid']):
XendAPIStore.deregister(dpci_uuid, "DPCI")
# create XenAPI DPCI objects.
for pci_dev in pci_devs:
dpci_uuid = pci_dev.get('uuid')
ppci_uuid = XendPPCI.get_by_sbdf(pci_dev['domain'],
pci_dev['bus'],
pci_dev['slot'],
pci_dev['func'])
if ppci_uuid is None:
continue
dpci_record = {
'VM': self['uuid'],
'PPCI': ppci_uuid,
'hotplug_slot': pci_dev.get('vslot', 0)
}
XendDPCI(dpci_uuid, dpci_record)
if dev_type != 'vscsi':
# create XenAPI DPCI objects.
for pci_dev in pci_devs:
dpci_uuid = pci_dev.get('uuid')
ppci_uuid = XendPPCI.get_by_sbdf(pci_dev['domain'],
pci_dev['bus'],
pci_dev['slot'],
pci_dev['func'])
if ppci_uuid is None:
continue
dpci_record = {
'VM': self['uuid'],
'PPCI': ppci_uuid,
'hotplug_slot': pci_dev.get('vslot', 0)
}
XendDPCI(dpci_uuid, dpci_record)
self['devices'][dev_uuid] = (dev_type,
{'devs': pci_devs,
+1 -1
View File
@@ -758,7 +758,7 @@ class XendDomainInfo:
if dev_class != 'vscsi':
return False
dev_config = self.pci_convert_sxp_to_dict(dev_sxp)
dev_config = self.info.pci_convert_sxp_to_dict(dev_sxp)
dev = dev_config['devs'][0]
req_devid = sxp.child_value(dev_sxp, 'devid')
req_devid = int(req_devid)
+4
View File
@@ -169,6 +169,10 @@ class VSCSIController(DevController):
devid = int(devid)
vscsi_config = config['devs'][0]
states = config.get('states', [])
driver_state = self.readBackend(devid, 'state')
if str(xenbusState['Connected']) != driver_state:
raise VmError("Driver status is not connected")
uuid = self.readBackend(devid, 'uuid')
if states[0] == 'Initialising':
back['uuid'] = uuid
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.