|
|
ddf19c |
From ec5408763c49cd0b63ee324bdc38a429ed1adeee Mon Sep 17 00:00:00 2001
|
|
|
ddf19c |
From: Kevin Wolf <kwolf@redhat.com>
|
|
|
ddf19c |
Date: Fri, 13 Mar 2020 12:34:29 +0000
|
|
|
ddf19c |
Subject: [PATCH 09/20] block/qcow2: Move bitmap reopen into
|
|
|
ddf19c |
bdrv_reopen_commit_post
|
|
|
ddf19c |
|
|
|
ddf19c |
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
|
|
ddf19c |
Message-id: <20200313123439.10548-4-kwolf@redhat.com>
|
|
|
ddf19c |
Patchwork-id: 94280
|
|
|
ddf19c |
O-Subject: [RHEL-AV-8.2.0 qemu-kvm PATCH v2 03/13] block/qcow2: Move bitmap reopen into bdrv_reopen_commit_post
|
|
|
ddf19c |
Bugzilla: 1790482 1805143
|
|
|
ddf19c |
RH-Acked-by: John Snow <jsnow@redhat.com>
|
|
|
ddf19c |
RH-Acked-by: Daniel P. Berrange <berrange@redhat.com>
|
|
|
ddf19c |
RH-Acked-by: Peter Krempa <pkrempa@redhat.com>
|
|
|
ddf19c |
|
|
|
ddf19c |
From: Peter Krempa <pkrempa@redhat.com>
|
|
|
ddf19c |
|
|
|
ddf19c |
The bitmap code requires writing the 'file' child when the qcow2 driver
|
|
|
ddf19c |
is reopened in read-write mode.
|
|
|
ddf19c |
|
|
|
ddf19c |
If the 'file' child is being reopened due to a permissions change, the
|
|
|
ddf19c |
modification is commited yet when qcow2_reopen_commit is called. This
|
|
|
ddf19c |
means that any attempt to write the 'file' child will end with EBADFD
|
|
|
ddf19c |
as the original fd was already closed.
|
|
|
ddf19c |
|
|
|
ddf19c |
Moving bitmap reopening to the new callback which is called after
|
|
|
ddf19c |
permission modifications are commited fixes this as the file descriptor
|
|
|
ddf19c |
will be replaced with the correct one.
|
|
|
ddf19c |
|
|
|
ddf19c |
The above problem manifests itself when reopening 'qcow2' format layer
|
|
|
ddf19c |
which uses a 'file-posix' file child which was opened with the
|
|
|
ddf19c |
'auto-read-only' property set.
|
|
|
ddf19c |
|
|
|
ddf19c |
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
|
|
ddf19c |
Message-Id: <db118dbafe1955afbc0a18d3dd220931074ce349.1582893284.git.pkrempa@redhat.com>
|
|
|
ddf19c |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
ddf19c |
(cherry picked from commit 65eb7c85a3e62529e2bad782e94d5a7b11dd5a92)
|
|
|
ddf19c |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
ddf19c |
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
|
ddf19c |
---
|
|
|
ddf19c |
block/qcow2.c | 7 ++++++-
|
|
|
ddf19c |
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
|
ddf19c |
|
|
|
ddf19c |
diff --git a/block/qcow2.c b/block/qcow2.c
|
|
|
ddf19c |
index 7c18721..83b1fc0 100644
|
|
|
ddf19c |
--- a/block/qcow2.c
|
|
|
ddf19c |
+++ b/block/qcow2.c
|
|
|
ddf19c |
@@ -1881,6 +1881,11 @@ fail:
|
|
|
ddf19c |
static void qcow2_reopen_commit(BDRVReopenState *state)
|
|
|
ddf19c |
{
|
|
|
ddf19c |
qcow2_update_options_commit(state->bs, state->opaque);
|
|
|
ddf19c |
+ g_free(state->opaque);
|
|
|
ddf19c |
+}
|
|
|
ddf19c |
+
|
|
|
ddf19c |
+static void qcow2_reopen_commit_post(BDRVReopenState *state)
|
|
|
ddf19c |
+{
|
|
|
ddf19c |
if (state->flags & BDRV_O_RDWR) {
|
|
|
ddf19c |
Error *local_err = NULL;
|
|
|
ddf19c |
|
|
|
ddf19c |
@@ -1895,7 +1900,6 @@ static void qcow2_reopen_commit(BDRVReopenState *state)
|
|
|
ddf19c |
bdrv_get_node_name(state->bs));
|
|
|
ddf19c |
}
|
|
|
ddf19c |
}
|
|
|
ddf19c |
- g_free(state->opaque);
|
|
|
ddf19c |
}
|
|
|
ddf19c |
|
|
|
ddf19c |
static void qcow2_reopen_abort(BDRVReopenState *state)
|
|
|
ddf19c |
@@ -5492,6 +5496,7 @@ BlockDriver bdrv_qcow2 = {
|
|
|
ddf19c |
.bdrv_close = qcow2_close,
|
|
|
ddf19c |
.bdrv_reopen_prepare = qcow2_reopen_prepare,
|
|
|
ddf19c |
.bdrv_reopen_commit = qcow2_reopen_commit,
|
|
|
ddf19c |
+ .bdrv_reopen_commit_post = qcow2_reopen_commit_post,
|
|
|
ddf19c |
.bdrv_reopen_abort = qcow2_reopen_abort,
|
|
|
ddf19c |
.bdrv_join_options = qcow2_join_options,
|
|
|
ddf19c |
.bdrv_child_perm = bdrv_format_default_perms,
|
|
|
ddf19c |
--
|
|
|
ddf19c |
1.8.3.1
|
|
|
ddf19c |
|