76daa3
From f30511e056647e04317d67b43b49c95b68170ec2 Mon Sep 17 00:00:00 2001
76daa3
From: Jeffrey Cody <jcody@redhat.com>
76daa3
Date: Thu, 15 Jun 2017 15:50:28 +0200
76daa3
Subject: [PATCH 3/8] block/rbd: enable filename option and parsing
76daa3
76daa3
RH-Author: Jeffrey Cody <jcody@redhat.com>
76daa3
Message-id: <679a297faf8ee6b90984f52587a7ccf02c862436.1497541513.git.jcody@redhat.com>
76daa3
Patchwork-id: 75617
76daa3
O-Subject: [RHEV-7.4 qemu-kvm-rhev PATCH 1/2] block/rbd: enable filename option and parsing
76daa3
Bugzilla: 1457088
76daa3
RH-Acked-by: Juan Quintela <quintela@redhat.com>
76daa3
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
76daa3
RH-Acked-by: Max Reitz <mreitz@redhat.com>
76daa3
RH-Acked-by: Richard Jones <rjones@redhat.com>
76daa3
76daa3
When enabling option parsing and blockdev-add for rbd, we removed the
76daa3
'filename' option.  Unfortunately, this was a bit optimistic, as
76daa3
previous versions of QEMU allowed the use of the option in backing
76daa3
filenames via json.  This means that without parsing this option, we
76daa3
cannot open existing images that used to work fine.
76daa3
76daa3
See bug: https://bugzilla.redhat.com/show_bug.cgi?id=1457088
76daa3
76daa3
Tested-by: Richard W.M. Jones <rjones@redhat.com>
76daa3
Signed-off-by: Jeff Cody <jcody@redhat.com>
76daa3
Message-id: 937dc9fde348d13311eb8e23444df3bc3190b612.1497444637.git.jcody@redhat.com
76daa3
Signed-off-by: Jeff Cody <jcody@redhat.com>
76daa3
(cherry picked from commit 91589d9e5ca658abcc915b078aaa66531a112348)
76daa3
Signed-off-by: Jeff Cody <jcody@redhat.com>
76daa3
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
76daa3
---
76daa3
 block/rbd.c | 22 +++++++++++++++++++++-
76daa3
 1 file changed, 21 insertions(+), 1 deletion(-)
76daa3
76daa3
diff --git a/block/rbd.c b/block/rbd.c
76daa3
index 6471f4f..ce45b65 100644
76daa3
--- a/block/rbd.c
76daa3
+++ b/block/rbd.c
76daa3
@@ -340,6 +340,10 @@ static QemuOptsList runtime_opts = {
76daa3
             .type = QEMU_OPT_STRING,
76daa3
             .help = "Legacy rados key/value option parameters",
76daa3
         },
76daa3
+        {
76daa3
+            .name = "filename",
76daa3
+            .type = QEMU_OPT_STRING,
76daa3
+        },
76daa3
         { /* end of list */ }
76daa3
     },
76daa3
 };
76daa3
@@ -541,12 +545,27 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
76daa3
 {
76daa3
     BDRVRBDState *s = bs->opaque;
76daa3
     const char *pool, *snap, *conf, *user, *image_name, *keypairs;
76daa3
-    const char *secretid;
76daa3
+    const char *secretid, *filename;
76daa3
     QemuOpts *opts;
76daa3
     Error *local_err = NULL;
76daa3
     char *mon_host = NULL;
76daa3
     int r;
76daa3
 
76daa3
+    /* If we are given a filename, parse the filename, with precedence given to
76daa3
+     * filename encoded options */
76daa3
+    filename = qdict_get_try_str(options, "filename");
76daa3
+    if (filename) {
76daa3
+        error_report("Warning: 'filename' option specified. "
76daa3
+                      "This is an unsupported option, and may be deprecated "
76daa3
+                      "in the future");
76daa3
+        qemu_rbd_parse_filename(filename, options, &local_err);
76daa3
+        if (local_err) {
76daa3
+            r = -EINVAL;
76daa3
+            error_propagate(errp, local_err);
76daa3
+            goto exit;
76daa3
+        }
76daa3
+    }
76daa3
+
76daa3
     opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
76daa3
     qemu_opts_absorb_qdict(opts, options, &local_err);
76daa3
     if (local_err) {
76daa3
@@ -665,6 +684,7 @@ failed_shutdown:
76daa3
 failed_opts:
76daa3
     qemu_opts_del(opts);
76daa3
     g_free(mon_host);
76daa3
+exit:
76daa3
     return r;
76daa3
 }
76daa3
 
76daa3
-- 
76daa3
1.8.3.1
76daa3