block: Error out on image creation with conflicting size options
If both the create options (qemu-img create -o ...) and the size parameter were given, the size parameter was silently ignored. Instead, make specifying two sizes an error. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
0da7d13a4c
commit
f6dc1c31d3
10
block.c
10
block.c
@ -5751,12 +5751,11 @@ void bdrv_img_create(const char *filename, const char *fmt,
|
||||
return;
|
||||
}
|
||||
|
||||
/* Create parameter list */
|
||||
create_opts = qemu_opts_append(create_opts, drv->create_opts);
|
||||
create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
|
||||
|
||||
/* Create parameter list with default values */
|
||||
opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
|
||||
qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
|
||||
|
||||
/* Parse -o options */
|
||||
if (options) {
|
||||
@ -5766,6 +5765,13 @@ void bdrv_img_create(const char *filename, const char *fmt,
|
||||
}
|
||||
}
|
||||
|
||||
if (!qemu_opt_get(opts, BLOCK_OPT_SIZE)) {
|
||||
qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
|
||||
} else if (img_size != UINT64_C(-1)) {
|
||||
error_setg(errp, "The image size must be specified only once");
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (base_filename) {
|
||||
qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
|
||||
if (local_err) {
|
||||
|
@ -78,6 +78,11 @@ for s in $sizes; do
|
||||
test_qemu_img create -f $IMGFMT -o size=$s "$TEST_IMG"
|
||||
done
|
||||
|
||||
echo "== 4. Specify size twice (-o and traditional parameter) =="
|
||||
echo
|
||||
|
||||
test_qemu_img create -f $IMGFMT -o size=10M "$TEST_IMG" 20M
|
||||
|
||||
echo "== Check correct interpretation of suffixes for cluster size =="
|
||||
echo
|
||||
sizes="1024 1024b 1k 1K 1M "
|
||||
|
@ -121,6 +121,11 @@ qemu-img: TEST_DIR/t.qcow2: Parameter 'size' expects a non-negative number below
|
||||
Optional suffix k, M, G, T, P or E means kilo-, mega-, giga-, tera-, peta-
|
||||
and exabytes, respectively.
|
||||
|
||||
== 4. Specify size twice (-o and traditional parameter) ==
|
||||
|
||||
qemu-img create -f qcow2 -o size=10M TEST_DIR/t.qcow2 20M
|
||||
qemu-img: TEST_DIR/t.qcow2: The image size must be specified only once
|
||||
|
||||
== Check correct interpretation of suffixes for cluster size ==
|
||||
|
||||
qemu-img create -f qcow2 -o cluster_size=1024 TEST_DIR/t.qcow2 64M
|
||||
|
Loading…
x
Reference in New Issue
Block a user