[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/6] xen-blkfront: handle backend CLOSED without CLOSING
On Mon, Oct 01, 2012 at 06:19:19PM +0100, David Vrabel wrote: > On 25/09/12 18:53, David Vrabel wrote: > > On 21/09/12 17:04, David Vrabel wrote: > >> From: David Vrabel <david.vrabel@xxxxxxxxxx> > >> > >> Backend drivers shouldn't transistion to CLOSED unless the frontend is > >> CLOSED. If a backend does transition to CLOSED too soon then the > >> frontend may not see the CLOSING state and will not properly shutdown. > >> > >> So, treat an unexpected backend CLOSED state the same as CLOSING. > > > > Didn't handle the frontend block device being mounted. Updated patch here. > > Konrad, can you ack this updated patch if you're happy with it. Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> Or should I just carry it in my for-jens-3.7 bug-fixes queue and ask Jen to pull it once rc0 is out? > > Thanks. > > David > > > 8<--------------------------------- > > xen-blkfront: handle backend CLOSED without CLOSING > > > > Backend drivers shouldn't transistion to CLOSED unless the frontend is > > CLOSED. If a backend does transition to CLOSED too soon then the > > frontend may not see the CLOSING state and will not properly shutdown. > > > > So, treat an unexpected backend CLOSED state the same as CLOSING. > > > > If the backend is CLOSED then the frontend can't talk to it so go to > > CLOSED immediately without waiting for the block device to be closed > > or unmounted. > > > > Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx> > > --- > > drivers/block/xen-blkfront.c | 13 +++++++++---- > > 1 files changed, 9 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c > > index 2c2d2e5..c1f5f38 100644 > > --- a/drivers/block/xen-blkfront.c > > +++ b/drivers/block/xen-blkfront.c > > @@ -1143,7 +1143,8 @@ static int blkfront_resume(struct xenbus_device *dev) > > } > > > > static void > > -blkfront_closing(struct blkfront_info *info) > > +blkfront_closing(struct blkfront_info *info, > > + enum xenbus_state backend_state) > > { > > struct xenbus_device *xbdev = info->xbdev; > > struct block_device *bdev = NULL; > > @@ -1167,7 +1168,8 @@ blkfront_closing(struct blkfront_info *info) > > > > mutex_lock(&bdev->bd_mutex); > > > > - if (bdev->bd_openers) { > > + /* If the backend is already CLOSED, close now. */ > > + if (bdev->bd_openers && backend_state != XenbusStateClosed) { > > xenbus_dev_error(xbdev, -EBUSY, > > "Device in use; refusing to close"); > > xenbus_switch_state(xbdev, XenbusStateClosing); > > @@ -1340,15 +1342,18 @@ static void blkback_changed(struct xenbus_device > > *dev, > > case XenbusStateReconfiguring: > > case XenbusStateReconfigured: > > case XenbusStateUnknown: > > - case XenbusStateClosed: > > break; > > > > case XenbusStateConnected: > > blkfront_connect(info); > > break; > > > > + case XenbusStateClosed: > > + if (dev->state == XenbusStateClosed) > > + break; > > + /* Missed the backend's Closing state -- fallthrough */ > > case XenbusStateClosing: > > - blkfront_closing(info); > > + blkfront_closing(info, backend_state); > > break; > > } > > } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |