]> git.proxmox.com Git - pve-qemu-kvm.git/blame - debian/patches/pve/0053-vma-use-BlockBackend-on-extract.patch
bump version to 2.6.2-2
[pve-qemu-kvm.git] / debian / patches / pve / 0053-vma-use-BlockBackend-on-extract.patch
CommitLineData
6fb04df7 1From 817ed44ab0ada0b1fcfcc27763b6e2db546687d6 Mon Sep 17 00:00:00 2001
b07d35a5
TL
2From: Thomas Lamprecht <t.lamprecht@proxmox.com>
3Date: Fri, 1 Jul 2016 15:47:29 +0200
6fb04df7 4Subject: [PATCH 53/55] vma: use BlockBackend on extract
b07d35a5
TL
5
6As we else rely on bdrv_close_all() do clean up, which was rewritten
7in ca9bd24cf1d53775169ba9adc17e265554d1afed and fails on "dangling"
8BDS pointers, such a pointer exists with *bs.
9Use the BlockBackend to get our BDS and just unref the BlockBackend
10when done, it handles the rest for us.
11
12The other two calls to bdrv_close_all() happen in verify_content()
13and dump_config(), both do not have a BDS so no need to change here.
14---
15 vma.c | 13 ++++++++++---
16 1 file changed, 10 insertions(+), 3 deletions(-)
17
18diff --git a/vma.c b/vma.c
19index c1407d3..0716a45 100644
20--- a/vma.c
21+++ b/vma.c
22@@ -19,6 +19,7 @@
23 #include "qemu/error-report.h"
24 #include "qemu/main-loop.h"
25 #include "sysemu/char.h" /* qstring_from_str */
26+#include "sysemu/block-backend.h"
27
28 static void help(void)
29 {
30@@ -263,6 +264,8 @@ static int extract_content(int argc, char **argv)
31 int vmstate_fd = -1;
32 guint8 vmstate_stream = 0;
33
34+ BlockBackend *blk = NULL;
35+
36 for (i = 1; i < 255; i++) {
37 VmaDeviceInfo *di = vma_reader_get_device_info(vmar, i);
38 if (di && (strcmp(di->devname, "vmstate") == 0)) {
39@@ -307,8 +310,6 @@ static int extract_content(int argc, char **argv)
40 write_zero = false;
41 }
42
43- BlockDriverState *bs = bdrv_new();
44-
45 size_t devlen = strlen(devfn);
46 QDict *options = NULL;
47 if (format) {
48@@ -326,10 +327,14 @@ static int extract_content(int argc, char **argv)
49 qdict_put(options, "driver", qstring_from_str("raw"));
50 }
51
52- if (errp || bdrv_open(&bs, devfn, NULL, options, flags, &errp)) {
53+
54+ if (errp || !(blk = blk_new_open(devfn, NULL, options, flags, &errp))) {
55 g_error("can't open file %s - %s", devfn,
56 error_get_pretty(errp));
57 }
58+
59+ BlockDriverState *bs = blk_bs(blk);
60+
61 if (vma_reader_register_bs(vmar, i, bs, write_zero, &errp) < 0) {
62 g_error("%s", error_get_pretty(errp));
63 }
64@@ -362,6 +367,8 @@ static int extract_content(int argc, char **argv)
65
66 vma_reader_destroy(vmar);
67
68+ blk_unref(blk);
69+
70 bdrv_close_all();
71
72 return ret;
73--
742.1.4
75