Calling function doesn't handle an "Exception" but only VmError, thus cleanup work won't been done if using Exception. Change it to VmError. Signed-off-by ChunyanLiu Index: xen-4.0.1-testing/tools/python/xen/xend/server/BlktapController.py =================================================================== --- xen-4.0.1-testing.orig/tools/python/xen/xend/server/BlktapController.py +++ xen-4.0.1-testing/tools/python/xen/xend/server/BlktapController.py @@ -4,6 +4,7 @@ import string, re from xen.xend.server.blkif import BlkifController from xen.xend.XendLogging import log from xen.util.xpopen import xPopen3 +from xen.xend.XendError import VmError phantomDev = 0; phantomId = 0; @@ -209,7 +210,7 @@ class Blktap2Controller(BlktapController out = stdout.read(); stdout.close(); stderr.close(); - raise Exception, 'Failed to create device.\n stdout: %s\n stderr: %s\nCheck that target \"%s\" exists and that blktap2 driver installed in dom0.' % (out.rstrip(), err.rstrip(), file); + raise VmError('Failed to create device.\n stdout: %s\n stderr: %s\nCheck that target \"%s\" exists and that blktap2 driver installed in dom0.' % (out.rstrip(), err.rstrip(), file)); minor, device, control = parseDeviceString(stdout.readline()) stdout.close();