[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL 07/21] block: check full backing filename when search
From: |
Max Reitz |
Subject: |
[Qemu-block] [PULL 07/21] block: check full backing filename when searching protocol filenames |
Date: |
Sun, 12 Feb 2017 02:36:50 +0100 |
From: Jeff Cody <address@hidden>
In bdrv_find_backing_image(), if we are searching an image for a backing
file that contains a protocol, we currently only compare unmodified
paths.
However, some management software will change the backing filename to be
a relative filename in a path. QEMU is able to handle this fine,
because internally it will use path_combine to put together the full
protocol URI.
However, this can lead to an inability to match an image during a QAPI
command that needs to use bdrv_find_backing_image() to find the image,
when it is searched by the full URI.
When searching for a protocol filename, if the straight comparison
fails, this patch will also compare against the full backing filename to
see if that is a match.
Signed-off-by: Jeff Cody <address@hidden>
Message-id: address@hidden
Reviewed-by: Max Reitz <address@hidden>
Signed-off-by: Max Reitz <address@hidden>
---
block.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/block.c b/block.c
index 1dbc060c3f..b8bc2a1c68 100644
--- a/block.c
+++ b/block.c
@@ -3145,6 +3145,7 @@ BlockDriverState
*bdrv_find_backing_image(BlockDriverState *bs,
int is_protocol = 0;
BlockDriverState *curr_bs = NULL;
BlockDriverState *retval = NULL;
+ Error *local_error = NULL;
if (!bs || !bs->drv || !backing_file) {
return NULL;
@@ -3165,6 +3166,18 @@ BlockDriverState
*bdrv_find_backing_image(BlockDriverState *bs,
retval = curr_bs->backing->bs;
break;
}
+ /* Also check against the full backing filename for the image */
+ bdrv_get_full_backing_filename(curr_bs, backing_file_full,
PATH_MAX,
+ &local_error);
+ if (local_error == NULL) {
+ if (strcmp(backing_file, backing_file_full) == 0) {
+ retval = curr_bs->backing->bs;
+ break;
+ }
+ } else {
+ error_free(local_error);
+ local_error = NULL;
+ }
} else {
/* If not an absolute filename path, make it relative to the
current
* image's filename path */
--
2.11.0
- [Qemu-block] [PULL 00/21] Block patches, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 01/21] iotests: Fix a problem in common.filter, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 02/21] qemu-img: Improve commit invalid base message, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 03/21] qapi: Tweak error message of bdrv_query_image_info, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 04/21] iotests: Fix reference output for 059, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 05/21] iotests: record separate timings per format, protocol pair, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 06/21] block/vmdk: Fix the endian problem of buf_len and lba, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 07/21] block: check full backing filename when searching protocol filenames,
Max Reitz <=
- [Qemu-block] [PULL 08/21] qemu-iotests: Don't create fifos / pidfiles with protocol paths, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 09/21] qemu-iotest: test to lookup protocol-based image with relative backing, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 11/21] block/qapi: reduce the execution time of qmp_query_blockstats, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 10/21] block/qapi: reduce the coupling between the bdrv_query_stats and bdrv_query_bds_stats, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 12/21] block: bdrv_invalidate_cache: invalidate children first, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 13/21] block/nfs: fix NULL pointer dereference in URI parsing, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 14/21] block/nfs: fix naming of runtime opts, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 16/21] qemu-iotests: Add _unsupported_fmt helper, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 15/21] qemu-io: Return non-zero exit code on failure, Max Reitz, 2017/02/11
- [Qemu-block] [PULL 17/21] qemu-io: Add failure regression tests, Max Reitz, 2017/02/11