[sheepdog] [PATCH] dog: fix not to use both options -y and -z simultaneously

Teruaki Ishizaki ishizaki.teruaki at lab.ntt.co.jp
Fri Jan 23 07:49:43 CET 2015


Now, selectable block_size_shift feature don't support to use
HyperVolume simultaneously.

But, users can create a new VDI with both options, -y and -z,
with dog command.

This patch changes that users can't specify both those options
to create a new VDI.

Signed-off-by: Teruaki Ishizaki <ishizaki.teruaki at lab.ntt.co.jp>
---
 dog/vdi.c |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/dog/vdi.c b/dog/vdi.c
index dee4b92..67e2f0b 100644
--- a/dog/vdi.c
+++ b/dog/vdi.c
@@ -470,7 +470,10 @@ static int vdi_create(int argc, char **argv)
 
 	if (vdi_cmd_data.block_size_shift) {
 		object_size = (UINT32_C(1) << vdi_cmd_data.block_size_shift);
-		old_max_total_size = object_size * OLD_MAX_DATA_OBJS;
+	} else if (vdi_cmd_data.store_policy == 1) {
+		/* Force to use default block_size_shift for hyper volume */
+		vdi_cmd_data.block_size_shift = SD_DEFAULT_BLOCK_SIZE_SHIFT;
+		object_size = (UINT32_C(1) << vdi_cmd_data.block_size_shift);
 	} else {
 		struct sd_req hdr;
 		struct sd_rsp *rsp = (struct sd_rsp *)&hdr;
@@ -496,9 +499,10 @@ static int vdi_create(int argc, char **argv)
 			goto out;
 		}
 		object_size = (UINT32_C(1) << cinfo.block_size_shift);
-		old_max_total_size = object_size * OLD_MAX_DATA_OBJS;
 	}
 
+	old_max_total_size = object_size * OLD_MAX_DATA_OBJS;
+
 	if (size > old_max_total_size && 0 == vdi_cmd_data.store_policy) {
 		sd_err("VDI size is larger than %s bytes, please use '-y' to "
 		       "create a hyper volume with size up to %s bytes"
@@ -3331,6 +3335,10 @@ static int vdi_parser(int ch, const char *opt)
 		break;
 	case 'y':
 		vdi_cmd_data.store_policy = 1;
+		if (vdi_cmd_data.block_size_shift) {
+			sd_info("Don't specify both -y and -z options, please");
+			exit(EXIT_FAILURE);
+		}
 		break;
 	case 'o':
 		vdi_cmd_data.oid = strtoull(opt, &p, 16);
@@ -3353,6 +3361,10 @@ static int vdi_parser(int ch, const char *opt)
 			       " Please set shift bit larger than 20");
 			exit(EXIT_FAILURE);
 		}
+		if (vdi_cmd_data.store_policy == 1) {
+			sd_info("Don't specify both -y and -z options, please");
+			exit(EXIT_FAILURE);
+		}
 		vdi_cmd_data.block_size_shift = block_size_shift;
 		break;
 	case 'D':
-- 
1.7.1




More information about the sheepdog mailing list