Bug 1425125

Summary: qemu fails to recognize gluster URIs in backing chain for block-commit operation
Product: Red Hat Enterprise Linux 7 Reporter: Jaroslav Reznik <jreznik>
Component: qemu-kvm-rhevAssignee: Jeff Cody <jcody>
Status: CLOSED ERRATA QA Contact: Qianqian Zhu <qizhu>
Severity: medium Docs Contact:
Priority: high    
Version: 7.3CC: bmcclain, chayang, dyuan, hhan, jcody, juzhang, knoel, michen, mtessun, ngu, nsoffer, pkrempa, qizhu, rbalakri, sabose, snagar, virt-maint, xuzhang
Target Milestone: rcKeywords: Reopened, ZStream
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: qemu-kvm-rhev-2.6.0-28.el7_3.7 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: 1397870 Environment:
Last Closed: 2017-04-18 06:07:12 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1397870    
Bug Blocks: 1411323    

Description Jaroslav Reznik 2017-02-20 15:52:29 UTC
This bug has been copied from bug #1397870 and has been proposed
to be backported to 7.3 z-stream (EUS).

Comment 4 Miroslav Rezanina 2017-03-15 09:34:47 UTC
Fix included in qemu-kvm-rhev-2.6.0-28.el7_3.7

Comment 6 Qianqian Zhu 2017-03-22 06:42:11 UTC
According to https://bugzilla.redhat.com/show_bug.cgi?id=1397870#c34 and https://bugzilla.redhat.com/show_bug.cgi?id=1397870#c35,
Commit 9a93d47ddba5f86d36cbdf884d86e2fa6f5542ae has fixed this issue.
Checked on qemu-kvm-rhev-2.6.0-28.el7_3.7:

# cat kvm-block-check-full-backing-filename-when-searching-pro.patch 
From 33122cde2f27e8a6ff8c3e791152c62948dd24dd Mon Sep 17 00:00:00 2001
From: Jeffrey Cody <jcody>
Date: Tue, 21 Feb 2017 16:29:56 +0100
Subject: [PATCH 1/4] block: check full backing filename when searching
 protocol filenames

RH-Author: Jeffrey Cody <jcody>
Message-id: <9cfa02a61bc34480a6f58532ed92eb851db91eeb.1487694132.git.jcody>
Patchwork-id: 73958
O-Subject: [RHEV-7.3.z qemu-kvm-rhev 1/3] block: check full backing filename when searching protocol filenames
Bugzilla: 1425125
RH-Acked-by: John Snow <jsnow>
RH-Acked-by: Laurent Vivier <lvivier>
RH-Acked-by: Stefan Hajnoczi <stefanha>

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 <jcody>
Message-id: c2d025adca8a2b665189e6f4cf080f44126d0b6b.1485392617.git.jcody
Reviewed-by: Max Reitz <mreitz>
Signed-off-by: Max Reitz <mreitz>
(cherry picked from commit 418661e0324c1c419552cf24bd4447292e884bdd)
Signed-off-by: Miroslav Rezanina <mrezanin>
---
 block.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/block.c b/block.c
index 75afea5..de52900 100644
--- a/block.c
+++ b/block.c
@@ -3126,6 +3126,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;
@@ -3146,6 +3147,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 */
-- 
1.8.3.1

So move this bz to verified.

Comment 8 errata-xmlrpc 2017-04-18 06:07:12 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHSA-2017:0985