[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

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.



Xen-devel mailing list



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