[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] hotplugStatusCallback 5 (device busy) error during local live migration



The following error shows up in xend.log while doing a local live migration of a 2.6.32 based PV guest running on a Xen 3.4.0 based system:
[2010-12-28 09:00:51 4826] DEBUG (DevController:144) Waiting for 51728.
[2010-12-28 09:00:51 4826] DEBUG (DevController:629) hotplugStatusCallback /local/domain/0/backend/vbd/5696/51728/hotplug-status.
[2010-12-28 09:00:51 4826] DEBUG (DevController:643) hotplugStatusCallback 5.
[2010-12-28 09:00:51 4826] ERROR (XendCheckpoint:347) Device 51728 (vbd) could not be connected.
This message shows up in the domU's dmesg:
vbd vbd-51728: 16 Device in use; refusing to close
vm.cfg has:
disk =  ['file:/OVS/seed_pool/OVM_EL5U5_X86_64_PVM_10GB/System.img,xvda,w','phy:/dev/sda1,xvdb,w']
The messages do not occur after changing "w" to "w+" (may have been "w!").  Is "w+" required for local migrations?  Is it masking an underlying bug?

waitForBackend() calls hotplugStatusCallback():
xen/source/tools/python/xen/xend/server/DevController.py waitForBackend() calls hotplugStatusCallback()
556             xswatch(statusPath, hotplugStatusCallback, ev, result)
557
558             ev.wait(DEVICE_CREATE_TIMEOUT)
xen/source/tools/python/xen/xend/server/DevController.py hotplugStatusCallback()

633     if status is not None:
634         if status == HOTPLUG_STATUS_ERROR:
635             result['status'] = Error
636         elif status == HOTPLUG_STATUS_BUSY:
637             result['status'] = Busy
638         else:
639             result['status'] = Connected
640     else:
641         return 1
This treats HOTPLUG_STATUS_BUSY as a one-time error.  It seems like it should return 1 (keep watching) on HOTPLUG_STATUS_BUSY, something like:
     if status is not None:
         if status == HOTPLUG_STATUS_ERROR:
             result['status'] = Error
         elif status == HOTPLUG_STATUS_BUSY:
-            result['status'] = Busy
+           return 1
         else:
             result['status'] = Connected
     else:
         return 1

We would time out if it it stays busy for DEVICE_CREATE_TIMEOUT.  Not sure if we would need to do an unwatch in that case.

Thanks,
Chuck
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.