Am 25.09.2018 um 00:53 hat Leonid Bloch geschrieben: > The caches are now recalculated upon image resizing. This is done > because the new default behavior of assigning L2 cache relatively to > the image size, implies that the cache will be adapted accordingly > after an image resize. > > Signed-off-by: Leonid Bloch <[email protected]> > Reviewed-by: Alberto Garcia <[email protected]> > --- > block/qcow2.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/block/qcow2.c b/block/qcow2.c > index 589f6c1b1c..c68f896c66 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -3418,6 +3418,7 @@ static int coroutine_fn > qcow2_co_truncate(BlockDriverState *bs, int64_t offset, > uint64_t old_length; > int64_t new_l1_size; > int ret; > + QDict *options; > > if (prealloc != PREALLOC_MODE_OFF && prealloc != PREALLOC_MODE_METADATA > && > prealloc != PREALLOC_MODE_FALLOC && prealloc != PREALLOC_MODE_FULL) > @@ -3642,6 +3643,8 @@ static int coroutine_fn > qcow2_co_truncate(BlockDriverState *bs, int64_t offset, > } > } > > + bs->total_sectors = offset / BDRV_SECTOR_SIZE; > + > /* write updated header.size */ > offset = cpu_to_be64(offset); > ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, size), > @@ -3652,6 +3655,13 @@ static int coroutine_fn > qcow2_co_truncate(BlockDriverState *bs, int64_t offset, > } > > s->l1_vm_state_index = new_l1_size; > + > + /* Update cache sizes */ > + options = qdict_clone_shallow(bs->options); > + ret = qcow2_update_options(bs, options, s->flags, errp); > + if (ret < 0) { > + goto fail; > + }
Isn't options leaked, both in success and error cases? Kevin
