[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 12/14] block: Clean up reopen_backing_file() in bloc
From: |
Alberto Garcia |
Subject: |
[Qemu-devel] [PATCH 12/14] block: Clean up reopen_backing_file() in block/replication.c |
Date: |
Wed, 19 Sep 2018 17:47:50 +0300 |
This function is used to put the hidden and secondary disks in
read-write mode before launching the backup job, and back in read-only
mode afterwards.
This patch does the following changes:
- Use an options QDict with the "read-only" option instead of
passing the changes as flags only.
- Simplify the code (it was unnecessarily complicated and verbose).
- Fix a bug due to which the secondary disk was not being put back
in read-only mode when writable=false (because in this case
orig_secondary_flags always had the BDRV_O_RDWR flag set).
- Stop clearing the BDRV_O_INACTIVE flag.
The flags parameter to bdrv_reopen_queue() becomes redundant and we'll
be able to get rid of it in a subsequent patch.
Signed-off-by: Alberto Garcia <address@hidden>
---
block/replication.c | 42 ++++++++++++++++++------------------------
1 file changed, 18 insertions(+), 24 deletions(-)
diff --git a/block/replication.c b/block/replication.c
index 6349d6958e..1ad0ef2ef8 100644
--- a/block/replication.c
+++ b/block/replication.c
@@ -20,6 +20,7 @@
#include "block/block_backup.h"
#include "sysemu/block-backend.h"
#include "qapi/error.h"
+#include "qapi/qmp/qdict.h"
#include "replication.h"
typedef enum {
@@ -39,8 +40,8 @@ typedef struct BDRVReplicationState {
char *top_id;
ReplicationState *rs;
Error *blocker;
- int orig_hidden_flags;
- int orig_secondary_flags;
+ bool orig_hidden_read_only;
+ bool orig_secondary_read_only;
int error;
} BDRVReplicationState;
@@ -376,39 +377,32 @@ static void reopen_backing_file(BlockDriverState *bs,
bool writable,
{
BDRVReplicationState *s = bs->opaque;
BlockReopenQueue *reopen_queue = NULL;
- int orig_hidden_flags, orig_secondary_flags;
- int new_hidden_flags, new_secondary_flags;
Error *local_err = NULL;
if (writable) {
- orig_hidden_flags = s->orig_hidden_flags =
- bdrv_get_flags(s->hidden_disk->bs);
- new_hidden_flags = (orig_hidden_flags | BDRV_O_RDWR) &
- ~BDRV_O_INACTIVE;
- orig_secondary_flags = s->orig_secondary_flags =
- bdrv_get_flags(s->secondary_disk->bs);
- new_secondary_flags = (orig_secondary_flags | BDRV_O_RDWR) &
- ~BDRV_O_INACTIVE;
- } else {
- orig_hidden_flags = (s->orig_hidden_flags | BDRV_O_RDWR) &
- ~BDRV_O_INACTIVE;
- new_hidden_flags = s->orig_hidden_flags;
- orig_secondary_flags = (s->orig_secondary_flags | BDRV_O_RDWR) &
- ~BDRV_O_INACTIVE;
- new_secondary_flags = s->orig_secondary_flags;
+ s->orig_hidden_read_only =
+ !(bdrv_get_flags(s->hidden_disk->bs) & BDRV_O_RDWR);
+ s->orig_secondary_read_only =
+ !(bdrv_get_flags(s->secondary_disk->bs) & BDRV_O_RDWR);
}
bdrv_subtree_drained_begin(s->hidden_disk->bs);
bdrv_subtree_drained_begin(s->secondary_disk->bs);
- if (orig_hidden_flags != new_hidden_flags) {
- reopen_queue = bdrv_reopen_queue(reopen_queue, s->hidden_disk->bs,
NULL,
- new_hidden_flags);
+ if (s->orig_hidden_read_only) {
+ int flags = bdrv_get_flags(s->hidden_disk->bs);
+ QDict *opts = qdict_new();
+ qdict_put_bool(opts, BDRV_OPT_READ_ONLY, !writable);
+ reopen_queue = bdrv_reopen_queue(reopen_queue, s->hidden_disk->bs,
+ opts, flags);
}
- if (!(orig_secondary_flags & BDRV_O_RDWR)) {
+ if (s->orig_secondary_read_only) {
+ int flags = bdrv_get_flags(s->secondary_disk->bs);
+ QDict *opts = qdict_new();
+ qdict_put_bool(opts, BDRV_OPT_READ_ONLY, !writable);
reopen_queue = bdrv_reopen_queue(reopen_queue, s->secondary_disk->bs,
- NULL, new_secondary_flags);
+ opts, flags);
}
if (reopen_queue) {
--
2.11.0
- [Qemu-devel] [PATCH 08/14] block: Use bdrv_reopen_set_read_only() in external_snapshot_commit(), (continued)
- [Qemu-devel] [PATCH 08/14] block: Use bdrv_reopen_set_read_only() in external_snapshot_commit(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 06/14] block: Use bdrv_reopen_set_read_only() in stream_start/complete(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 05/14] block: Use bdrv_reopen_set_read_only() in bdrv_commit(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 03/14] block: Use bdrv_reopen_set_read_only() in bdrv_backing_update_filename(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 02/14] block: Add bdrv_reopen_set_read_only(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 04/14] block: Use bdrv_reopen_set_read_only() in commit_start/complete(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 11/14] qemu-io: Put flag changes in the options QDict in reopen_f(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 10/14] block: Drop bdrv_reopen(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 13/14] block: Remove flags parameter from bdrv_reopen_queue(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 14/14] block: Stop passing flags to bdrv_reopen_queue_child(), Alberto Garcia, 2018/09/19
- [Qemu-devel] [PATCH 12/14] block: Clean up reopen_backing_file() in block/replication.c,
Alberto Garcia <=