summaryrefslogtreecommitdiffstats
path: root/block/qed.c
diff options
context:
space:
mode:
authorHanna Reitz2022-08-03 16:44:44 +0200
committerKevin Wolf2022-09-30 18:43:44 +0200
commitec64b1ca08138b5f57d270a5756a9138f897ee5a (patch)
tree7a2d5708aed47522ae168f1fa1b15de4a42bd9fc /block/qed.c
parentgluster: stop using .bdrv_needs_filename (diff)
downloadqemu-ec64b1ca08138b5f57d270a5756a9138f897ee5a.tar.gz
qemu-ec64b1ca08138b5f57d270a5756a9138f897ee5a.tar.xz
qemu-ec64b1ca08138b5f57d270a5756a9138f897ee5a.zip
block/qcow2: Keep auto_backing_file if possible
qcow2_do_open() is used by qcow2_co_invalidate_cache(), i.e. may be run on an image that has been opened before. When reading the backing file string from the image header, compare it against the existing bs->backing_file, and update bs->auto_backing_file only if they differ. auto_backing_file should ideally contain the filename the backing BDS will actually have after opening, i.e. a post-bdrv_refresh_filename() version of what is in the image header. So for example, if the image header reports the following backing file string: json:{"driver": "qcow2", "file": { "driver": "file", "filename": "/tmp/backing.qcow2" }} Then auto_backing_file should contain simply "/tmp/backing.qcow2". Because bdrv_refresh_filename() only works on existing BDSs, though, the way how we get this auto_backing_file value is to have the format driver set it to whatever is in the image header, and when the backing BDS is opened based on that, we update it with the filename the backing BDS actually got. However, qcow2's qcow2_co_invalidate_cache() implementation breaks this because it just resets auto_backing_file to whatever is in the image file without opening a BDS based on it, so we never get auto_backing_file back to the "refreshed" version, and in the example above, it would stay "json:{...}". Then, bs->backing->bs->filename will differ from bs->auto_backing_file, making bdrv_backing_overridden(bs) return true, which will lead bdrv_refresh_filename(bs) to generate a json:{} filename for bs, even though that may not have been necessary. This is reported in the issue linked below. Therefore, skip updating auto_backing_file if nothing has changed in the image header since we last read it. Fixes: https://gitlab.com/qemu-project/qemu/-/issues/1117 Signed-off-by: Hanna Reitz <hreitz@redhat.com> Message-Id: <20220803144446.20723-2-hreitz@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block/qed.c')
0 files changed, 0 insertions, 0 deletions