qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v14 1/5] block: round up file size to nearest se


From: Hu Tao
Subject: Re: [Qemu-devel] [PATCH v14 1/5] block: round up file size to nearest sector
Date: Wed, 10 Sep 2014 09:50:02 +0800
User-agent: Mutt/1.5.21 (2010-09-15)

On Tue, Sep 09, 2014 at 02:12:18PM +0200, Benoît Canet wrote:
> The Tuesday 09 Sep 2014 à 11:54:27 (+0800), Hu Tao wrote :
> 
> Taking the time to systematically write a nice sentence in
> the commit message body about why your commit exists and
> explaining the long term purpose of the patch will:
> 
> -improve the quality of your commit
> -please everyone involved in the review
> -ultimately help your to get the patch merged faster

Okay.

> 
> > Signed-off-by: Hu Tao <address@hidden>
> > Reviewed-by: Kevin Wolf <address@hidden>
> > Reviewed-by: Eric Blake <address@hidden>
> > Reviewed-by: Max Reitz <address@hidden>
> > ---
> >  block/archipelago.c              |  3 ++-
> >  block/cow.c                      |  3 ++-
> >  block/gluster.c                  |  4 +--
> >  block/iscsi.c                    |  4 +--
> >  block/nfs.c                      |  3 ++-
> >  block/qcow.c                     |  3 ++-
> >  block/qcow2.c                    |  3 ++-
> >  block/qed.c                      |  3 ++-
> >  block/raw-posix.c                |  8 +++---
> >  block/raw-win32.c                |  4 +--
> >  block/rbd.c                      |  3 ++-
> >  block/sheepdog.c                 |  3 ++-
> >  block/ssh.c                      |  3 ++-
> >  block/vdi.c                      |  3 ++-
> >  block/vhdx.c                     |  3 ++-
> >  block/vmdk.c                     |  3 ++-
> >  block/vpc.c                      |  3 ++-
> >  tests/qemu-iotests/104           | 57 
> > ++++++++++++++++++++++++++++++++++++++++
> >  tests/qemu-iotests/104.out       | 12 +++++++++
> >  tests/qemu-iotests/common.filter | 21 +++++++++++++++
> >  tests/qemu-iotests/group         |  1 +
> >  21 files changed, 127 insertions(+), 23 deletions(-)
> >  create mode 100755 tests/qemu-iotests/104
> >  create mode 100644 tests/qemu-iotests/104.out
> > 
> > diff --git a/block/archipelago.c b/block/archipelago.c
> > index 22a7daa..06c51f9 100644
> > --- a/block/archipelago.c
> > +++ b/block/archipelago.c
> > @@ -708,7 +708,8 @@ static int qemu_archipelago_create(const char *filename,
> >  
> >      parse_filename_opts(filename, errp, &volname, &segment_name, &mport,
> >                          &vport);
> > -    total_size = qemu_opt_get_size_del(options, BLOCK_OPT_SIZE, 0);
> > +    total_size = ROUND_UP(qemu_opt_get_size_del(options, BLOCK_OPT_SIZE, 
> > 0),
> > +                          BDRV_SECTOR_SIZE);
> >  
> >      if (segment_name == NULL) {
> >          segment_name = g_strdup("archipelago");
> > diff --git a/block/cow.c b/block/cow.c
> > index 6ee4833..c3769fe 100644
> > --- a/block/cow.c
> > +++ b/block/cow.c
> > @@ -335,7 +335,8 @@ static int cow_create(const char *filename, QemuOpts 
> > *opts, Error **errp)
> >      BlockDriverState *cow_bs = NULL;
> >  
> >      /* Read out options */
> > -    image_sectors = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / 512;
> > +    image_sectors = DIV_ROUND_UP(qemu_opt_get_size_del(opts, 
> > BLOCK_OPT_SIZE, 0),
> > +                                 BDRV_SECTOR_SIZE);
> >      image_filename = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE);
> >  
> >      ret = bdrv_create_file(filename, opts, &local_err);
> > diff --git a/block/gluster.c b/block/gluster.c
> > index 1912cf9..65c7a58 100644
> > --- a/block/gluster.c
> > +++ b/block/gluster.c
> > @@ -494,8 +494,8 @@ static int qemu_gluster_create(const char *filename,
> >          goto out;
> >      }
> >  
> > -    total_size =
> > -        qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_SIZE;
> > +    total_size = DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 
> > 0),
> > +                              BDRV_SECTOR_SIZE);
> >  
> >      tmp = qemu_opt_get_del(opts, BLOCK_OPT_PREALLOC);
> >      if (!tmp || !strcmp(tmp, "off")) {
> > diff --git a/block/iscsi.c b/block/iscsi.c
> > index 3e19202..84bcae8 100644
> > --- a/block/iscsi.c
> > +++ b/block/iscsi.c
> > @@ -1531,8 +1531,8 @@ static int iscsi_create(const char *filename, 
> > QemuOpts *opts, Error **errp)
> >      bs = bdrv_new("", &error_abort);
> >  
> >      /* Read out options */
> > -    total_size =
> > -        qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_SIZE;
> > +    total_size = DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 
> > 0),
> > +                              BDRV_SECTOR_SIZE);
> >      bs->opaque = g_new0(struct IscsiLun, 1);
> >      iscsilun = bs->opaque;
> >  
> > diff --git a/block/nfs.c b/block/nfs.c
> > index 194f301..c76e368 100644
> > --- a/block/nfs.c
> > +++ b/block/nfs.c
> > @@ -418,7 +418,8 @@ static int nfs_file_create(const char *url, QemuOpts 
> > *opts, Error **errp)
> >      client->aio_context = qemu_get_aio_context();
> >  
> >      /* Read out options */
> > -    total_size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> > +    total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> > +                          BDRV_SECTOR_SIZE);
> >  
> >      ret = nfs_client_open(client, url, O_CREAT, errp);
> >      if (ret < 0) {
> > diff --git a/block/qcow.c b/block/qcow.c
> > index 67c237f..041af26 100644
> > --- a/block/qcow.c
> > +++ b/block/qcow.c
> > @@ -725,7 +725,8 @@ static int qcow_create(const char *filename, QemuOpts 
> > *opts, Error **errp)
> >      BlockDriverState *qcow_bs;
> >  
> >      /* Read out options */
> > -    total_size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / 512;
> > +    total_size = DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 
> > 0),
> > +                              BDRV_SECTOR_SIZE);
> >      backing_file = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE);
> >      if (qemu_opt_get_bool_del(opts, BLOCK_OPT_ENCRYPT, false)) {
> >          flags |= BLOCK_FLAG_ENCRYPT;
> > diff --git a/block/qcow2.c b/block/qcow2.c
> > index f9e045f..c8050e5 100644
> > --- a/block/qcow2.c
> > +++ b/block/qcow2.c
> > @@ -1921,7 +1921,8 @@ static int qcow2_create(const char *filename, 
> > QemuOpts *opts, Error **errp)
> >      int ret;
> >  
> >      /* Read out options */
> > -    sectors = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / 512;
> > +    sectors = DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> > +                           BDRV_SECTOR_SIZE);
> >      backing_file = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE);
> >      backing_fmt = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FMT);
> >      if (qemu_opt_get_bool_del(opts, BLOCK_OPT_ENCRYPT, false)) {
> > diff --git a/block/qed.c b/block/qed.c
> > index ba395af..f8d9e12 100644
> > --- a/block/qed.c
> > +++ b/block/qed.c
> > @@ -648,7 +648,8 @@ static int bdrv_qed_create(const char *filename, 
> > QemuOpts *opts, Error **errp)
> >      char *backing_fmt = NULL;
> >      int ret;
> >  
> > -    image_size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> > +    image_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> > +                          BDRV_SECTOR_SIZE);
> >      backing_file = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE);
> >      backing_fmt = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FMT);
> >      cluster_size = qemu_opt_get_size_del(opts,
> > diff --git a/block/raw-posix.c b/block/raw-posix.c
> > index d737f3a..9c22e3f 100644
> > --- a/block/raw-posix.c
> > +++ b/block/raw-posix.c
> > @@ -1369,8 +1369,8 @@ static int raw_create(const char *filename, QemuOpts 
> > *opts, Error **errp)
> >      strstart(filename, "file:", &filename);
> >  
> >      /* Read out options */
> > -    total_size =
> > -        qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_SIZE;
> > +    total_size = DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 
> > 0),
> > +                              BDRV_SECTOR_SIZE);
> >      nocow = qemu_opt_get_bool(opts, BLOCK_OPT_NOCOW, false);
> >  
> >      fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
> > @@ -1966,8 +1966,8 @@ static int hdev_create(const char *filename, QemuOpts 
> > *opts,
> >      (void)has_prefix;
> >  
> >      /* Read out options */
> > -    total_size =
> > -        qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_SIZE;
> > +    total_size = DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 
> > 0),
> > +                              BDRV_SECTOR_SIZE);
> >  
> >      fd = qemu_open(filename, O_WRONLY | O_BINARY);
> >      if (fd < 0) {
> > diff --git a/block/raw-win32.c b/block/raw-win32.c
> > index 902eab6..1e1880d 100644
> > --- a/block/raw-win32.c
> > +++ b/block/raw-win32.c
> > @@ -511,8 +511,8 @@ static int raw_create(const char *filename, QemuOpts 
> > *opts, Error **errp)
> >      strstart(filename, "file:", &filename);
> >  
> >      /* Read out options */
> > -    total_size =
> > -        qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / 512;
> > +    total_size = DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 
> > 0),
> > +                              BDRV_SECTOR_SIZE);
> >  
> >      fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
> >                     0644);
> > diff --git a/block/rbd.c b/block/rbd.c
> > index ea969e7..b7f7d5f 100644
> > --- a/block/rbd.c
> > +++ b/block/rbd.c
> > @@ -314,7 +314,8 @@ static int qemu_rbd_create(const char *filename, 
> > QemuOpts *opts, Error **errp)
> >      }
> >  
> >      /* Read out options */
> > -    bytes = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> > +    bytes = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> > +                     BDRV_SECTOR_SIZE);
> >      objsize = qemu_opt_get_size_del(opts, BLOCK_OPT_CLUSTER_SIZE, 0);
> >      if (objsize) {
> >          if ((objsize - 1) & objsize) {    /* not a power of 2? */
> > diff --git a/block/sheepdog.c b/block/sheepdog.c
> > index f91afc3..7da36e1 100644
> > --- a/block/sheepdog.c
> > +++ b/block/sheepdog.c
> > @@ -1702,7 +1702,8 @@ static int sd_create(const char *filename, QemuOpts 
> > *opts,
> >          goto out;
> >      }
> >  
> > -    s->inode.vdi_size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> > +    s->inode.vdi_size = ROUND_UP(qemu_opt_get_size_del(opts, 
> > BLOCK_OPT_SIZE, 0),
> > +                                 BDRV_SECTOR_SIZE);
> >      backing_file = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE);
> >      buf = qemu_opt_get_del(opts, BLOCK_OPT_PREALLOC);
> >      if (!buf || !strcmp(buf, "off")) {
> > diff --git a/block/ssh.c b/block/ssh.c
> > index cd2fd75..cf43bc0 100644
> > --- a/block/ssh.c
> > +++ b/block/ssh.c
> > @@ -700,7 +700,8 @@ static int ssh_create(const char *filename, QemuOpts 
> > *opts, Error **errp)
> >      ssh_state_init(&s);
> >  
> >      /* Get desired file size. */
> > -    total_size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> > +    total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> > +                          BDRV_SECTOR_SIZE);
> >      DPRINTF("total_size=%" PRIi64, total_size);
> >  
> >      uri_options = qdict_new();
> > diff --git a/block/vdi.c b/block/vdi.c
> > index 4b10aac..cfa08b0 100644
> > --- a/block/vdi.c
> > +++ b/block/vdi.c
> > @@ -700,7 +700,8 @@ static int vdi_create(const char *filename, QemuOpts 
> > *opts, Error **errp)
> >      logout("\n");
> >  
> >      /* Read out options. */
> > -    bytes = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> > +    bytes = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> > +                     BDRV_SECTOR_SIZE);
> >  #if defined(CONFIG_VDI_BLOCK_SIZE)
> >      /* TODO: Additional checks (SECTOR_SIZE * 2^n, ...). */
> >      block_size = qemu_opt_get_size_del(opts,
> > diff --git a/block/vhdx.c b/block/vhdx.c
> > index 87c99fc..796b7bd 100644
> > --- a/block/vhdx.c
> > +++ b/block/vhdx.c
> > @@ -1766,7 +1766,8 @@ static int vhdx_create(const char *filename, QemuOpts 
> > *opts, Error **errp)
> >      VHDXImageType image_type;
> >      Error *local_err = NULL;
> >  
> > -    image_size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> > +    image_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> > +                          BDRV_SECTOR_SIZE);
> >      log_size = qemu_opt_get_size_del(opts, VHDX_BLOCK_OPT_LOG_SIZE, 0);
> >      block_size = qemu_opt_get_size_del(opts, VHDX_BLOCK_OPT_BLOCK_SIZE, 0);
> >      type = qemu_opt_get_del(opts, BLOCK_OPT_SUBFMT);
> > diff --git a/block/vmdk.c b/block/vmdk.c
> > index a1cb911..afdea1a 100644
> > --- a/block/vmdk.c
> > +++ b/block/vmdk.c
> > @@ -1807,7 +1807,8 @@ static int vmdk_create(const char *filename, QemuOpts 
> > *opts, Error **errp)
> >          goto exit;
> >      }
> >      /* Read out options */
> > -    total_size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> > +    total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> > +                          BDRV_SECTOR_SIZE);
> >      adapter_type = qemu_opt_get_del(opts, BLOCK_OPT_ADAPTER_TYPE);
> >      backing_file = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE);
> >      if (qemu_opt_get_bool_del(opts, BLOCK_OPT_COMPAT6, false)) {
> > diff --git a/block/vpc.c b/block/vpc.c
> > index 055efc4..5d8fd8e 100644
> > --- a/block/vpc.c
> > +++ b/block/vpc.c
> > @@ -757,7 +757,8 @@ static int vpc_create(const char *filename, QemuOpts 
> > *opts, Error **errp)
> >      BlockDriverState *bs = NULL;
> >  
> >      /* Read out options */
> > -    total_size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> > +    total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> > +                          BDRV_SECTOR_SIZE);
> >      disk_type_param = qemu_opt_get_del(opts, BLOCK_OPT_SUBFMT);
> >      if (disk_type_param) {
> >          if (!strcmp(disk_type_param, "dynamic")) {
> > diff --git a/tests/qemu-iotests/104 b/tests/qemu-iotests/104
> > new file mode 100755
> > index 0000000..b471aa5
> > --- /dev/null
> > +++ b/tests/qemu-iotests/104
> > @@ -0,0 +1,57 @@
> > +#!/bin/bash
> > +#
> > +# Test image creation with aligned and unaligned sizes
> > +#
> > +# Copyright (C) 2014 Fujitsu.
> > +#
> > +# 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
> > address@hidden
> > +
> > +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 generic
> > +_supported_proto generic
> > +_supported_os Linux
> > +
> > +echo "=== Check qemu-img info output ==="
> > +echo
> > +image_sizes="1024 1234"
> > +
> > +for s in $image_sizes; do
> > +    _make_test_img $s | _filter_img_create
> > +    _img_info | _filter_img_info
> > +done
> > +
> > +# success, all done
> > +echo "*** done"
> > +rm -f $seq.full
> > +status=0
> > diff --git a/tests/qemu-iotests/104.out b/tests/qemu-iotests/104.out
> > new file mode 100644
> > index 0000000..de27852
> > --- /dev/null
> > +++ b/tests/qemu-iotests/104.out
> > @@ -0,0 +1,12 @@
> > +QA output created by 104
> > +=== Check qemu-img info output ===
> > +
> > +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1024 
> > +image: TEST_DIR/t.IMGFMT
> > +file format: IMGFMT
> > +virtual size: 1.0K (1024 bytes)
> > +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1234 
> > +image: TEST_DIR/t.IMGFMT
> > +file format: IMGFMT
> > +virtual size: 1.5K (1536 bytes)
> > +***done
> > diff --git a/tests/qemu-iotests/common.filter 
> > b/tests/qemu-iotests/common.filter
> > index 51192c8..f69cb6b 100644
> > --- a/tests/qemu-iotests/common.filter
> > +++ b/tests/qemu-iotests/common.filter
> > @@ -192,5 +192,26 @@ _filter_img_create()
> >          -e "s/archipelago:a/TEST_DIR\//g"
> >  }
> >  
> > +_filter_img_info()
> > +{
> > +    sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
> > +        -e "s#$TEST_DIR#TEST_DIR#g" \
> > +        -e "s#$IMGFMT#IMGFMT#g" \
> > +        -e "/encrypted: yes/d" \
> > +        -e "/cluster_size: [0-9]\\+/d" \
> > +        -e "/table_size: [0-9]\\+/d" \
> > +        -e "/compat: '[^']*'/d" \
> > +        -e "/compat6: \\(on\\|off\\)/d" \
> > +        -e "/static: \\(on\\|off\\)/d" \
> > +        -e "/zeroed_grain: \\(on\\|off\\)/d" \
> > +        -e "/subformat: '[^']*'/d" \
> > +        -e "/adapter_type: '[^']*'/d" \
> > +        -e "/lazy_refcounts: \\(on\\|off\\)/d" \
> > +        -e "/block_size: [0-9]\\+/d" \
> > +        -e "/block_state_zero: \\(on\\|off\\)/d" \
> > +        -e "/log_size: [0-9]\\+/d" \
> > +        -e "s/archipelago:a/TEST_DIR\//g"
> > +}
> > +
> >  # make sure this script returns success
> >  /bin/true
> > diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
> > index 0920b28..622685e 100644
> > --- a/tests/qemu-iotests/group
> > +++ b/tests/qemu-iotests/group
> > @@ -104,3 +104,4 @@
> >  100 rw auto quick
> >  101 rw auto quick
> >  103 rw auto quick
> > +104 rw auto
> > -- 
> > 1.9.3
> 
> seems correct but the patch does not apply anymore on latest Kevin/block
> branch neither with git am nor with git apply..
> Could you rebase ?

I made it on top of master. I'll respin basing on Kevin/block.

Regards,
Hu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]