summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Mick <dan.mick@inktank.com>2012-11-15 14:52:39 -0800
committerDan Mick <dan.mick@inktank.com>2012-11-26 21:37:47 -0800
commit08f47a42b5dcf77c40e3c1472739554452993412 (patch)
treecacf70d241dfe1fd5b95cb219dd05cf912a43828
parente452df6dadd443d135527b49784a47ad21429cc1 (diff)
downloadceph-08f47a42b5dcf77c40e3c1472739554452993412.tar.gz
rbd: --size fixes
* require --size/-s for both create *and* resize * explicitly permit create with size 0. Signed-off-by: Dan Mick <dan.mick@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r--src/rbd.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/rbd.cc b/src/rbd.cc
index bac2d3fae9c..57614a65dc8 100644
--- a/src/rbd.cc
+++ b/src/rbd.cc
@@ -1386,6 +1386,8 @@ static bool set_conf_param(const char *param, const char **var1,
return true;
}
+bool size_set;
+
int main(int argc, const char **argv)
{
librados::Rados rados;
@@ -1452,10 +1454,11 @@ int main(int argc, const char **argv)
return EXIT_FAILURE;
}
if (sizell < 0) {
- cerr << "rbd: size must be > 0" << std::endl;
+ cerr << "rbd: size must be >= 0" << std::endl;
return EXIT_FAILURE;
}
size = sizell << 20; // bytes to MB
+ size_set = true;
} else if (ceph_argparse_flag(args, i, "-l", "--long", (char*)NULL)) {
lflag = true;
} else if (ceph_argparse_withlonglong(args, i, &stripe_unit, &err, "--stripe-unit", (char*)NULL)) {
@@ -1745,6 +1748,13 @@ if (!set_conf_param(v, p1, p2, p3)) { \
}
}
+ if (opt_cmd == OPT_CREATE || opt_cmd == OPT_RESIZE) {
+ if (!size_set) {
+ cerr << "rbd: must specify --size <MB>" << std::endl;
+ return EXIT_FAILURE;
+ }
+ }
+
switch (opt_cmd) {
case OPT_LIST:
r = do_list(rbd, io_ctx, lflag);
@@ -1762,11 +1772,6 @@ if (!set_conf_param(v, p1, p2, p3)) { \
break;
case OPT_CREATE:
- if (!size) {
- cerr << "rbd: must specify size in MB to create an rbd image"
- << std::endl;
- return EXIT_FAILURE;
- }
if (order && (order < 12 || order > 25)) {
cerr << "rbd: order must be between 12 (4 KB) and 25 (32 MB)"
<< std::endl;