Skip to contentSkip to conversation

xend: fix block protocol mismatch on save-restore

PATCH New Kurt Hackel 1 participant 1 message May 13, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 xend: fix block protocol mismatch on save-restore

Hi,

This fixes the mismatch of the block abi protocol across a save/restore or live migration. Without this fix the protocol is assumed to be the same as the dom0 protocol, resulting in a failure to restore or migrate the domain if it does not match dom0.

Thanks
kurt

PATCH: fix block protocol mismatch on save/restore

The protocol field of the blkif interface is correct at startup for a guest of a different mode from dom0 (eg. 32-bit dom0, 64-bit guest). However, this property is not persisted on save, so a later restore (or migrate) will setup the block interface with the wrong mode.

tools/python/xen/xend/server/blkif.py +8 -0
diff -r 53195719f762 tools/python/xen/xend/server/blkif.py
@@ -89,6 +89,10 @@ class BlkifController(DevController):
                   'device-type' : dev_type
                 }
 
+        protocol = config.get('protocol')
+        if protocol:
+            front['protocol'] = protocol
+
         return (devid, back, front)
 
     def do_access_control(self, config, uname):
@@ -162,6 +166,10 @@ class BlkifController(DevController):
         if uuid:
             config['uuid'] = uuid
 
+        proto = self.readFrontend(devid, 'protocol')
+        if proto:
+            config['protocol'] = proto
+
         return config
 
     def destroyDevice(self, devid, force):
tools/python/xen/xm/create.py +6 -1
diff -r 53195719f762 tools/python/xen/xm/create.py
@@ -610,7 +610,7 @@ def configure_disks(config_devs, vals):
 def configure_disks(config_devs, vals):
     """Create the config for disks (virtual block devices).
     """
-    for (uname, dev, mode, backend) in vals.disk:
+    for (uname, dev, mode, backend, protocol) in vals.disk:
         if uname.startswith('tap:'):
             cls = 'tap'
         else:
@@ -622,6 +622,8 @@ def configure_disks(config_devs, vals):
                       ['mode', mode ] ]
         if backend:
             config_vbd.append(['backend', backend])
+        if protocol:
+            config_vbd.append(['protocol', protocol])
         config_devs.append(['device', config_vbd])
 
 def configure_pci(config_devs, vals):
@@ -845,7 +847,10 @@ def preprocess_disk(vals):
         n = len(d)
         if n == 3:
             d.append(None)
+            d.append(None)
         elif n == 4:
+            d.append(None)
+        elif n == 5:
             pass
         else:
             err('Invalid disk specifier: ' + v)

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel