[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [LINUX] Fix blkfront driver to check connection status to backend in
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxxxx # Node ID 91d2f2258c563100d5294fe12fd9fbe56870b213 # Parent 1650e07c9e5261dc823e156dc0a9350e98f870bc [LINUX] Fix blkfront driver to check connection status to backend in all critical circumstances. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) diff -r 1650e07c9e52 -r 91d2f2258c56 linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c Tue Jun 13 14:36:04 2006 +0100 +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c Tue Jun 13 15:13:29 2006 +0100 @@ -407,7 +407,8 @@ static void blkif_restart_queue(void *ar { struct blkfront_info *info = (struct blkfront_info *)arg; spin_lock_irq(&blkif_io_lock); - kick_pending_request_queues(info); + if (info->connected == BLKIF_STATE_CONNECTED) + kick_pending_request_queues(info); spin_unlock_irq(&blkif_io_lock); } @@ -595,7 +596,8 @@ void do_blkif_request(request_queue_t *r continue; } - if (RING_FULL(&info->ring)) + if (unlikely(info->connected != BLKIF_STATE_CONNECTED) || + RING_FULL(&info->ring)) goto wait; DPRINTK("do_blk_req %p: cmd %p, sec %lx, " @@ -768,17 +770,17 @@ static void blkif_recover(struct blkfron (void)xenbus_switch_state(info->xbdev, XenbusStateConnected); + spin_lock_irq(&blkif_io_lock); + /* Now safe for us to use the shared ring */ - spin_lock_irq(&blkif_io_lock); info->connected = BLKIF_STATE_CONNECTED; - spin_unlock_irq(&blkif_io_lock); /* Send off requeued requests */ flush_requests(info); /* Kick any other new requests queued since we resumed */ - spin_lock_irq(&blkif_io_lock); kick_pending_request_queues(info); + spin_unlock_irq(&blkif_io_lock); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |