|
|
|
|
|
|
|
|
|
|
xen-devel
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
|
|
|
|
|