|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5 of 7 v2] blktap3/tapback: Introduce front-end XenStore path handler
On Fri, 2013-01-25 at 15:09 +0000, Thanos Makatos wrote:
> > On Fri, 2013-01-04 at 12:14 +0000, Thanos Makatos wrote:
> > > +static inline int
> > > +blkback_frontend_changed(vbd_t * const xbdev, const XenbusState
> > state)
> > > +{
> > > + /*
> > > + * XXX The size of the array (9) comes from the XenbusState
> > enum.
> > > + *
> > > + * TODO Send a patch that adds XenbusStateMin, XenbusStateMax,
> > > + * XenbusStateInvalid and in the XenbusState enum (located in
> > xenbus.h).
> > > + */
> > > + struct frontend_state_change {
> > > + int (*fn)(vbd_t * const, const XenbusState);
> > > + const XenbusState state;
> >
> > Is this the next backend state or the current or?...
> >
> > > + } static const frontend_state_change_map[] = {
> > > + {NULL, 0}, /*
> > Unknown */
> >
> > [XenbusStateUnknown] = {NULL,0},
> > [XenbusStateInitialising] = {tapback_device_switch_state,
> > XenbusStateInitWait},
> >
> > ? Bit less error prone.
> >
> > > + {tapback_device_switch_state, XenbusStateInitWait}, /*
> > Initialising */
> > > + {NULL, 0}, /*
> > InitWait */
> > > + {blkback_connect_tap, 0}, /*
> > Initialised */
> > > + {blkback_connect_tap, 0}, /*
> > Connected */
> > > + {tapback_device_switch_state, XenbusStateClosing}, /*
> > Closing */
> > > + {backend_close, 0}, /*
> > StateClosed */
> > > + {NULL, 0}, /*
> > Reconfiguring */
> > > + {NULL, 0} /*
> > Reconfigured */
> > > + };
>
> The position of each element in the frontend_state_change_map array
> reflects the state into which the front-end just switched. Each
> element contains a call-back function to be executed in response, and
> an optional state for the back-end to switch to. Does this make sense?
Absolutely.
> Actually, there was a switch statement and I replaced it with this in
> order to make it less error-prone!
The switch is a pretty common idiom in xenbus state machines but this
works too if you prefer it.
My suggestion is just to use:
[XenbusStateInitialising] = {tapback_device_switch_state,
XenbusStateInitWait},
(so, when f.e. goes to Initialising, call tapback_... and switch to InitWait).
instead of relying on the order of the array, otherwise you have to be
careful to get thing in the correct slot in the array.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |