diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2015-11-24 10:27:19 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2015-11-24 10:27:19 +0000 |
commit | 229c0372cf3ca201c41d2bb121627e6752e776ad (patch) | |
tree | 3e174681776a6d36a270ddfc6fa004b055971c9c | |
parent | 5522a841cab5f15ac0f8d207b320c21755a7a1a5 (diff) | |
parent | 466138dc689b6b14f31d5d20316affb4b4efd177 (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.c | 2 | ||||
-rw-r--r-- | hw/block/virtio-blk.c | 7 |
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; } } |