[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] vbd devices stuck in Initialising/InitWait
On Wed, Mar 29, 2006 at 09:50:02PM -0600, Christopher S. Aker wrote: > Christopher S. Aker wrote: > >When devices are missing, talk_to_backend() is making duplicate calls > >for the same vbd to xenbus_switch_state(), and on the second call > >xenbus_switch_state avoids writing to xenstore an identical value (which > >it's supposed to). Why the duplicate calls? > > That got me thinking .. The duplicate calls are happening for some > reason, but they're never attempting to write out the state value again > because of this code in xenbus_switch_state(): > > if (state == dev->state) { > return 0; > } > > The initial call to xenbus_switch_state() _did_ set the value in > dev->state, it just never made it into xenstore even though the > xenbus_printf call didn't return an error. > > So, commenting out the code above makes everything work. 15 reboots and > all the devices have show up every time. > > I don't know why the first call to xenbus_switch_state() isn't really > writing out the value to xenstore. xenbus_printf() isn't returning an > error, but still the value fails to make it into the store. That's the > best of my understanding at the moment... I've figured this one out. The duplicate calls are coming because the call to xenbus_switch_state is inside a transaction, which is then aborted and retried. This breaks, because of the test above -- the state has been cached locally, but it's not actually made it to the store, because the transaction fails. xenbus_switch_state simply shouldn't be being called in a transaction. I am testing a patch at the moment that should solve this problem for you. Cheers, Ewan. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |