The iSCSI multipath feature is implemented as an expansion of the vdi
locking. This patch introduces a type of locking. Existing ordinal
lock (used by QEMU) is typed as "normal", and new one for iSCSI
multipath is typed as "shared". This patch adds a new field type to
vdi request struct and let sheep know which type of lock is required
by client.

Signed-off-by: Hitoshi Mitake <mitake.hito...@lab.ntt.co.jp>
---
 include/sheepdog_proto.h | 4 ++++
 sheep/ops.c              | 4 +++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/include/sheepdog_proto.h b/include/sheepdog_proto.h
index d21e7a0..df0667f 100644
--- a/include/sheepdog_proto.h
+++ b/include/sheepdog_proto.h
@@ -129,6 +129,9 @@
 #define SD_REQ_SIZE 48
 #define SD_RSP_SIZE 48
 
+#define LOCK_TYPE_NORMAL 1
+#define LOCK_TYPE_SHARED 2     /* for iSCSI multipath */
+
 struct sd_req {
        uint8_t         proto_ver;
        uint8_t         opcode;
@@ -156,6 +159,7 @@ struct sd_req {
                        uint8_t         store_policy;
                        uint8_t         reserved;
                        uint32_t        snapid;
+                       uint32_t        type;
                } vdi;
 
                /* sheepdog-internal */
diff --git a/sheep/ops.c b/sheep/ops.c
index db792de..c050ed6 100644
--- a/sheep/ops.c
+++ b/sheep/ops.c
@@ -1342,7 +1342,9 @@ static int cluster_lock_vdi_main(const struct sd_req 
*req, struct sd_rsp *rsp,
                return SD_RES_SUCCESS;
        }
 
-       sd_info("node: %s is locking VDI: %"PRIx32, node_to_str(sender), vid);
+       sd_info("node: %s is locking VDI (type: %s): %"PRIx32,
+               node_to_str(sender),
+               req->vdi.type == LOCK_TYPE_NORMAL ? "normal" : "shared", vid);
 
        if (!vdi_lock(vid, &sender->nid)) {
                sd_err("locking %"PRIx32 "failed", vid);
-- 
1.8.3.2

-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to