|
@@ -159,7 +159,7 @@ static int xen_blkif_alloc_rings(struct xen_blkif *blkif)
|
|
init_waitqueue_head(&ring->shutdown_wq);
|
|
init_waitqueue_head(&ring->shutdown_wq);
|
|
ring->blkif = blkif;
|
|
ring->blkif = blkif;
|
|
ring->st_print = jiffies;
|
|
ring->st_print = jiffies;
|
|
- xen_blkif_get(blkif);
|
|
|
|
|
|
+ ring->active = true;
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -249,6 +249,9 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
|
|
struct xen_blkif_ring *ring = &blkif->rings[r];
|
|
struct xen_blkif_ring *ring = &blkif->rings[r];
|
|
unsigned int i = 0;
|
|
unsigned int i = 0;
|
|
|
|
|
|
|
|
+ if (!ring->active)
|
|
|
|
+ continue;
|
|
|
|
+
|
|
if (ring->xenblkd) {
|
|
if (ring->xenblkd) {
|
|
kthread_stop(ring->xenblkd);
|
|
kthread_stop(ring->xenblkd);
|
|
wake_up(&ring->shutdown_wq);
|
|
wake_up(&ring->shutdown_wq);
|
|
@@ -296,7 +299,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
|
|
BUG_ON(ring->free_pages_num != 0);
|
|
BUG_ON(ring->free_pages_num != 0);
|
|
BUG_ON(ring->persistent_gnt_c != 0);
|
|
BUG_ON(ring->persistent_gnt_c != 0);
|
|
WARN_ON(i != (XEN_BLKIF_REQS_PER_PAGE * blkif->nr_ring_pages));
|
|
WARN_ON(i != (XEN_BLKIF_REQS_PER_PAGE * blkif->nr_ring_pages));
|
|
- xen_blkif_put(blkif);
|
|
|
|
|
|
+ ring->active = false;
|
|
}
|
|
}
|
|
blkif->nr_ring_pages = 0;
|
|
blkif->nr_ring_pages = 0;
|
|
/*
|
|
/*
|