aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>2005-12-04 18:24:24 +0100
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>2005-12-04 18:24:24 +0100
commitf41cb4d2cc5032afefa5395c53c8bbf6245576c3 (patch)
tree971fdec2743777ef5343d6424005a535d3299762
parent127515a94353a6724e5b4207cde892f10df96053 (diff)
parent1e4b462e21ccdf69ef19152374b28a4f5df03701 (diff)
downloadxen-f41cb4d2cc5032afefa5395c53c8bbf6245576c3.tar.gz
xen-f41cb4d2cc5032afefa5395c53c8bbf6245576c3.tar.bz2
xen-f41cb4d2cc5032afefa5395c53c8bbf6245576c3.zip
Merge
-rw-r--r--linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c
index fcc6c12de4..d9aee65e69 100644
--- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c
+++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c
@@ -493,12 +493,12 @@ static void make_response(blkif_t *blkif, unsigned long id,
blk_ring->rsp_prod_pvt++;
RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(blk_ring, notify);
- /*
- * Tail check for pending requests. Allows frontend to avoid
- * notifications if requests are already in flight (lower overheads
- * and promotes batching).
- */
if (blk_ring->rsp_prod_pvt == blk_ring->req_cons) {
+ /*
+ * Tail check for pending requests. Allows frontend to avoid
+ * notifications if requests are already in flight (lower
+ * overheads and promotes batching).
+ */
int more_to_do;
RING_FINAL_CHECK_FOR_REQUESTS(blk_ring, more_to_do);
if (more_to_do) {
@@ -506,6 +506,12 @@ static void make_response(blkif_t *blkif, unsigned long id,
maybe_trigger_blkio_schedule();
}
}
+ else if (!__on_blkdev_list(blkif)
+ && RING_HAS_UNCONSUMED_REQUESTS(blk_ring)) {
+ /* Keep pulling requests as they become available... */
+ add_to_blkdev_list_tail(blkif);
+ maybe_trigger_blkio_schedule();
+ }
spin_unlock_irqrestore(&blkif->blk_ring_lock, flags);