Blame SOURCES/kvm-qcow2-Resize-the-cache-upon-image-resizing.patch

7711c0
From 25829686076eac2d3d6216145377ecca8f92d6bd Mon Sep 17 00:00:00 2001
7711c0
From: Kevin Wolf <kwolf@redhat.com>
7711c0
Date: Tue, 19 Feb 2019 17:00:20 +0100
7711c0
Subject: [PATCH 19/23] qcow2: Resize the cache upon image resizing
7711c0
7711c0
RH-Author: Kevin Wolf <kwolf@redhat.com>
7711c0
Message-id: <20190219170023.27826-11-kwolf@redhat.com>
7711c0
Patchwork-id: 84553
7711c0
O-Subject: [RHEL-7.7 qemu-kvm-rhev PATCH 10/13] qcow2: Resize the cache upon image resizing
7711c0
Bugzilla: 1656913
7711c0
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
7711c0
RH-Acked-by: Max Reitz <mreitz@redhat.com>
7711c0
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
7711c0
7711c0
From: Leonid Bloch <lbloch@janustech.com>
7711c0
7711c0
The caches are now recalculated upon image resizing. This is done
7711c0
because the new default behavior of assigning L2 cache relatively to
7711c0
the image size, implies that the cache will be adapted accordingly
7711c0
after an image resize.
7711c0
7711c0
Signed-off-by: Leonid Bloch <lbloch@janustech.com>
7711c0
Reviewed-by: Alberto Garcia <berto@igalia.com>
7711c0
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
7711c0
(cherry picked from commit 45b4949c7bcdcd998cb42f5c517e80a2657cfd33)
7711c0
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
7711c0
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
7711c0
---
7711c0
 block/qcow2.c | 11 +++++++++++
7711c0
 1 file changed, 11 insertions(+)
7711c0
7711c0
diff --git a/block/qcow2.c b/block/qcow2.c
7711c0
index fc6bddd..72f1ea8 100644
7711c0
--- a/block/qcow2.c
7711c0
+++ b/block/qcow2.c
7711c0
@@ -3462,6 +3462,7 @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
7711c0
     uint64_t old_length;
7711c0
     int64_t new_l1_size;
7711c0
     int ret;
7711c0
+    QDict *options;
7711c0
 
7711c0
     if (prealloc != PREALLOC_MODE_OFF && prealloc != PREALLOC_MODE_METADATA &&
7711c0
         prealloc != PREALLOC_MODE_FALLOC && prealloc != PREALLOC_MODE_FULL)
7711c0
@@ -3686,6 +3687,8 @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
7711c0
         }
7711c0
     }
7711c0
 
7711c0
+    bs->total_sectors = offset / BDRV_SECTOR_SIZE;
7711c0
+
7711c0
     /* write updated header.size */
7711c0
     offset = cpu_to_be64(offset);
7711c0
     ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, size),
7711c0
@@ -3696,6 +3699,14 @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
7711c0
     }
7711c0
 
7711c0
     s->l1_vm_state_index = new_l1_size;
7711c0
+
7711c0
+    /* Update cache sizes */
7711c0
+    options = qdict_clone_shallow(bs->options);
7711c0
+    ret = qcow2_update_options(bs, options, s->flags, errp);
7711c0
+    qobject_unref(options);
7711c0
+    if (ret < 0) {
7711c0
+        goto fail;
7711c0
+    }
7711c0
     ret = 0;
7711c0
 fail:
7711c0
     qemu_co_mutex_unlock(&s->lock);
7711c0
-- 
7711c0
1.8.3.1
7711c0