From d899649b2e59c67fa92ea908daa9a1076a5b08da Mon Sep 17 00:00:00 2001 From: t_jeang Date: Tue, 6 Jan 2009 12:06:01 +0000 Subject: [PATCH] imported patch CA-24267-blkback-unpause --- drivers/xen/blkback/xenbus.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/xen/blkback/xenbus.c b/drivers/xen/blkback/xenbus.c index 775f723d..7dcc6966 100644 --- a/drivers/xen/blkback/xenbus.c +++ b/drivers/xen/blkback/xenbus.c @@ -346,14 +346,16 @@ static int blkback_remove(struct xenbus_device *dev) void blkback_close(blkif_t *blkif) { blkif_disconnect(blkif); + + down(&blkback_dev_sem); + vbd_free(&blkif->vbd); blkif->be->major = 0; blkif->be->minor = 0; blkif->remove_requested = 0; - - down(&blkback_dev_sem); if (blkif->be->dev) xenvbd_sysfs_delif(blkif->be->dev); + up(&blkback_dev_sem); backend_release(blkif->be); @@ -439,7 +441,10 @@ void blkback_signal_resumed(blkif_t *blkif) down(&blkback_dev_sem); if (be->dev) { - connect(be); + if (blkif->vbd.bdev && + be->dev->state == XenbusStateConnected) + connect(be); + err = xenbus_rm(XBT_NIL, be->dev->nodename, "pause-done"); if (err) xenbus_dev_error(be->dev, err, "removing pause-done"); -- 2.39.5