Current migration code uses blk_put_request in order to finish a request
before requeuing it. This function doesn't update the statistics of the
queue, which completely screws accounting. Use blk_end_request_all instead
which properly updates the statistics of the queue.

Signed-off-by: Roger Pau MonnĂ© <[email protected]>
Reported-and-Tested-by: Ouyang Zhaowei (Charles) <[email protected]>
Cc: Konrad Rzeszutek Wilk <[email protected]>
Cc: Boris Ostrovsky <[email protected]>
Cc: David Vrabel <[email protected]>
Cc: [email protected]
---
 drivers/block/xen-blkfront.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 5ac312f..aac41c1 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1493,7 +1493,7 @@ static int blkif_recover(struct blkfront_info *info)
                merge_bio.tail = copy[i].request->biotail;
                bio_list_merge(&bio_list, &merge_bio);
                copy[i].request->bio = NULL;
-               blk_put_request(copy[i].request);
+               blk_end_request_all(copy[i].request, 0);
        }
 
        kfree(copy);
@@ -1516,7 +1516,7 @@ static int blkif_recover(struct blkfront_info *info)
                req->bio = NULL;
                if (req->cmd_flags & (REQ_FLUSH | REQ_FUA))
                        pr_alert("diskcache flush request found!\n");
-               __blk_put_request(info->rq, req);
+               __blk_end_request_all(req, 0);
        }
        spin_unlock_irq(&info->io_lock);
 
-- 
1.9.3 (Apple Git-50)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to