70 lines
3.0 KiB
Diff
70 lines
3.0 KiB
Diff
# HG changeset patch
|
|
# User kfraser@localhost.localdomain
|
|
# Date 1181553294 -3600
|
|
# Node ID a43a03d53781e159da41f79d8cc615905b95ab80
|
|
# Parent 93f77a5a8437df0b34919a6987f48e84342b4a43
|
|
xend: Fix xm block-detach regression introduced by c/s 15157.
|
|
|
|
Prior to this c/s, user was able to specify device name or id, e.g.
|
|
xm block-detach dom xvdb
|
|
xm block-detach dom 15728
|
|
|
|
Now, 'xm block-detach dom xvdb' silently fails. xend.log does contain
|
|
the following
|
|
|
|
[2007-06-07 11:39:18 xend.XendDomainInfo 3775] DEBUG
|
|
(XendDomainInfo:519) devName=vbd/51712
|
|
[2007-06-07 11:39:18 xend.XendDomainInfo 3775] DEBUG
|
|
(XendDomainInfo:527) Could not find the device xvdb
|
|
|
|
This patch restores the previous behavior but retains the bugfix
|
|
introduced by c/s 15571.
|
|
|
|
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
|
|
|
Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
===================================================================
|
|
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
|
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
@@ -544,31 +544,18 @@ class XendDomainInfo:
|
|
self.getDeviceController(devclass).waitForDevices()
|
|
|
|
def destroyDevice(self, deviceClass, devid, force = False):
|
|
- found = True # Assume devid is an integer.
|
|
try:
|
|
- devid = int(devid)
|
|
+ dev = int(devid)
|
|
except ValueError:
|
|
- # devid is not a number, let's search for it in xenstore.
|
|
- devicePath = '%s/device/%s' % (self.dompath, deviceClass)
|
|
- found = False
|
|
- for entry in xstransact.List(devicePath):
|
|
- log.debug("Attempting to find devid at %s/%s", devicePath, entry)
|
|
- backend = xstransact.Read('%s/%s' % (devicePath, entry),
|
|
- "backend")
|
|
- if backend != None:
|
|
- devName = '%s/%s' % (deviceClass, entry)
|
|
- log.debug("devName=%s", devName)
|
|
- if devName == devid:
|
|
- # We found the integer matching our devid, use it instead
|
|
- devid = int(entry)
|
|
- found = True
|
|
- break
|
|
+ # devid is not a number but a string containing either device
|
|
+ # name (e.g. xvda) or device_type/device_id (e.g. vbd/51728)
|
|
+ dev = type(devid) is str and devid.split('/')[-1] or None
|
|
+ if dev == None:
|
|
+ log.debug("Could not find the device %s", devid)
|
|
+ return None
|
|
|
|
- if not found:
|
|
- log.debug("Could not find the device %s", devid)
|
|
- return None
|
|
- log.debug("devid = %s", devid)
|
|
- return self.getDeviceController(deviceClass).destroyDevice(devid, force)
|
|
+ log.debug("dev = %s", dev)
|
|
+ return self.getDeviceController(deviceClass).destroyDevice(dev, force)
|
|
|
|
def getDeviceSxprs(self, deviceClass):
|
|
if self._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED):
|