Hi,
Masaki Kanno wrote:
Hi Iwamatsu,
Could you improve your patch to cause an error in the following
conditions?
- different blktap disk type:
disk = [ 'tap:aio:/xen/root.img,hda1,w', 'tap:sync:/xen/root.img,hdb1,w' ]
^^^ ^^^^
- different device type:
disk = [ 'file:/xen/root.img,hda1,w', 'tap:***:/xen/root.img,hdb1,w' ]
^^^^ ^^^
Please take a look at the attach patch, which uses filename
rather than uname for duplicate check of block devices.
Thank you for the suggestion.
Yosuke
Best regards,
Kan
Mon, 17 Dec 2007 18:28:05 +0900, Yosuke Iwamatsu wrote:
Hi,
This patch fixes device duplicate check as follows.
- Add duplicate check for the blktap device
- Do case-insensitve comparison for mac addresses
Regards,
-------------------
Yosuke Iwamatsu
NEC Corporation
Xend: Fix device duplicate check.
Signed-off-by: Yosuke Iwamatsu <y-iwamatsu@xxxxxxxxxxxxx>
diff -r 966a6d3b7408 tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py Fri Dec 14 11:50:24 2007 +0000
+++ b/tools/python/xen/xend/XendConfig.py Tue Dec 18 15:33:09 2007 +0900
@@ -31,7 +31,7 @@ from xen.xend.xenstore.xstransact import
from xen.xend.xenstore.xstransact import xstransact
from xen.xend.server.BlktapController import blktap_disk_types
from xen.xend.server.netif import randomMAC
-from xen.util.blkif import blkdev_name_to_number
+from xen.util.blkif import blkdev_name_to_number, blkdev_uname_to_file
from xen.util import xsconstants
import xen.util.auxbin
@@ -1023,7 +1023,7 @@ class XendConfig(dict):
def device_duplicate_check(self, dev_type, dev_info, defined_config):
defined_devices_sxpr = self.all_devices_sxpr(target = defined_config)
- if dev_type == 'vbd':
+ if dev_type == 'vbd' or dev_type == 'tap':
dev_uname = dev_info.get('uname')
blkdev_name = dev_info.get('dev')
devid = self._blkdev_name_to_number(blkdev_name)
@@ -1031,10 +1031,13 @@ class XendConfig(dict):
return
for o_dev_type, o_dev_info in defined_devices_sxpr:
- if dev_type == o_dev_type:
- if dev_uname == sxp.child_value(o_dev_info, 'uname'):
- raise XendConfigError('The uname "%s" is already
defined' %
- dev_uname)
+ if o_dev_type == 'vbd' or o_dev_type == 'tap':
+ blkdev_file = blkdev_uname_to_file(dev_uname)
+ o_dev_uname = sxp.child_value(o_dev_info, 'uname')
+ o_blkdev_file = blkdev_uname_to_file(o_dev_uname)
+ if blkdev_file == o_blkdev_file:
+ raise XendConfigError('The file "%s" is already used' %
+ blkdev_file)
o_blkdev_name = sxp.child_value(o_dev_info, 'dev')
o_devid = self._blkdev_name_to_number(o_blkdev_name)
if o_devid != None and devid == o_devid:
@@ -1046,7 +1049,7 @@ class XendConfig(dict):
for o_dev_type, o_dev_info in defined_devices_sxpr:
if dev_type == o_dev_type:
- if dev_mac == sxp.child_value(o_dev_info, 'mac'):
+ if dev_mac.lower() == sxp.child_value(o_dev_info,
'mac').lower():
raise XendConfigError('The mac "%s" is already
defined' %
dev_mac)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|