[sheepdog] [PATCH] sheep: add operation to get cluster default setting

Teruaki Ishizaki ishizaki.teruaki at lab.ntt.co.jp
Fri Jan 9 12:12:06 CET 2015


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.teruaki at 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




More information about the sheepdog mailing list