diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-03-13 15:06:58 +0100 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-03-13 15:06:58 +0100 |
commit | 4e2080291801fe3fb4c9851ef6ef9fe6b014c717 (patch) | |
tree | 25f7d233dfaae2d59fdfacc27dbdb4ff8849b875 /linux-2.6-xen-sparse | |
parent | 1094009e12733acd885be0734bdd7324c3123711 (diff) | |
download | xen-4e2080291801fe3fb4c9851ef6ef9fe6b014c717.tar.gz xen-4e2080291801fe3fb4c9851ef6ef9fe6b014c717.tar.bz2 xen-4e2080291801fe3fb4c9851ef6ef9fe6b014c717.zip |
Clean up block-device hotplug routines in xenlinux.
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'linux-2.6-xen-sparse')
-rw-r--r-- | linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c | 6 | ||||
-rw-r--r-- | linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c | 21 |
2 files changed, 13 insertions, 14 deletions
diff --git a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c index c8c9decc38..5c73634c83 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c @@ -352,11 +352,7 @@ static void blkfront_closing(struct xenbus_device *dev) DPRINTK("blkfront_closing: %s removed\n", dev->nodename); - if (info->mi) { - DPRINTK("Calling xlvbd_del\n"); - xlvbd_del(info); - info->mi = NULL; - } + xlvbd_del(info); xenbus_switch_state(dev, XBT_NULL, XenbusStateClosed); } diff --git a/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c b/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c index d97f798e6f..b092a569ae 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c @@ -216,6 +216,10 @@ xlvbd_alloc_gendisk(int minor, blkif_sector_t capacity, int vdevice, int nr_minors = 1; int err = -ENODEV; + BUG_ON(info->gd != NULL); + BUG_ON(info->mi != NULL); + BUG_ON(info->rq != NULL); + mi = xlbd_get_major_info(vdevice); if (mi == NULL) goto out; @@ -268,6 +272,7 @@ xlvbd_alloc_gendisk(int minor, blkif_sector_t capacity, int vdevice, out: if (mi) xlbd_put_major_info(mi); + info->mi = NULL; return err; } @@ -294,22 +299,20 @@ xlvbd_add(blkif_sector_t capacity, int vdevice, u16 vdisk_info, void xlvbd_del(struct blkfront_info *info) { - struct block_device *bd; - - bd = bdget(info->dev); - if (bd == NULL) - return; - - if (info->gd == NULL) + if (info->mi == NULL) return; + BUG_ON(info->gd == NULL); del_gendisk(info->gd); put_disk(info->gd); + info->gd = NULL; + xlbd_put_major_info(info->mi); info->mi = NULL; - blk_cleanup_queue(info->rq); - bdput(bd); + BUG_ON(info->rq == NULL); + blk_cleanup_queue(info->rq); + info->rq = NULL; } /* |