From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Lalancette Subject: [PATCH]: Fix xm block-detach Date: Tue, 02 Dec 2008 13:26:25 +0100 Message-ID: <49352971.6020605@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010701080405040002050304" 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 List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------010701080405040002050304 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit All, The recent changes to where xenstore stores data about domains (c/s 18562, in particular) seem to have broken xm block-detach. What happens is that attaching a disk works just fine, but detaching a disk ends with: Error: 51776 not connected Usage: xm block-detach [-f|--force] Destroy a domain's virtual block device. The problem basically boils down to where the new code is placing the xenstore entries. Previously, it was storing them in /local/domain//device/vbd; it is now storing them in /vm/UUID/device/tap. The tap is wrong; tap describes the backend, not the frontend, which should always be vbd. The attached patch fixes this by overriding deviceRoot() in the BlktapController class, similar to how frontendRoot() is done, and then changing devicePath() to use deviceRoot(). There is also a small fix for destroyDevice, to make sure we remove the proper /vm/UUID/device/vbd entry on removal. With the patch in place, I was able to successfully block-attach and block-detach disks again. Note that I only tested this on RHEL-5 xend, which has diverged quite a bit from upstream. However, a quick glance at the code in xen-unstable shows that this is probably a problem there as well; only testing will tell for sure. Signed-off-by: Chris Lalancette --------------010701080405040002050304 Content-Type: text/plain; name="xen-fix-broken-blkdetach.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="xen-fix-broken-blkdetach.patch" diff -urp xen-3.1.0-src.orig/tools/python/xen/xend/server/BlktapController.py xen-3.1.0-src/tools/python/xen/xend/server/BlktapController.py --- xen-3.1.0-src.orig/tools/python/xen/xend/server/BlktapController.py 2008-12-02 13:07:04.000000000 +0100 +++ xen-3.1.0-src/tools/python/xen/xend/server/BlktapController.py 2008-12-02 13:08:32.000000000 +0100 @@ -16,6 +16,11 @@ class BlktapController(BlkifController): def __init__(self, vm): BlkifController.__init__(self, vm) + def deviceRoot(self): + """@see DevController#deviceRoot""" + + return "%s/device/vbd" % self.vm.vmpath + def frontendRoot(self): """@see DevController#frontendRoot""" diff -urp xen-3.1.0-src.orig/tools/python/xen/xend/server/DevController.py xen-3.1.0-src/tools/python/xen/xend/server/DevController.py --- xen-3.1.0-src.orig/tools/python/xen/xend/server/DevController.py 2008-12-02 13:07:04.000000000 +0100 +++ xen-3.1.0-src/tools/python/xen/xend/server/DevController.py 2008-12-02 13:09:25.000000000 +0100 @@ -221,6 +221,8 @@ class DevController: # drivers, so this ordering avoids a race). self.writeBackend(devid, 'online', "0") self.writeBackend(devid, 'state', str(xenbusState['Closing'])) + devpath = self.devicePath(devid) + xstransact.Remove(devpath) if force: frontpath = self.frontendPath(devid) @@ -487,8 +489,7 @@ class DevController: def devicePath(self, devid): """Return the /device entry of the given VM. We use it to store backend/frontend locations""" - return "%s/device/%s/%s" % (self.vm.vmpath, - self.deviceClass, devid) + return "%s/%s" % (self.deviceRoot(), devid) def hotplugStatusCallback(statusPath, ev, result): log.debug("hotplugStatusCallback %s.", statusPath) --------------010701080405040002050304 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 --------------010701080405040002050304--