[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] blktap2: add blktap2 device class anddevicecontroller
Hi Ryan, I thought... Are blktap1 and blktap2 used as follows? And the head of the string of disk parameters for blktap devices is 'tap:' only, isn't it? Is my understanding right? | blktap2 | +-----------+-----------+ | Installed | Not | | | Installed | -----+-----------+-----------+ aio |blktap2 |blktap1 | -----+-----------+-----------+ sync |blktap1 |blktap1 | -----+-----------+-----------+ vmdk |blktap1 |blktap1 | -----+-----------+-----------+ ram |blktap2 |blktap1 | -----+-----------+-----------+ qcow |blktap2 |blktap1 | -----+-----------+-----------+ qcow2|blktap1 |blktap1 | -----+-----------+-----------+ vhd |blktap2 |blktap1 | -----+-----------+-----------+ ioemu|blktap1 |blktap1 | -----+-----------+-----------+ Best regards, Kan Wed, 01 Jul 2009 13:33:35 +0900, Masaki Kanno wrote: >Hi Ryan, > >>blktap2 devices must be handled differently than blktap2 devices. blktap2 > ^^^^^^^ > blktap1? typo? > > >Basically questions: > >How should I define a disk parameter into VM configuration files to use >blktap1 devices? > > e.g. disk = [ 'tap:aio:root-vm1.img,xvda,w' ] > > >How should I define a disk parameter into VM configuration files to use >blktap2 devices? > > e.g. disk = [ 'tap2:aio:root-vm2.img,xvda,w' ] > > >If you distinguish the device class of blktap2 devices from the device >class of blktap1 devices, should you modify it as follows? >I think that the device class of blktap1 devices should be 'tap' if we >use blktap1 devices as before. > >diff -r 7397608bce87 -r 6295171d4ccc tools/python/xen/xm/create.py >--- a/tools/python/xen/xm/create.py Mon Jun 29 15:50:32 2009 +0100 >+++ b/tools/python/xen/xm/create.py Tue Jun 30 17:44:41 2009 -0700 >@@ -718,7 +718,7 @@ def configure_disks(config_devs, vals): > """ > for (uname, dev, mode, backend, protocol) in vals.disk: > if uname.startswith('tap:'): > cls = 'tap' >+ elif uname.startswith('tap2:'): >+ cls = 'tap2' > else: > cls = 'vbd' > > >Best regards, > Kan > >Tue, 30 Jun 2009 17:49:44 -0700, "Ryan O'Connor" wrote: > >># HG changeset patch >># User Ryan O'Connor <rjo@xxxxxxxxx> >># Date 1246409081 25200 >># Node ID 6295171d4ccc60f80f0411217d9b1c7d8543c804 >># Parent 7397608bce877b151ee507413a8e228092947ee4 >>blktap2: add blktap2 device class and device controller >> >>blktap2 devices must be handled differently than blktap2 devices. blktap2 >>devices require a sysfs write to close the underlying device, as well as >>extra >>sysfs writes when the domU is paused/unpaused. The differences between >>blktap1 >>and blktap2 are great enough to warrant the creation of a new device class, >>'tap2', and device controller for blktap2 devices. >> >> * add a new device controller (Blktap2Controller) and device class (tap2) >> for >> blktap2 devices >> * move blktap2 specific code from DevController to Blktap2Controller >> * if possible, check xenstore to determine block device class >> * use vmpath (/vm/<uuid>/) when releasing devices >> * modify linux hotplug cleanup script to handle blktap2 device removal >> >>Signed-off-by: Ryan O'Connor <rjo@xxxxxxxxx> >> >>diff -r 7397608bce87 -r 6295171d4ccc tools/hotplug/Linux/xen-hotplug-cleanup >>--- a/tools/hotplug/Linux/xen-hotplug-cleanup Mon Jun 29 15:50:32 2009 +0100 >>+++ b/tools/hotplug/Linux/xen-hotplug-cleanup Tue Jun 30 17:44:41 2009 -0700 >>@@ -18,6 +18,13 @@ vm=$(xenstore_read_default "/local/domai >> # construct /vm/UUID/device/DEVCLASS/DEVID >> if [ "$vm" != "" ]; then >> vm_dev="$vm/device/${path_array[1]}/${path_array[3]}" >>+ >>+ # if the vm path does not exist and the device class is 'vbd' then we >>may have >>+ # a tap2 device >>+ if [ ! $(xenstore-read "vm_dev" 2>/dev/null) ] \ >>+ && [ "${path_array[1]}" = "vbd" ]; then >>+ vm_dev="$vm/device/tap2/${path_array[3]}" >>+ fi >> else >> vm_dev= >> fi >>diff -r 7397608bce87 -r 6295171d4ccc tools/python/xen/xend/XendConfig.py >>--- a/tools/python/xen/xend/XendConfig.py Mon Jun 29 15:50:32 2009 +0100 >>+++ b/tools/python/xen/xend/XendConfig.py Tue Jun 30 17:44:41 2009 -0700 >>@@ -1114,7 +1114,7 @@ class XendConfig(dict): >> controller = domain.getDeviceController(cls) >> configs = controller.configurations(txn) >> for config in configs: >>- if sxp.name(config) in ('vbd', 'tap'): >>+ if sxp.name(config) in ('vbd', 'tap', >>'tap2'): >> dev_uuid = sxp.child_value(config, >>'uuid') >> dev_type, dev_cfg = self['devices'][ >>dev_uuid] >> if sxp.child_value(config, 'bootable', >> None) is None: >>@@ -1179,7 +1179,7 @@ class XendConfig(dict): >> def device_duplicate_check(self, dev_type, dev_info, defined_config, >>config): >> defined_devices_sxpr = self.all_devices_sxpr(target = >>defined_config) >> >>- if dev_type == 'vbd' or dev_type == 'tap': >>+ if dev_type == 'vbd' or dev_type == 'tap' or dev_type == 'tap2': >> dev_uname = dev_info.get('uname') >> blkdev_name = dev_info.get('dev') >> devid = self._blkdev_name_to_number(blkdev_name) >>@@ -1187,7 +1187,7 @@ class XendConfig(dict): >> return >> >> for o_dev_type, o_dev_info in defined_devices_sxpr: >>- if o_dev_type == 'vbd' or o_dev_type == 'tap': >>+ if o_dev_type == 'vbd' or o_dev_type == 'tap' or >>o_dev_type == 'tap2': >> blkdev_file = blkdev_uname_to_file(dev_uname) >> o_dev_uname = sxp.child_value(o_dev_info, 'uname') >> if o_dev_uname != None: >>@@ -1369,7 +1369,7 @@ class XendConfig(dict): >> else: >> dev_info['driver'] = 'paravirtualised' >> >>- if dev_type == 'tap': >>+ if dev_type == 'tap' or dev_type == 'tap2': >> if dev_info['uname'].split(':')[1] not in >> blktap_disk_types: >> raise XendConfigError("tap:%s not a valid disk type" % >> dev_info['uname'].split(':')[1]) >>@@ -1406,7 +1406,7 @@ class XendConfig(dict): >> # Compat hack -- mark first disk bootable >> dev_info['bootable'] = int(not target[param]) >> target[param].append(dev_uuid) >>- elif dev_type == 'tap': >>+ elif dev_type == 'tap' or dev_type == 'tap2': >> if 'vbd_refs' not in target: >> target['vbd_refs'] = [] >> if dev_uuid not in target['vbd_refs']: >>@@ -1504,7 +1504,7 @@ class XendConfig(dict): >> target['devices'][dev_uuid] = (dev_type, dev_info) >> target['vif_refs'].append(dev_uuid) >> >>- elif dev_type in ('vbd', 'tap'): >>+ elif dev_type in ('vbd', 'tap', 'tap2'): >> dev_info['type'] = cfg_xenapi.get('type', 'Disk') >> if dev_info['type'] == 'CD': >> old_vbd_type = 'cdrom' >>diff -r 7397608bce87 -r 6295171d4ccc tools/python/xen/xend/XendDevices.py >>--- a/tools/python/xen/xend/XendDevices.py Mon Jun 29 15:50:32 2009 +0100 >>+++ b/tools/python/xen/xend/XendDevices.py Tue Jun 30 17:44:41 2009 -0700 >>@@ -20,7 +20,7 @@ >> # >> >> from xen.xend.server import blkif, netif, tpmif, pciif, iopif, irqif, >>vfbif, vscsiif >>-from xen.xend.server.BlktapController import BlktapController >>+from xen.xend.server.BlktapController import BlktapController, >>Blktap2Controller >> from xen.xend.server.ConsoleController import ConsoleController >> >> >>@@ -42,6 +42,7 @@ class XendDevices: >> 'ioports': iopif.IOPortsController, >> 'irq': irqif.IRQController, >> 'tap': BlktapController, >>+ 'tap2': Blktap2Controller, >> 'vfb': vfbif.VfbifController, >> 'vkbd': vfbif.VkbdifController, >> 'console': ConsoleController, >>diff -r 7397608bce87 -r 6295171d4ccc tools/python/xen/xend/XendDomainInfo.py >>--- a/tools/python/xen/xend/XendDomainInfo.py Mon Jun 29 15:50:32 2009 +0100 >>+++ b/tools/python/xen/xend/XendDomainInfo.py Tue Jun 30 17:44:41 2009 -0700 >>@@ -538,12 +538,11 @@ class XendDomainInfo: >> @raise XendError: Failed pausing a domain >> """ >> try: >>- bepath="/local/domain/0/backend/" >> if(self.domid): >>- >>- dev = xstransact.List(bepath + 'vbd' + "/%d" % (self. >>domid,)) >>+ # get all blktap2 devices >>+ dev = xstransact.List(self.vmpath + 'device/tap2') >> for x in dev: >>- path = self.getDeviceController('vbd').readBackend(x, >>'params') >>+ path = self.getDeviceController('tap2').readBackend(x, >> 'params') >> if path and path.startswith('/dev/xen/blktap-2'): >> #Figure out the sysfs path. >> pattern = re.compile('/dev/xen/blktap-2/tapdev(\d+ >>)$') >>@@ -569,11 +568,10 @@ class XendDomainInfo: >> @raise XendError: Failed unpausing a domain >> """ >> try: >>- bepath="/local/domain/0/backend/" >> if(self.domid): >>- dev = xstransact.List(bepath + "vbd" + "/%d" % (self. >>domid,)) >>+ dev = xstransact.List(self.vmpath + 'device/tap2') >> for x in dev: >>- path = self.getDeviceController('vbd').readBackend(x, >>'params') >>+ path = self.getDeviceController('tap2').readBackend(x, >> 'params') >> if path and path.startswith('/dev/xen/blktap-2'): >> #Figure out the sysfs path. >> pattern = re.compile('/dev/xen/blktap-2/tapdev(\d+ >>)$') >>@@ -812,6 +810,11 @@ class XendDomainInfo: >> try: >> dev_config_dict['devid'] = devid = \ >> self._createDevice(dev_type, dev_config_dict) >>+ if dev_type == 'tap2': >>+ # createDevice may create a blktap1 device if blktap2 >>is not >>+ # installed or if the blktap driver is not supported in >>+ # blktap1 >>+ dev_type = self.getBlockDeviceClass(devid) >> self._waitForDevice(dev_type, devid) >> except VmError, ex: >> del self.info['devices'][dev_uuid] >>@@ -821,7 +824,7 @@ class XendDomainInfo: >> elif dev_type == 'vscsi': >> for dev in dev_config_dict['devs']: >> XendAPIStore.deregister(dev['uuid'], 'DSCSI') >>- elif dev_type == 'tap': >>+ elif dev_type == 'tap' or dev_type == 'tap2': >> self.info['vbd_refs'].remove(dev_uuid) >> else: >> self.info['%s_refs' % dev_type].remove(dev_uuid) >>@@ -1200,9 +1203,10 @@ class XendDomainInfo: >> if self.domid is not None: >> >> #new blktap implementation may need a sysfs write after >>everything is torn down. >>- dev = self.getDeviceController(deviceClass). >>convertToDeviceNumber(devid) >>- path = self.getDeviceController(deviceClass).readBackend(dev, >>'params') >>- if path and path.startswith('/dev/xen/blktap-2'): >>+ >>+ if deviceClass == 'tap2': >>+ dev = self.getDeviceController(deviceClass). >>convertToDeviceNumber(devid) >>+ path = self.getDeviceController(deviceClass).readBackend( >>dev, 'params') >> frontpath = self.getDeviceController(deviceClass). >>frontendPath(dev) >> backpath = xstransact.Read(frontpath, "backend") >> thread.start_new_thread(self.getDeviceController( >>deviceClass).finishDeviceCleanup, (backpath, path)) >>@@ -1238,7 +1242,7 @@ class XendDomainInfo: >> dev_info = self._getDeviceInfo_vif(mac) >> else: >> _, dev_info = sxprs[dev] >>- else: # 'vbd' or 'tap' >>+ else: # 'vbd' or 'tap' or 'tap2' >> dev_info = self._getDeviceInfo_vbd(dev) >> # To remove the UUID of the device from refs, >> # deviceClass must be always 'vbd'. >>@@ -1267,7 +1271,7 @@ class XendDomainInfo: >> sxprs = [] >> dev_num = 0 >> for dev_type, dev_info in self.info.all_devices_sxpr(): >>- if (deviceClass == 'vbd' and dev_type not in ['vbd', 'tap' >>]) or \ >>+ if (deviceClass == 'vbd' and dev_type not in ['vbd', 'tap' >>, 'tap2']) or \ >> (deviceClass != 'vbd' and dev_type != deviceClass): >> continue >> >>@@ -1295,12 +1299,27 @@ class XendDomainInfo: >> return sxprs >> >> def getBlockDeviceClass(self, devid): >>- # To get a device number from the devid, >>- # we temporarily use the device controller of VBD. >>- dev = self.getDeviceController('vbd').convertToDeviceNumber(devid) >>- dev_info = self._getDeviceInfo_vbd(dev) >>- if dev_info: >>- return dev_info[0] >>+ # if the domain is running we can get the device class from >>xenstore. >>+ # This is more accurate, as blktap1 devices show up as blktap2 >>devices >>+ # in the config. >>+ if self._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED, >>DOM_STATE_CRASHED): >>+ # All block devices have a vbd frontend, so we know the >>frontend path >>+ dev = self.getDeviceController('vbd').convertToDeviceNumber( >>devid) >>+ frontendPath = "%s/device/vbd/%s" % (self.dompath, dev) >>+ for devclass in XendDevices.valid_devices(): >>+ for dev in xstransact.List("%s/device/%s" % (self.vmpath, >>devclass)): >>+ devFrontendPath = xstransact.Read("%s/device/%s/%s/ >>frontend" % (self.vmpath, devclass, dev)) >>+ if frontendPath == devFrontendPath: >>+ return devclass >>+ >>+ else: # the domain is not active so we must get the device class >>+ # from the config >>+ # To get a device number from the devid, >>+ # we temporarily use the device controller of VBD. >>+ dev = self.getDeviceController('vbd').convertToDeviceNumber( >>devid) >>+ dev_info = self._getDeviceInfo_vbd(dev) >>+ if dev_info: >>+ return dev_info[0] >> >> def _getDeviceInfo_vif(self, mac): >> for dev_type, dev_info in self.info.all_devices_sxpr(): >>@@ -1311,7 +1330,7 @@ class XendDomainInfo: >> >> def _getDeviceInfo_vbd(self, devid): >> for dev_type, dev_info in self.info.all_devices_sxpr(): >>- if dev_type != 'vbd' and dev_type != 'tap': >>+ if dev_type != 'vbd' and dev_type != 'tap' and dev_type != >>'tap2': >> continue >> dev = sxp.child_value(dev_info, 'dev') >> dev = dev.split(':')[0] >>@@ -2256,26 +2275,19 @@ class XendDomainInfo: >> log.debug("No device model") >> >> log.debug("Releasing devices") >>- t = xstransact("%s/device" % self.dompath) >>+ t = xstransact("%s/device" % self.vmpath) >> try: >> for devclass in XendDevices.valid_devices(): >> for dev in t.list(devclass): >> try: >>- true_devclass = devclass >>- if devclass == 'vbd': >>- # In the case of "vbd", the true device class >>- # may possibly be "tap". Just in case, verify >>- # device class. >>- devid = dev.split('/')[-1] >>- true_devclass = self.getBlockDeviceClass(devid) >> log.debug("Removing %s", dev); >>- self.destroyDevice(true_devclass, dev, False); >>+ self.destroyDevice(devclass, dev, False); >> except: >> # Log and swallow any exceptions in removal -- >> # there's nothing more we can do. >> log.exception("Device release failed: %s; %s; %s", >> self.info['name_label'], >>- true_devclass, dev) >>+ devclass, dev) >> finally: >> t.abort() >> >>@@ -2948,7 +2960,7 @@ class XendDomainInfo: >> >> fn = blkdev_uname_to_file(disk) >> taptype = blkdev_uname_to_taptype(disk) >>- mounted = devtype == 'tap' and taptype != 'aio' and taptype != >> 'sync' and not os.stat(fn).st_rdev >>+ mounted = devtype in ['tap', 'tap2'] and taptype != 'aio' and >>taptype != 'sync' and not os.stat(fn).st_rdev >> if mounted: >> # This is a file, not a device. pygrub can cope with a >> # file if it's raw, but if it's QCOW or other such formats >>@@ -3052,7 +3064,8 @@ class XendDomainInfo: >> diff = time.time() - start >> vbds = self.getDeviceController('vbd').deviceIDs() >> taps = self.getDeviceController('tap').deviceIDs() >>- for i in vbds + taps: >>+ tap2s = self.getDeviceController('tap2').deviceIDs() >>+ for i in vbds + taps + tap2s: >> test = 1 >> log.info("Dev %s still active, looping...", i) >> time.sleep(0.1) >>@@ -3635,7 +3648,7 @@ class XendDomainInfo: >> """ >> xenapi_vbd['image'] = vdi_image_path >> if vdi_image_path.startswith('tap'): >>- dev_uuid = self.info.device_add('tap', cfg_xenapi = xenapi_vbd) >>+ dev_uuid = self.info.device_add('tap2', cfg_xenapi = >>xenapi_vbd) >> else: >> dev_uuid = self.info.device_add('vbd', cfg_xenapi = xenapi_vbd) >> >>@@ -3647,7 +3660,7 @@ class XendDomainInfo: >> _, config = self.info['devices'][dev_uuid] >> >> if vdi_image_path.startswith('tap'): >>- dev_control = self.getDeviceController('tap') >>+ dev_control = self.getDeviceController('tap2') >> else: >> dev_control = self.getDeviceController('vbd') >> >>diff -r 7397608bce87 -r 6295171d4ccc tools/python/xen/xend/server/ >>BlktapController.py >>--- a/tools/python/xen/xend/server/BlktapController.py Mon Jun 29 15: 50:32 >>2009 +0100 >>+++ b/tools/python/xen/xend/server/BlktapController.py Tue Jun 30 17: 44:41 >>2009 -0700 >>@@ -24,7 +24,7 @@ blktap_disk_types = [ >> 'ioemu', >> 'tapdisk', >> ] >>- >>+ >> def doexec(args, inputtext=None): >> """Execute a subprocess, then return its return code, stdout and >>stderr""" >> proc = popen2.Popen3(args, True) >>@@ -49,8 +49,7 @@ def parseDeviceString(device): >> >> return minor, device, control >> >>- >>- >>+# blktap1 device controller >> class BlktapController(BlkifController): >> def __init__(self, vm): >> BlkifController.__init__(self, vm) >>@@ -59,11 +58,6 @@ class BlktapController(BlkifController): >> """@see DevController#frontendRoot""" >> >> return "%s/device/vbd" % self.vm.getDomainPath() >>- >>- def devicePath(self, devid): >>- """@see DevController#devicePath""" >>- >>- return "%s/device/vbd/%s" % (self.vm.vmpath, devid) >> >> def getDeviceDetails(self, config): >> (devid, back, front) = BlkifController.getDeviceDetails(self, >>config) >>@@ -123,6 +117,20 @@ class BlktapController(BlkifController): >> >> return (devid, back, front) >> >>+class Blktap2Controller(BlktapController): >>+ def __init__(self, vm): >>+ BlktapController.__init__(self, vm) >>+ >>+ def backendPath(self, backdom, devid): >>+ if self.deviceClass == 'tap2': >>+ deviceClass = 'vbd' >>+ else: >>+ deviceClass = 'tap' >>+ return "%s/backend/%s/%s/%d" % (backdom.getDomainPath(), >>+ deviceClass, >>+ self.vm.getDomid(), devid) >>+ >>+ >> def createDevice(self, config): >> >> uname = config.get('required_uname', '') >>@@ -140,12 +148,16 @@ class BlktapController(BlkifController): >> stderr.close(); >> if( out.find("blktap2") >= 0 ): >> blktap2_installed=1; >>- >>+ >> if typ in ('tap'): >>- if subtyp in ('tapdisk'): >> >>+ if subtyp in ('tapdisk'): >> if params in ('ioemu', 'qcow2', 'vmdk', 'sync') or not >>blktap2_installed: >>- log.warn('WARNING: using deprecated blktap module'); >>- return BlkifController.createDevice(self, config); >>+ # pass this device off to BlktapController >>+ log.warn('WARNING: using deprecated blktap module') >>+ self.deviceClass = 'tap' >>+ devid = BlktapController.createDevice(self, config) >>+ self.deviceClass = 'tap2' >>+ return devid >> >> cmd = [ TAPDISK_BINARY, '-n', '%s:%s' % (params, file) ] >> (rc,stdout,stderr) = doexec(cmd) >>@@ -165,7 +177,32 @@ class BlktapController(BlkifController): >> #device is configured. Then continue to create the device >> config.update({'uname' : 'phy:' + device.rstrip()}) >> >>- self.deviceClass='vbd' >> devid = BlkifController.createDevice(self, config) >>- self.deviceClass='tap' >> return devid >>+ >>+ # The new blocktap implementation requires a sysfs signal to close >>+ # out disks. This function is called from a thread when the >>+ # domain is detached from the disk. >>+ def finishDeviceCleanup(self, backpath, path): >>+ """Perform any device specific cleanup >>+ >>+ @backpath backend xenstore path. >>+ @path frontend device path >>+ >>+ """ >>+ >>+ #Figure out what we're going to wait on. >>+ self.waitForBackend_destroy(backpath) >>+ >>+ #Figure out the sysfs path. >>+ pattern = re.compile('/dev/xen/blktap-2/tapdev(\d+)$') >>+ ctrlid = pattern.search(path) >>+ ctrl = '/sys/class/blktap2/blktap' + ctrlid.group(1) >>+ >>+ #Close out the disk >>+ f = open(ctrl + '/remove', 'w') >>+ f.write('remove'); >>+ f.close() >>+ >>+ return >>+ >>diff -r 7397608bce87 -r 6295171d4ccc tools/python/xen/xend/server/ >>DevController.py >>--- a/tools/python/xen/xend/server/DevController.py Mon Jun 29 15:50:32 >>2009 +0100 >>+++ b/tools/python/xen/xend/server/DevController.py Tue Jun 30 17:44:41 >>2009 -0700 >>@@ -238,34 +238,6 @@ class DevController: >> # xstransact.Remove(self.devicePath()) ?? Below is the same ? >> self.vm._removeVm("device/%s/%d" % (self.deviceClass, dev)) >> >>- # The new blocktap implementation requires a sysfs signal to close >>- # out disks. This function is called from a thread when the >>- # domain is detached from the disk. >>- def finishDeviceCleanup(self, backpath, path): >>- """Perform any device specific cleanup >>- >>- @backpath backend xenstore path. >>- @path frontend device path >>- >>- """ >>- >>- if path and path.startswith('/dev/xen/blktap-2'): >>- >>- #Figure out what we're going to wait on. >>- self.waitForBackend_destroy(backpath) >>- >>- #Figure out the sysfs path. >>- pattern = re.compile('/dev/xen/blktap-2/tapdev(\d+)$') >>- ctrlid = pattern.search(path) >>- ctrl = '/sys/class/blktap2/blktap' + ctrlid.group(1) >>- >>- #Close out the disk >>- f = open(ctrl + '/remove', 'w') >>- f.write('remove'); >>- f.close() >>- >>- return >>- >> def configurations(self, transaction = None): >> return map(lambda x: self.configuration(x, transaction), self. >>deviceIDs(transaction)) >> >>@@ -575,7 +547,6 @@ class DevController: >> >> backpath = self.readVm(devid, "backend") >> >>- >> if backpath: >> statusPath = backpath + '/' + HOTPLUG_STATUS_NODE >> ev = Event() >>diff -r 7397608bce87 -r 6295171d4ccc tools/python/xen/xm/create.py >>--- a/tools/python/xen/xm/create.py Mon Jun 29 15:50:32 2009 +0100 >>+++ b/tools/python/xen/xm/create.py Tue Jun 30 17:44:41 2009 -0700 >>@@ -718,7 +718,7 @@ def configure_disks(config_devs, vals): >> """ >> for (uname, dev, mode, backend, protocol) in vals.disk: >> if uname.startswith('tap:'): >>- cls = 'tap' >>+ cls = 'tap2' >> else: >> cls = 'vbd' >> >>diff -r 7397608bce87 -r 6295171d4ccc tools/python/xen/xm/main.py >>--- a/tools/python/xen/xm/main.py Mon Jun 29 15:50:32 2009 +0100 >>+++ b/tools/python/xen/xm/main.py Tue Jun 30 17:44:41 2009 -0700 >>@@ -2371,7 +2371,7 @@ def parse_block_configuration(args): >> dom = args[0] >> >> if args[1].startswith('tap:'): >>- cls = 'tap' >>+ cls = 'tap2' >> else: >> cls = 'vbd' >> >>@@ -2706,7 +2706,9 @@ def xm_block_detach(args): >> dom = args[0] >> dev = args[1] >> dc = server.xend.domain.getBlockDeviceClass(dom, dev) >>- if dc == "tap": >>+ if dc == "tap2": >>+ detach(args, 'tap2') >>+ elif dc == "tap": >> detach(args, 'tap') >> else: >> detach(args, 'vbd') >> >>_______________________________________________ >>Xen-devel mailing list >>Xen-devel@xxxxxxxxxxxxxxxxxxx >>http://lists.xensource.com/xen-devel > > >_______________________________________________ >Xen-devel mailing list >Xen-devel@xxxxxxxxxxxxxxxxxxx >http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |