xen-blkfront: fix accounting of reqs when migrating
authorRoger Pau Monne <roger.pau@citrix.com>
Mon, 2 Feb 2015 11:28:21 +0000 (11:28 +0000)
committerDavid Vrabel <david.vrabel@citrix.com>
Tue, 10 Feb 2015 16:04:45 +0000 (16:04 +0000)
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é <roger.pau@citrix.com>
Reported-and-Tested-by: Ouyang Zhaowei (Charles) <ouyangzhaowei@huawei.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: xen-devel@lists.xenproject.org
drivers/block/xen-blkfront.c

index 2236c6f31608977f13b284cdec3b06e164ab632a..7f66d2e08f19f5c86a7e5367a3c2f25eb4982b0d 100644 (file)
@@ -1511,7 +1511,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);
@@ -1534,7 +1534,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);