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 <hu...@cn.fujitsu.com> > > Reviewed-by: Kevin Wolf <kw...@redhat.com> > > Reviewed-by: Eric Blake <ebl...@redhat.com> > > Reviewed-by: Max Reitz <mre...@redhat.com> > > --- > > 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 > > +owner=hu...@cn.fujitsu.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 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