WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-tools

[Xen-tools] [PATCH] fix xend block-create crash

To: Xen Tools Developers <xen-tools@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-tools] [PATCH] fix xend block-create crash
From: Dan Smith <danms@xxxxxxxxxx>
Date: Wed, 31 Aug 2005 12:46:05 -0700
Delivery-date: Wed, 31 Aug 2005 19:44:14 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-tools-request@lists.xensource.com?subject=help>
List-id: Xen control tools developers <xen-tools.lists.xensource.com>
List-post: <mailto:xen-tools@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-tools>, <mailto:xen-tools-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-tools>, <mailto:xen-tools-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-tools-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Gnus/5.110003 (No Gnus v0.3) Emacs/21.4 (gnu/linux)
This patch fixes a crash in xend when adding a block device by doing
an "xm block-create" operation:

  # xm block-create foobar phy:/dev/hdb1 hda1 ro
  Traceback (most recent call last):
    File "/usr/sbin/xm", line 10, in ?
      main.main(sys.argv)
    File "/usr/lib/python/xen/xm/main.py", line 721, in main
      handle_xend_error(argv[1], args[0], ex)
    File "/usr/lib/python/xen/xm/main.py", line 162, in handle_xend_error 
      raise ex
  xen.xend.XendProtocol.XendError: Internal server error

This stack trace is a result of the new blkif xenstore setup code
returning None, instead of a device object with a getConfig() method.
The fix implemented is to resume creating a Blkif object, but without
sending the event channel setup messages.  This also results in a
functioning block-list xm command.

Signed-off-by: Dan Smith <danms@xxxxxxxxxx>

diff -r 8af8ddf91078 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Wed Aug 31 14:53:43 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py   Wed Aug 31 11:10:26 2005
@@ -414,21 +414,25 @@
             db['backend-id'] = "%i" % backdom.id
 
             backdb['frontend'] = db.getPath()
-            (type, params) = string.split(sxp.child_value(devconfig, 'uname'), 
':', 1)
-            node = Blkctl.block('bind', type, params)
+            (vbdtype, params) = string.split(sxp.child_value(devconfig, 
'uname'), ':', 1)
+            node = Blkctl.block('bind', vbdtype, params)
             backdb['frontend-id'] = "%i" % self.id
             backdb['physical-device'] = "%li" % blkdev_name_to_number(node)
             backdb.saveDB(save=True)
 
             # Ok, super gross, this really doesn't belong in the frontend db...
-            db['type'] = type
+            db['type'] = vbdtype
             db['node'] = node
             db['params'] = params
             db.saveDB(save=True)
-            
-            return
-
-        if type == 'vif':
+
+            ctrl = self.findDeviceController(type)
+            device = ctrl.createDevice(devconfig, recreate=self.recreate,
+                                       change=change)
+            device.setNode(node)
+            return device
+
+        elif type == 'vif':
             backdom = domain_exists(sxp.child_value(devconfig, 'backend', '0'))
 
             log.error(devconfig)
@@ -457,9 +461,10 @@
             db.saveDB(save=True)
 
             return
-        
-        ctrl = self.findDeviceController(type)
-        return ctrl.createDevice(devconfig, recreate=self.recreate,
+
+        else:
+            ctrl = self.findDeviceController(type)
+            return ctrl.createDevice(devconfig, recreate=self.recreate,
                                  change=change)
 
     def configureDevice(self, type, id, devconfig):
diff -r 8af8ddf91078 tools/python/xen/xend/server/blkif.py
--- a/tools/python/xen/xend/server/blkif.py     Wed Aug 31 14:53:43 2005
+++ b/tools/python/xen/xend/server/blkif.py     Wed Aug 31 11:10:26 2005
@@ -255,12 +255,6 @@
         return self.config
 
     def attach(self, recreate=False, change=False):
-        if recreate:
-            pass
-        else:
-            node = Blkctl.block('bind', self.type, self.params)
-            self.setNode(node)
-            self.attachBackend()
         if change:
             self.interfaceChanged()
 
@@ -351,7 +345,6 @@
         self.destroyed = True
         log.debug("Destroying vbd domain=%d id=%s", self.frontendDomain,
                   self.id)
-        self.send_be_vbd_destroy()
         if change:
             self.interfaceChanged()
         self.unbind()
@@ -362,36 +355,6 @@
         """
         self.getBackend().interfaceChanged()
 
-    def attachBackend(self):
-        """Attach the device to its controller.
-
-        """
-        self.getBackend().connect()
-        self.send_be_vbd_create()
-        
-    def send_be_vbd_create(self):
-        msg = packMsg('blkif_be_vbd_create_t',
-                      { 'domid'        : self.frontendDomain,
-                        'blkif_handle' : self.backendId,
-                        'pdevice'      : self.device,
-                        'dev_handle'   : self.dev_handle,
-                        'vdevice'      : self.vdev,
-                        'readonly'     : self.readonly() })
-        msg = self.backendChannel.requestResponse(msg)
-        
-        val = unpackMsg('blkif_be_vbd_create_t', msg)
-        status = val['status']
-        if status != BLKIF_BE_STATUS_OKAY:
-            raise XendError("Creating vbd failed: device %s, error %d"
-                            % (sxp.to_string(self.config), status))
-
-    def send_be_vbd_destroy(self):
-        msg = packMsg('blkif_be_vbd_destroy_t',
-                      { 'domid'                : self.frontendDomain,
-                        'blkif_handle'         : self.backendId,
-                        'vdevice'              : self.vdev })
-        return self.backendChannel.writeRequest(msg)
-        
 class BlkifController(DevController):
     """Block device interface controller. Handles all block devices
     for a domain.
--
Dan Smith
IBM Linux Technology Center
Open Hypervisor Team
email: danms@xxxxxxxxxx


_______________________________________________
Xen-tools mailing list
Xen-tools@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-tools
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-tools] [PATCH] fix xend block-create crash, Dan Smith <=