diff options
Diffstat (limited to 'drivers/block/xen-blkfront.c')
-rw-r--r-- | drivers/block/xen-blkfront.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index 6d5950839bd0..132120ae4bde 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c | |||
@@ -932,8 +932,6 @@ static void blkfront_closing(struct xenbus_device *dev) | |||
932 | 932 | ||
933 | spin_lock_irqsave(&blkif_io_lock, flags); | 933 | spin_lock_irqsave(&blkif_io_lock, flags); |
934 | 934 | ||
935 | del_gendisk(info->gd); | ||
936 | |||
937 | /* No more blkif_request(). */ | 935 | /* No more blkif_request(). */ |
938 | blk_stop_queue(info->rq); | 936 | blk_stop_queue(info->rq); |
939 | 937 | ||
@@ -947,6 +945,8 @@ static void blkfront_closing(struct xenbus_device *dev) | |||
947 | blk_cleanup_queue(info->rq); | 945 | blk_cleanup_queue(info->rq); |
948 | info->rq = NULL; | 946 | info->rq = NULL; |
949 | 947 | ||
948 | del_gendisk(info->gd); | ||
949 | |||
950 | out: | 950 | out: |
951 | xenbus_frontend_closed(dev); | 951 | xenbus_frontend_closed(dev); |
952 | } | 952 | } |
@@ -975,8 +975,10 @@ static void backend_changed(struct xenbus_device *dev, | |||
975 | break; | 975 | break; |
976 | 976 | ||
977 | case XenbusStateClosing: | 977 | case XenbusStateClosing: |
978 | if (info->gd == NULL) | 978 | if (info->gd == NULL) { |
979 | xenbus_dev_fatal(dev, -ENODEV, "gd is NULL"); | 979 | xenbus_frontend_closed(dev); |
980 | break; | ||
981 | } | ||
980 | bd = bdget_disk(info->gd, 0); | 982 | bd = bdget_disk(info->gd, 0); |
981 | if (bd == NULL) | 983 | if (bd == NULL) |
982 | xenbus_dev_fatal(dev, -ENODEV, "bdget failed"); | 984 | xenbus_dev_fatal(dev, -ENODEV, "bdget failed"); |