ae23c9
From 1041ad03a2c47f5bbae0b4c8089bab98ef1ba12d Mon Sep 17 00:00:00 2001
ae23c9
From: Kevin Wolf <kwolf@redhat.com>
ae23c9
Date: Thu, 6 Dec 2018 17:12:36 +0000
ae23c9
Subject: [PATCH 11/15] qcow2: Resize the cache upon image resizing
ae23c9
ae23c9
RH-Author: Kevin Wolf <kwolf@redhat.com>
ae23c9
Message-id: <20181206171240.5674-12-kwolf@redhat.com>
ae23c9
Patchwork-id: 83293
ae23c9
O-Subject: [RHEL-8.0 qemu-kvm PATCH 11/15] qcow2: Resize the cache upon image resizing
ae23c9
Bugzilla: 1656507
ae23c9
RH-Acked-by: Max Reitz <mreitz@redhat.com>
ae23c9
RH-Acked-by: John Snow <jsnow@redhat.com>
ae23c9
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
ae23c9
ae23c9
From: Leonid Bloch <lbloch@janustech.com>
ae23c9
ae23c9
The caches are now recalculated upon image resizing. This is done
ae23c9
because the new default behavior of assigning L2 cache relatively to
ae23c9
the image size, implies that the cache will be adapted accordingly
ae23c9
after an image resize.
ae23c9
ae23c9
Signed-off-by: Leonid Bloch <lbloch@janustech.com>
ae23c9
Reviewed-by: Alberto Garcia <berto@igalia.com>
ae23c9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
ae23c9
(cherry picked from commit 45b4949c7bcdcd998cb42f5c517e80a2657cfd33)
ae23c9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
ae23c9
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
ae23c9
---
ae23c9
 block/qcow2.c | 11 +++++++++++
ae23c9
 1 file changed, 11 insertions(+)
ae23c9
ae23c9
diff --git a/block/qcow2.c b/block/qcow2.c
ae23c9
index fc6bddd..72f1ea8 100644
ae23c9
--- a/block/qcow2.c
ae23c9
+++ b/block/qcow2.c
ae23c9
@@ -3462,6 +3462,7 @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
ae23c9
     uint64_t old_length;
ae23c9
     int64_t new_l1_size;
ae23c9
     int ret;
ae23c9
+    QDict *options;
ae23c9
 
ae23c9
     if (prealloc != PREALLOC_MODE_OFF && prealloc != PREALLOC_MODE_METADATA &&
ae23c9
         prealloc != PREALLOC_MODE_FALLOC && prealloc != PREALLOC_MODE_FULL)
ae23c9
@@ -3686,6 +3687,8 @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
ae23c9
         }
ae23c9
     }
ae23c9
 
ae23c9
+    bs->total_sectors = offset / BDRV_SECTOR_SIZE;
ae23c9
+
ae23c9
     /* write updated header.size */
ae23c9
     offset = cpu_to_be64(offset);
ae23c9
     ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, size),
ae23c9
@@ -3696,6 +3699,14 @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
ae23c9
     }
ae23c9
 
ae23c9
     s->l1_vm_state_index = new_l1_size;
ae23c9
+
ae23c9
+    /* Update cache sizes */
ae23c9
+    options = qdict_clone_shallow(bs->options);
ae23c9
+    ret = qcow2_update_options(bs, options, s->flags, errp);
ae23c9
+    qobject_unref(options);
ae23c9
+    if (ret < 0) {
ae23c9
+        goto fail;
ae23c9
+    }
ae23c9
     ret = 0;
ae23c9
 fail:
ae23c9
     qemu_co_mutex_unlock(&s->lock);
ae23c9
-- 
ae23c9
1.8.3.1
ae23c9