* [Qemu-devel] [PATCH 1/1] qemu-img.c: Clean up handling of image size in img_create()
@ 2010-12-07 17:39 Jes.Sorensen
2010-12-07 20:36 ` Stefan Hajnoczi
0 siblings, 1 reply; 5+ messages in thread
From: Jes.Sorensen @ 2010-12-07 17:39 UTC (permalink / raw)
To: kwolf; +Cc: qemu-devel
From: Jes Sorensen <Jes.Sorensen@redhat.com>
This cleans up the handling of image size in img_create() by parsing
the value early, and then only setting it once if a value has been
added as the last argument to the command line.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
qemu-img.c | 19 +++++++++++--------
1 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index d146d8c..eaec725 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -282,6 +282,7 @@ static int add_old_style_options(const char *fmt, QEMUOptionParameter *list,
static int img_create(int argc, char **argv)
{
int c, ret = 0;
+ uint64_t img_size = 0;
const char *fmt = "raw";
const char *base_fmt = NULL;
const char *filename;
@@ -329,6 +330,11 @@ static int img_create(int argc, char **argv)
}
filename = argv[optind++];
+ /* Get image size, if specified */
+ if (optind < argc) {
+ img_size = strtosz(argv[optind++], NULL);
+ }
+
if (options && !strcmp(options, "?")) {
ret = print_block_option_help(filename, fmt);
goto out;
@@ -356,7 +362,6 @@ static int img_create(int argc, char **argv)
/* Create parameter list with default values */
param = parse_option_parameters("", create_options, param);
- set_option_parameter_int(param, BLOCK_OPT_SIZE, -1);
/* Parse -o options */
if (options) {
@@ -368,21 +373,19 @@ static int img_create(int argc, char **argv)
}
}
- /* Add size to parameters */
- if (optind < argc) {
- set_option_parameter(param, BLOCK_OPT_SIZE, argv[optind++]);
- }
-
/* Add old-style options to parameters */
ret = add_old_style_options(fmt, param, base_filename, base_fmt);
if (ret < 0) {
goto out;
}
+ if (img_size) {
+ set_option_parameter_int(param, BLOCK_OPT_SIZE, img_size);
+ }
+
// The size for the image must always be specified, with one exception:
// If we are using a backing file, we can obtain the size from there
- if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == -1) {
-
+ if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == 0) {
QEMUOptionParameter *backing_file =
get_option_parameter(param, BLOCK_OPT_BACKING_FILE);
QEMUOptionParameter *backing_fmt =
--
1.7.3.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 1/1] qemu-img.c: Clean up handling of image size in img_create()
2010-12-07 17:39 [Qemu-devel] [PATCH 1/1] qemu-img.c: Clean up handling of image size in img_create() Jes.Sorensen
@ 2010-12-07 20:36 ` Stefan Hajnoczi
2010-12-08 6:30 ` Jes Sorensen
2010-12-08 8:54 ` Kevin Wolf
0 siblings, 2 replies; 5+ messages in thread
From: Stefan Hajnoczi @ 2010-12-07 20:36 UTC (permalink / raw)
To: Jes.Sorensen; +Cc: kwolf, qemu-devel
On Tue, Dec 7, 2010 at 5:39 PM, <Jes.Sorensen@redhat.com> wrote:
> // The size for the image must always be specified, with one exception:
> // If we are using a backing file, we can obtain the size from there
> - if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == -1) {
> -
> + if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == 0) {
> QEMUOptionParameter *backing_file =
> get_option_parameter(param, BLOCK_OPT_BACKING_FILE);
> QEMUOptionParameter *backing_fmt =
Today it is possible to create 0 byte sized images. Your patch will
change that:
If there is a backing file, then the size will be taken from the backing file.
If there is no backing file, then an error about missing size will be
printed, even though a size of 0 has been given.
I don't think 0 sized images are very useful, but I'm not sure we
should make this change.
Stefan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 1/1] qemu-img.c: Clean up handling of image size in img_create()
2010-12-07 20:36 ` Stefan Hajnoczi
@ 2010-12-08 6:30 ` Jes Sorensen
2010-12-08 8:54 ` Kevin Wolf
1 sibling, 0 replies; 5+ messages in thread
From: Jes Sorensen @ 2010-12-08 6:30 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: kwolf, qemu-devel
On 12/07/10 21:36, Stefan Hajnoczi wrote:
> On Tue, Dec 7, 2010 at 5:39 PM, <Jes.Sorensen@redhat.com> wrote:
>> // The size for the image must always be specified, with one exception:
>> // If we are using a backing file, we can obtain the size from there
>> - if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == -1) {
>> -
>> + if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == 0) {
>> QEMUOptionParameter *backing_file =
>> get_option_parameter(param, BLOCK_OPT_BACKING_FILE);
>> QEMUOptionParameter *backing_fmt =
>
> Today it is possible to create 0 byte sized images. Your patch will
> change that:
> If there is a backing file, then the size will be taken from the backing file.
> If there is no backing file, then an error about missing size will be
> printed, even though a size of 0 has been given.
>
> I don't think 0 sized images are very useful, but I'm not sure we
> should make this change.
The old code also fails if there is no size, except for when a backing
file is present.
I hadn't thought of the zero sized file, but on the other hand, I don't
see it being useful.
I would like to make this change to get the option handling cleaned up
as it allows me to refactor the code in img_create().
Cheers,
Jes
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 1/1] qemu-img.c: Clean up handling of image size in img_create()
2010-12-07 20:36 ` Stefan Hajnoczi
2010-12-08 6:30 ` Jes Sorensen
@ 2010-12-08 8:54 ` Kevin Wolf
2010-12-08 9:14 ` Jes Sorensen
1 sibling, 1 reply; 5+ messages in thread
From: Kevin Wolf @ 2010-12-08 8:54 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: Jes.Sorensen, qemu-devel
Am 07.12.2010 21:36, schrieb Stefan Hajnoczi:
> On Tue, Dec 7, 2010 at 5:39 PM, <Jes.Sorensen@redhat.com> wrote:
>> // The size for the image must always be specified, with one exception:
>> // If we are using a backing file, we can obtain the size from there
>> - if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == -1) {
>> -
>> + if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == 0) {
>> QEMUOptionParameter *backing_file =
>> get_option_parameter(param, BLOCK_OPT_BACKING_FILE);
>> QEMUOptionParameter *backing_fmt =
>
> Today it is possible to create 0 byte sized images. Your patch will
> change that:
> If there is a backing file, then the size will be taken from the backing file.
> If there is no backing file, then an error about missing size will be
> printed, even though a size of 0 has been given.
I can think of one use case for it: You can store the VM state on a
zero-sized qcow2 image for internal snapshots.
Otherwise it's probably rather useless, but we have supported it for a
long time, so I wouldn't remove it. People have actually noticed in the
past when something was broken with it.
Kevin
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 1/1] qemu-img.c: Clean up handling of image size in img_create()
2010-12-08 8:54 ` Kevin Wolf
@ 2010-12-08 9:14 ` Jes Sorensen
0 siblings, 0 replies; 5+ messages in thread
From: Jes Sorensen @ 2010-12-08 9:14 UTC (permalink / raw)
To: Kevin Wolf; +Cc: Stefan Hajnoczi, qemu-devel
On 12/08/10 09:54, Kevin Wolf wrote:
> Am 07.12.2010 21:36, schrieb Stefan Hajnoczi:
>> Today it is possible to create 0 byte sized images. Your patch will
>> change that:
>> If there is a backing file, then the size will be taken from the backing file.
>> If there is no backing file, then an error about missing size will be
>> printed, even though a size of 0 has been given.
>
> I can think of one use case for it: You can store the VM state on a
> zero-sized qcow2 image for internal snapshots.
>
> Otherwise it's probably rather useless, but we have supported it for a
> long time, so I wouldn't remove it. People have actually noticed in the
> past when something was broken with it.
Ok that is fair, I have just posted an updated version which should do
the right thing. Shows up it made the patch even simpler :)
Cheers,
Jes
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-12-08 9:14 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-07 17:39 [Qemu-devel] [PATCH 1/1] qemu-img.c: Clean up handling of image size in img_create() Jes.Sorensen
2010-12-07 20:36 ` Stefan Hajnoczi
2010-12-08 6:30 ` Jes Sorensen
2010-12-08 8:54 ` Kevin Wolf
2010-12-08 9:14 ` Jes Sorensen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).