[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