qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] qemu-img: Fix division by zero for zero size images
@ 2012-10-12 12:31 Kevin Wolf
  2012-10-12 12:31 ` [Qemu-devel] [PATCH 1/2] " Kevin Wolf
  2012-10-12 12:31 ` [Qemu-devel] [PATCH 2/2] qemu-iotests: Test qemu-img operation on zero size image Kevin Wolf
  0 siblings, 2 replies; 7+ messages in thread
From: Kevin Wolf @ 2012-10-12 12:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf

Kevin Wolf (2):
  qemu-img: Fix division by zero for zero size images
  qemu-iotests: Test qemu-img operation on zero size image

 qemu-img.c                 |   23 ++++++++----
 tests/qemu-iotests/041     |   78 ++++++++++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/041.out |   15 ++++++++
 tests/qemu-iotests/group   |    1 +
 4 files changed, 109 insertions(+), 8 deletions(-)
 create mode 100755 tests/qemu-iotests/041
 create mode 100644 tests/qemu-iotests/041.out

-- 
1.7.6.5

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PATCH 1/2] qemu-img: Fix division by zero for zero size images
  2012-10-12 12:31 [Qemu-devel] [PATCH 0/2] qemu-img: Fix division by zero for zero size images Kevin Wolf
@ 2012-10-12 12:31 ` Kevin Wolf
  2012-10-12 16:56   ` Paolo Bonzini
  2012-10-12 12:31 ` [Qemu-devel] [PATCH 2/2] qemu-iotests: Test qemu-img operation on zero size image Kevin Wolf
  1 sibling, 1 reply; 7+ messages in thread
From: Kevin Wolf @ 2012-10-12 12:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 qemu-img.c |   23 +++++++++++++++--------
 1 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/qemu-img.c b/qemu-img.c
index f17f187..849eb41 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -674,7 +674,7 @@ static int img_convert(int argc, char **argv)
     QEMUOptionParameter *out_baseimg_param;
     char *options = NULL;
     const char *snapshot_name = NULL;
-    float local_progress;
+    float local_progress = 0;
     int min_sparse = 8; /* Need at least 4k of zeros for sparse detection */
 
     fmt = NULL;
@@ -914,8 +914,10 @@ static int img_convert(int argc, char **argv)
         sector_num = 0;
 
         nb_sectors = total_sectors;
-        local_progress = (float)100 /
-            (nb_sectors / MIN(nb_sectors, cluster_sectors));
+        if (nb_sectors != 0) {
+            local_progress = (float)100 /
+                (nb_sectors / MIN(nb_sectors, cluster_sectors));
+        }
 
         for(;;) {
             int64_t bs_num;
@@ -986,8 +988,10 @@ static int img_convert(int argc, char **argv)
 
         sector_num = 0; // total number of sectors converted so far
         nb_sectors = total_sectors - sector_num;
-        local_progress = (float)100 /
-            (nb_sectors / MIN(nb_sectors, IO_BUF_SIZE / 512));
+        if (nb_sectors != 0) {
+            local_progress = (float)100 /
+                (nb_sectors / MIN(nb_sectors, IO_BUF_SIZE / 512));
+        }
 
         for(;;) {
             nb_sectors = total_sectors - sector_num;
@@ -1585,7 +1589,7 @@ static int img_rebase(int argc, char **argv)
         int n;
         uint8_t * buf_old;
         uint8_t * buf_new;
-        float local_progress;
+        float local_progress = 0;
 
         buf_old = qemu_blockalign(bs, IO_BUF_SIZE);
         buf_new = qemu_blockalign(bs, IO_BUF_SIZE);
@@ -1594,8 +1598,11 @@ static int img_rebase(int argc, char **argv)
         bdrv_get_geometry(bs_old_backing, &old_backing_num_sectors);
         bdrv_get_geometry(bs_new_backing, &new_backing_num_sectors);
 
-        local_progress = (float)100 /
-            (num_sectors / MIN(num_sectors, IO_BUF_SIZE / 512));
+        if (num_sectors != 0) {
+            local_progress = (float)100 /
+                (num_sectors / MIN(num_sectors, IO_BUF_SIZE / 512));
+        }
+
         for (sector = 0; sector < num_sectors; sector += n) {
 
             /* How many sectors can we handle with the next read? */
-- 
1.7.6.5

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PATCH 2/2] qemu-iotests: Test qemu-img operation on zero size image
  2012-10-12 12:31 [Qemu-devel] [PATCH 0/2] qemu-img: Fix division by zero for zero size images Kevin Wolf
  2012-10-12 12:31 ` [Qemu-devel] [PATCH 1/2] " Kevin Wolf
@ 2012-10-12 12:31 ` Kevin Wolf
  2012-10-12 16:57   ` Paolo Bonzini
  1 sibling, 1 reply; 7+ messages in thread
From: Kevin Wolf @ 2012-10-12 12:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 tests/qemu-iotests/041     |   78 ++++++++++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/041.out |   15 ++++++++
 tests/qemu-iotests/group   |    1 +
 3 files changed, 94 insertions(+), 0 deletions(-)
 create mode 100755 tests/qemu-iotests/041
 create mode 100644 tests/qemu-iotests/041.out

diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041
new file mode 100755
index 0000000..c3c3ca8
--- /dev/null
+++ b/tests/qemu-iotests/041
@@ -0,0 +1,78 @@
+#!/bin/bash
+#
+# Test qemu-img operation on zero size images
+#
+# Copyright (C) 2012 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# creator
+owner=kwolf@redhat.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1	# failure is the default!
+
+_cleanup()
+{
+	_cleanup_test_img
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_supported_fmt qcow2 qcow qed vmdk
+_supported_proto file
+_supported_os Linux
+
+echo
+echo "== Creating zero size image =="
+
+_make_test_img 0
+_check_test_img
+
+mv $TEST_IMG $TEST_IMG.orig
+
+echo
+echo "== Converting the image =="
+
+$QEMU_IMG convert -O $IMGFMT $TEST_IMG.orig $TEST_IMG
+_check_test_img
+
+echo
+echo "== Converting the image, compressed =="
+
+if [ "$IMGFMT" == "qcow2" ]; then
+    $QEMU_IMG convert -c -O $IMGFMT $TEST_IMG.orig $TEST_IMG
+fi
+_check_test_img
+
+echo
+echo "== Rebasing the image =="
+
+$QEMU_IMG rebase -u -b $TEST_IMG.orig $TEST_IMG
+$QEMU_IMG rebase -b $TEST_IMG.orig $TEST_IMG
+_check_test_img
+
+# success, all done
+echo "*** done"
+rm -f $seq.full
+status=0
+
diff --git a/tests/qemu-iotests/041.out b/tests/qemu-iotests/041.out
new file mode 100644
index 0000000..98514fa
--- /dev/null
+++ b/tests/qemu-iotests/041.out
@@ -0,0 +1,15 @@
+QA output created by 041
+
+== Creating zero size image ==
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0 
+No errors were found on the image.
+
+== Converting the image ==
+No errors were found on the image.
+
+== Converting the image, compressed ==
+No errors were found on the image.
+
+== Rebasing the image ==
+No errors were found on the image.
+*** done
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 66d2ba9..fa4a7da 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -47,3 +47,4 @@
 038 rw auto backing
 039 rw auto
 040 rw auto
+041 rw auto quick
-- 
1.7.6.5

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] qemu-img: Fix division by zero for zero size images
  2012-10-12 12:31 ` [Qemu-devel] [PATCH 1/2] " Kevin Wolf
@ 2012-10-12 16:56   ` Paolo Bonzini
  0 siblings, 0 replies; 7+ messages in thread
From: Paolo Bonzini @ 2012-10-12 16:56 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: qemu-devel

Il 12/10/2012 14:31, Kevin Wolf ha scritto:
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  qemu-img.c |   23 +++++++++++++++--------
>  1 files changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/qemu-img.c b/qemu-img.c
> index f17f187..849eb41 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -674,7 +674,7 @@ static int img_convert(int argc, char **argv)
>      QEMUOptionParameter *out_baseimg_param;
>      char *options = NULL;
>      const char *snapshot_name = NULL;
> -    float local_progress;
> +    float local_progress = 0;
>      int min_sparse = 8; /* Need at least 4k of zeros for sparse detection */
>  
>      fmt = NULL;
> @@ -914,8 +914,10 @@ static int img_convert(int argc, char **argv)
>          sector_num = 0;
>  
>          nb_sectors = total_sectors;
> -        local_progress = (float)100 /
> -            (nb_sectors / MIN(nb_sectors, cluster_sectors));
> +        if (nb_sectors != 0) {
> +            local_progress = (float)100 /
> +                (nb_sectors / MIN(nb_sectors, cluster_sectors));
> +        }
>  
>          for(;;) {
>              int64_t bs_num;
> @@ -986,8 +988,10 @@ static int img_convert(int argc, char **argv)
>  
>          sector_num = 0; // total number of sectors converted so far
>          nb_sectors = total_sectors - sector_num;
> -        local_progress = (float)100 /
> -            (nb_sectors / MIN(nb_sectors, IO_BUF_SIZE / 512));
> +        if (nb_sectors != 0) {
> +            local_progress = (float)100 /
> +                (nb_sectors / MIN(nb_sectors, IO_BUF_SIZE / 512));
> +        }
>  
>          for(;;) {
>              nb_sectors = total_sectors - sector_num;
> @@ -1585,7 +1589,7 @@ static int img_rebase(int argc, char **argv)
>          int n;
>          uint8_t * buf_old;
>          uint8_t * buf_new;
> -        float local_progress;
> +        float local_progress = 0;
>  
>          buf_old = qemu_blockalign(bs, IO_BUF_SIZE);
>          buf_new = qemu_blockalign(bs, IO_BUF_SIZE);
> @@ -1594,8 +1598,11 @@ static int img_rebase(int argc, char **argv)
>          bdrv_get_geometry(bs_old_backing, &old_backing_num_sectors);
>          bdrv_get_geometry(bs_new_backing, &new_backing_num_sectors);
>  
> -        local_progress = (float)100 /
> -            (num_sectors / MIN(num_sectors, IO_BUF_SIZE / 512));
> +        if (num_sectors != 0) {
> +            local_progress = (float)100 /
> +                (num_sectors / MIN(num_sectors, IO_BUF_SIZE / 512));
> +        }
> +
>          for (sector = 0; sector < num_sectors; sector += n) {
>  
>              /* How many sectors can we handle with the next read? */
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

/me keeps this in mind for reviewing Mirek's qemu-img compare series

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] qemu-iotests: Test qemu-img operation on zero size image
  2012-10-12 12:31 ` [Qemu-devel] [PATCH 2/2] qemu-iotests: Test qemu-img operation on zero size image Kevin Wolf
@ 2012-10-12 16:57   ` Paolo Bonzini
  2012-10-15  8:47     ` Kevin Wolf
  0 siblings, 1 reply; 7+ messages in thread
From: Paolo Bonzini @ 2012-10-12 16:57 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: qemu-devel

Il 12/10/2012 14:31, Kevin Wolf ha scritto:
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  tests/qemu-iotests/041     |   78 ++++++++++++++++++++++++++++++++++++++++++++
>  tests/qemu-iotests/041.out |   15 ++++++++
>  tests/qemu-iotests/group   |    1 +
>  3 files changed, 94 insertions(+), 0 deletions(-)
>  create mode 100755 tests/qemu-iotests/041
>  create mode 100644 tests/qemu-iotests/041.out
> 
> diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041
> new file mode 100755
> index 0000000..c3c3ca8
> --- /dev/null
> +++ b/tests/qemu-iotests/041
> @@ -0,0 +1,78 @@
> +#!/bin/bash
> +#
> +# Test qemu-img operation on zero size images
> +#
> +# Copyright (C) 2012 Red Hat, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 2 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +#
> +
> +# creator
> +owner=kwolf@redhat.com
> +
> +seq=`basename $0`
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1	# failure is the default!
> +
> +_cleanup()
> +{
> +	_cleanup_test_img
> +}
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +# get standard environment, filters and checks
> +. ./common.rc
> +. ./common.filter
> +
> +_supported_fmt qcow2 qcow qed vmdk
> +_supported_proto file
> +_supported_os Linux
> +
> +echo
> +echo "== Creating zero size image =="
> +
> +_make_test_img 0
> +_check_test_img
> +
> +mv $TEST_IMG $TEST_IMG.orig
> +
> +echo
> +echo "== Converting the image =="
> +
> +$QEMU_IMG convert -O $IMGFMT $TEST_IMG.orig $TEST_IMG
> +_check_test_img
> +
> +echo
> +echo "== Converting the image, compressed =="
> +
> +if [ "$IMGFMT" == "qcow2" ]; then
> +    $QEMU_IMG convert -c -O $IMGFMT $TEST_IMG.orig $TEST_IMG
> +fi
> +_check_test_img
> +
> +echo
> +echo "== Rebasing the image =="
> +
> +$QEMU_IMG rebase -u -b $TEST_IMG.orig $TEST_IMG
> +$QEMU_IMG rebase -b $TEST_IMG.orig $TEST_IMG
> +_check_test_img
> +
> +# success, all done
> +echo "*** done"
> +rm -f $seq.full
> +status=0
> +
> diff --git a/tests/qemu-iotests/041.out b/tests/qemu-iotests/041.out
> new file mode 100644
> index 0000000..98514fa
> --- /dev/null
> +++ b/tests/qemu-iotests/041.out
> @@ -0,0 +1,15 @@
> +QA output created by 041
> +
> +== Creating zero size image ==
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0 
> +No errors were found on the image.
> +
> +== Converting the image ==
> +No errors were found on the image.
> +
> +== Converting the image, compressed ==
> +No errors were found on the image.
> +
> +== Rebasing the image ==
> +No errors were found on the image.
> +*** done
> diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
> index 66d2ba9..fa4a7da 100644
> --- a/tests/qemu-iotests/group
> +++ b/tests/qemu-iotests/group
> @@ -47,3 +47,4 @@
>  038 rw auto backing
>  039 rw auto
>  040 rw auto
> +041 rw auto quick
> 

FWIW, this will require renaming the mirror test to 042 :(  Since I have
multiple patches touching the file while you have just one, any chance
you can hold up this series for a week or so?

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

Paolo

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] qemu-iotests: Test qemu-img operation on zero size image
  2012-10-12 16:57   ` Paolo Bonzini
@ 2012-10-15  8:47     ` Kevin Wolf
  2012-10-15  9:42       ` Paolo Bonzini
  0 siblings, 1 reply; 7+ messages in thread
From: Kevin Wolf @ 2012-10-15  8:47 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel

Am 12.10.2012 18:57, schrieb Paolo Bonzini:
> FWIW, this will require renaming the mirror test to 042 :(  Since I have
> multiple patches touching the file while you have just one, any chance
> you can hold up this series for a week or so?

So is 042 still free? Then I'd just change this patch to use 042.
There's no strict rule that 041 must be committed earlier than 042.

Kevin

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] qemu-iotests: Test qemu-img operation on zero size image
  2012-10-15  8:47     ` Kevin Wolf
@ 2012-10-15  9:42       ` Paolo Bonzini
  0 siblings, 0 replies; 7+ messages in thread
From: Paolo Bonzini @ 2012-10-15  9:42 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: qemu-devel

> Am 12.10.2012 18:57, schrieb Paolo Bonzini:
> > FWIW, this will require renaming the mirror test to 042 :(  Since I
> > have
> > multiple patches touching the file while you have just one, any
> > chance
> > you can hold up this series for a week or so?
> 
> So is 042 still free? Then I'd just change this patch to use 042.
> There's no strict rule that 041 must be committed earlier than 042.

Yes, that would work too--thanks!

Paolo

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-10-15  9:43 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-12 12:31 [Qemu-devel] [PATCH 0/2] qemu-img: Fix division by zero for zero size images Kevin Wolf
2012-10-12 12:31 ` [Qemu-devel] [PATCH 1/2] " Kevin Wolf
2012-10-12 16:56   ` Paolo Bonzini
2012-10-12 12:31 ` [Qemu-devel] [PATCH 2/2] qemu-iotests: Test qemu-img operation on zero size image Kevin Wolf
2012-10-12 16:57   ` Paolo Bonzini
2012-10-15  8:47     ` Kevin Wolf
2012-10-15  9:42       ` Paolo Bonzini

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).