aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2015-11-24 10:27:19 +0000
committerPeter Maydell <peter.maydell@linaro.org>2015-11-24 10:27:19 +0000
commit229c0372cf3ca201c41d2bb121627e6752e776ad (patch)
tree3e174681776a6d36a270ddfc6fa004b055971c9c
parent5522a841cab5f15ac0f8d207b320c21755a7a1a5 (diff)
parent466138dc689b6b14f31d5d20316affb4b4efd177 (diff)
Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging
# gpg: Signature made Tue 24 Nov 2015 08:04:07 GMT using RSA key ID 81AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" * remotes/stefanha/tags/block-pull-request: virtio-blk: Move resetting of req->mr_next to virtio_blk_handle_rw_error parallels: dirty BAT properly for continuous allocations Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--block/parallels.c2
-rw-r--r--hw/block/virtio-blk.c7
2 files changed, 4 insertions, 5 deletions
diff --git a/block/parallels.c b/block/parallels.c
index 4f79293826..f689fdeaff 100644
--- a/block/parallels.c
+++ b/block/parallels.c
@@ -220,7 +220,7 @@ static int64_t allocate_clusters(BlockDriverState *bs, int64_t sector_num,
s->bat_bitmap[idx + i] = cpu_to_le32(s->data_end / s->off_multiplier);
s->data_end += s->tracks;
bitmap_set(s->bat_dirty_bmap,
- bat_entry_off(idx) / s->bat_dirty_block, 1);
+ bat_entry_off(idx + i) / s->bat_dirty_block, 1);
}
return bat2sect(s, idx) + sector_num % s->tracks;
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index 848f3fe3e1..756ae5ce63 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -72,6 +72,9 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, int error,
VirtIOBlock *s = req->dev;
if (action == BLOCK_ERROR_ACTION_STOP) {
+ /* Break the link as the next request is going to be parsed from the
+ * ring again. Otherwise we may end up doing a double completion! */
+ req->mr_next = NULL;
req->next = s->rq;
s->rq = req;
} else if (action == BLOCK_ERROR_ACTION_REPORT) {
@@ -112,10 +115,6 @@ static void virtio_blk_rw_complete(void *opaque, int ret)
* happen on the other side of the migration).
*/
if (virtio_blk_handle_rw_error(req, -ret, is_read)) {
- /* Break the link in case the next request is added to the
- * restart queue and is going to be parsed from the ring again.
- */
- req->mr_next = NULL;
continue;
}
}