qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH RFC 3/7] replication: add shared-disk and shared


From: Hailiang Zhang
Subject: Re: [Qemu-devel] [PATCH RFC 3/7] replication: add shared-disk and shared-disk-id options
Date: Mon, 5 Dec 2016 11:08:02 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1

On 2016/10/25 18:01, Changlong Xie wrote:
On 10/20/2016 09:57 PM, zhanghailiang wrote:
We use these two options to identify which disk is
shared

Signed-off-by: zhanghailiang <address@hidden>
Signed-off-by: Wen Congyang <address@hidden>
Signed-off-by: Zhang Chen <address@hidden>
---
   block/replication.c | 33 +++++++++++++++++++++++++++++++++
   1 file changed, 33 insertions(+)

diff --git a/block/replication.c b/block/replication.c
index 3bd1cf1..2a2fdb2 100644
--- a/block/replication.c
+++ b/block/replication.c
@@ -25,9 +25,12 @@
   typedef struct BDRVReplicationState {
       ReplicationMode mode;
       int replication_state;
+    bool is_shared_disk;
+    char *shared_disk_id;
       BdrvChild *active_disk;
       BdrvChild *hidden_disk;
       BdrvChild *secondary_disk;
+    BdrvChild *primary_disk;
       char *top_id;
       ReplicationState *rs;
       Error *blocker;
@@ -53,6 +56,9 @@ static void replication_stop(ReplicationState *rs, bool 
failover,

   #define REPLICATION_MODE        "mode"
   #define REPLICATION_TOP_ID      "top-id"
+#define REPLICATION_SHARED_DISK "shared-disk"
+#define REPLICATION_SHARED_DISK_ID "shared-disk-id"
+
   static QemuOptsList replication_runtime_opts = {
       .name = "replication",
       .head = QTAILQ_HEAD_INITIALIZER(replication_runtime_opts.head),
@@ -65,6 +71,14 @@ static QemuOptsList replication_runtime_opts = {
               .name = REPLICATION_TOP_ID,
               .type = QEMU_OPT_STRING,
           },
+        {
+            .name = REPLICATION_SHARED_DISK_ID,
+            .type = QEMU_OPT_STRING,
+        },
+        {
+            .name = REPLICATION_SHARED_DISK,
+            .type = QEMU_OPT_BOOL,
+        },
           { /* end of list */ }
       },
   };
@@ -85,6 +99,8 @@ static int replication_open(BlockDriverState *bs, QDict 
*options,
       QemuOpts *opts = NULL;
       const char *mode;
       const char *top_id;
+    const char *shared_disk_id;
+    BlockBackend *blk;

       ret = -EINVAL;
       opts = qemu_opts_create(&replication_runtime_opts, NULL, 0, 
&error_abort);
@@ -114,6 +130,22 @@ static int replication_open(BlockDriverState *bs, QDict 
*options,
                      "The option mode's value should be primary or secondary");
           goto fail;
       }
+    s->is_shared_disk = qemu_opt_get_bool(opts, REPLICATION_SHARED_DISK,
+                                        false);
+    if (s->is_shared_disk && (s->mode == REPLICATION_MODE_PRIMARY)) {
+        shared_disk_id = qemu_opt_get(opts, REPLICATION_SHARED_DISK_ID);
+        if (!shared_disk_id) {
+            error_setg(&local_err, "Missing shared disk blk");
+            goto fail;
+        }
+        s->shared_disk_id = g_strdup(shared_disk_id);
+        blk = blk_by_name(s->shared_disk_id);
+        if (!blk) {
+            error_setg(&local_err, "There is no %s block", s->shared_disk_id);

g_free(s->shared_disk_id);


Will fix in next version, thanks

+            goto fail;
+        }
+        s->primary_disk = blk_root(blk);
+    }

       s->rs = replication_new(bs, &replication_ops);

@@ -130,6 +162,7 @@ static void replication_close(BlockDriverState *bs)
   {
       BDRVReplicationState *s = bs->opaque;

+    g_free(s->shared_disk_id);
       if (s->replication_state == BLOCK_REPLICATION_RUNNING) {
           replication_stop(s->rs, false, NULL);
       }




.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]