The attached patch is a hack I cooked up to fix one of the libvirt-TCK Xen failures. The test (200-disk-hotplug.t) attempts to hot add and remove a disk from a running domain. The add works fine, but remove fails with libxl: debug: libxl.c:3858:libxl_device_disk_remove: ao 0x7f9b9c0015a0: create: how=(nil) callback=(nil) poller= 0x7f9ba0004590 libxl: error: libxl.c:2399:libxl__device_from_disk: unrecognized disk backend type: 0 The test does not define a backend type, in which case the libvirt libxl driver allows libxl to choose an appropriate backend via libxl__device_disk_set_backend(). The backend type is never set on a remove operation, hence it fails with the above error. I spent some time trying to figure out the best place to set backend type on remove, but in the end could only come up with this hack. It wouldn't feel so gross if I could have simply added 'libxl__device_##type##_setdefault(gc, type);' to the existing DEFINE_DEVICE_REMOVE macro, but alas libxl__device_nic_setdefault() has a different prototype than the other devices. Better suggestions welcomed! One I considered was fixing this in libvirt. But the Xen community suggested allowing libxl to choose a suitable backend when not specified, so I think this recommendation should be symmetrical in the add and remove operations. Regards, Jim