From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Fehlig Subject: [PATCH][xend] cs 15157 breaks block-detach Date: Thu, 07 Jun 2007 18:30:47 -0600 Message-ID: <4668A337.3060707@novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060201090508090807020109" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com Cc: Mats.Petersson@amd.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------060201090508090807020109 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit c/s 15157 introduced a regression in block-detach. 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 bug originally fixed by c/s 15571. Signed-off-by: Jim Fehlig Mats - you may want to give this a spin through your save/restore test, but my initial testing shows no accumulated, orphaned entries in xenstore. Regards, Jim --------------060201090508090807020109 Content-Type: text/x-patch; name="xend_destroy_device.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="xend_destroy_device.patch" diff -r bd3d6b4c52ec tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Fri Jun 01 14:50:52 2007 +0100 +++ b/tools/python/xen/xend/XendDomainInfo.py Thu Jun 07 18:05:23 2007 -0600 @@ -546,31 +546,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 - - 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) + # 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 + + 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): --------------060201090508090807020109 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------060201090508090807020109--