Qemu backend driver for sheepdog used a hard-coded value
'SD_DATA_OBJ_SIZE' when you created VDI with "qemu-img"
command.

Then, this patch add operation "SD_OP_GET_CLUSTER_DEFAULT"
to get a cluster default value of block_size_shift
for creating a VDI.

Signed-off-by: Teruaki Ishizaki <ishizaki.teru...@lab.ntt.co.jp>
---
 include/sheepdog_proto.h |    8 ++++++++
 sheep/ops.c              |   18 ++++++++++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/include/sheepdog_proto.h b/include/sheepdog_proto.h
index 5f6d157..9495742 100644
--- a/include/sheepdog_proto.h
+++ b/include/sheepdog_proto.h
@@ -45,6 +45,7 @@
 #define SD_OP_READ_VDIS      0x15
 #define SD_OP_FLUSH_VDI      0x16
 #define SD_OP_DEL_VDI        0x17
+#define SD_OP_GET_CLUSTER_DEFAULT   0x18
 
 /* macros in the SD_FLAG_CMD_XXX group are mutually exclusive */
 #define SD_FLAG_CMD_WRITE    0x01
@@ -249,6 +250,13 @@ struct sd_rsp {
                        uint32_t        __pad2;
                        uint8_t         digest[20];
                } hash;
+               struct {
+                       uint32_t        __pad1;
+                       uint8_t         nr_copies;
+                       uint8_t         copy_policy;
+                       uint8_t         block_size_shift;
+                       uint8_t         __pad2;
+               } cluster_default;
 
                uint32_t                __pad[8];
        };
diff --git a/sheep/ops.c b/sheep/ops.c
index 5d71dde..809854a 100644
--- a/sheep/ops.c
+++ b/sheep/ops.c
@@ -1430,6 +1430,17 @@ static int local_vdi_state_snapshot_ctl(const struct 
sd_req *req,
        return SD_RES_SUCCESS;
 }
 
+static int local_get_cluster_default(const struct sd_req *req,
+                                    struct sd_rsp *rsp,
+                                    void *data, const struct sd_node *sender)
+{
+       rsp->cluster_default.nr_copies = sys->cinfo.nr_copies;
+       rsp->cluster_default.copy_policy = sys->cinfo.copy_policy;
+       rsp->cluster_default.block_size_shift = sys->cinfo.block_size_shift;
+
+       return SD_RES_SUCCESS;
+}
+
 static int cluster_inode_coherence(const struct sd_req *req,
                                   struct sd_rsp *rsp, void *data,
                                   const struct sd_node *sender)
@@ -1852,6 +1863,13 @@ static struct sd_op_template sd_ops[] = {
                .process_main = local_vdi_state_snapshot_ctl,
        },
 
+       [SD_OP_GET_CLUSTER_DEFAULT] = {
+               .name = "GET_CLUSTER_DEFAULT",
+               .type = SD_OP_TYPE_LOCAL,
+               .force = true,
+               .process_main = local_get_cluster_default,
+       },
+
        /* gateway I/O operations */
        [SD_OP_CREATE_AND_WRITE_OBJ] = {
                .name = "CREATE_AND_WRITE_OBJ",
-- 
1.7.1

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

Reply via email to