From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48824) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XRKIR-0006ly-P2 for qemu-devel@nongnu.org; Tue, 09 Sep 2014 08:13:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XRKIK-0002a1-N8 for qemu-devel@nongnu.org; Tue, 09 Sep 2014 08:13:19 -0400 Received: from lputeaux-656-01-25-125.w80-12.abo.wanadoo.fr ([80.12.84.125]:49823 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XRKIK-0002ZI-Cj for qemu-devel@nongnu.org; Tue, 09 Sep 2014 08:13:12 -0400 Date: Tue, 9 Sep 2014 14:12:18 +0200 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20140909121217.GA22473@irqsave.net> References: <53d5d8a8f377692ab284afff6693c02fdb1dea9a.1410232831.git.hutao@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <53d5d8a8f377692ab284afff6693c02fdb1dea9a.1410232831.git.hutao@cn.fujitsu.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v14 1/5] block: round up file size to nearest sector List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Hu Tao Cc: Kevin Wolf , Fam Zheng , "Richard W.M. Jones" , qemu-devel@nongnu.org, Max Reitz , Stefan Hajnoczi , Yasunori Goto The Tuesday 09 Sep 2014 =E0 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 > Signed-off-by: Hu Tao > Reviewed-by: Kevin Wolf > Reviewed-by: Eric Blake > Reviewed-by: Max Reitz > --- > 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 >=20 > 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 *file= name, > =20 > parse_filename_opts(filename, errp, &volname, &segment_name, &mpor= t, > &vport); > - total_size =3D qemu_opt_get_size_del(options, BLOCK_OPT_SIZE, 0); > + total_size =3D ROUND_UP(qemu_opt_get_size_del(options, BLOCK_OPT_S= IZE, 0), > + BDRV_SECTOR_SIZE); > =20 > if (segment_name =3D=3D NULL) { > segment_name =3D 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, QemuOpt= s *opts, Error **errp) > BlockDriverState *cow_bs =3D NULL; > =20 > /* Read out options */ > - image_sectors =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) /= 512; > + image_sectors =3D DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_O= PT_SIZE, 0), > + BDRV_SECTOR_SIZE); > image_filename =3D qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE); > =20 > ret =3D 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; > } > =20 > - total_size =3D > - qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_S= IZE; > + total_size =3D DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_= SIZE, 0), > + BDRV_SECTOR_SIZE); > =20 > tmp =3D 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, Qem= uOpts *opts, Error **errp) > bs =3D bdrv_new("", &error_abort); > =20 > /* Read out options */ > - total_size =3D > - qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_S= IZE; > + total_size =3D DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_= SIZE, 0), > + BDRV_SECTOR_SIZE); > bs->opaque =3D g_new0(struct IscsiLun, 1); > iscsilun =3D bs->opaque; > =20 > 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, QemuOpt= s *opts, Error **errp) > client->aio_context =3D qemu_get_aio_context(); > =20 > /* Read out options */ > - total_size =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); > + total_size =3D ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE= , 0), > + BDRV_SECTOR_SIZE); > =20 > ret =3D 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, QemuOp= ts *opts, Error **errp) > BlockDriverState *qcow_bs; > =20 > /* Read out options */ > - total_size =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / 51= 2; > + total_size =3D DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_= SIZE, 0), > + BDRV_SECTOR_SIZE); > backing_file =3D qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE); > if (qemu_opt_get_bool_del(opts, BLOCK_OPT_ENCRYPT, false)) { > flags |=3D 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, Qem= uOpts *opts, Error **errp) > int ret; > =20 > /* Read out options */ > - sectors =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / 512; > + sectors =3D DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZ= E, 0), > + BDRV_SECTOR_SIZE); > backing_file =3D qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE); > backing_fmt =3D 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, Qe= muOpts *opts, Error **errp) > char *backing_fmt =3D NULL; > int ret; > =20 > - image_size =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); > + image_size =3D ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE= , 0), > + BDRV_SECTOR_SIZE); > backing_file =3D qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE); > backing_fmt =3D qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FMT); > cluster_size =3D 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, QemuO= pts *opts, Error **errp) > strstart(filename, "file:", &filename); > =20 > /* Read out options */ > - total_size =3D > - qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_S= IZE; > + total_size =3D DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_= SIZE, 0), > + BDRV_SECTOR_SIZE); > nocow =3D qemu_opt_get_bool(opts, BLOCK_OPT_NOCOW, false); > =20 > fd =3D qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY= , > @@ -1966,8 +1966,8 @@ static int hdev_create(const char *filename, Qemu= Opts *opts, > (void)has_prefix; > =20 > /* Read out options */ > - total_size =3D > - qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_S= IZE; > + total_size =3D DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_= SIZE, 0), > + BDRV_SECTOR_SIZE); > =20 > fd =3D 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, QemuOpt= s *opts, Error **errp) > strstart(filename, "file:", &filename); > =20 > /* Read out options */ > - total_size =3D > - qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / 512; > + total_size =3D DIV_ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_= SIZE, 0), > + BDRV_SECTOR_SIZE); > =20 > fd =3D 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, Qe= muOpts *opts, Error **errp) > } > =20 > /* Read out options */ > - bytes =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); > + bytes =3D ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0), > + BDRV_SECTOR_SIZE); > objsize =3D 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, QemuOp= ts *opts, > goto out; > } > =20 > - s->inode.vdi_size =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, = 0); > + s->inode.vdi_size =3D ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_O= PT_SIZE, 0), > + BDRV_SECTOR_SIZE); > backing_file =3D qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE); > buf =3D 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, QemuOpt= s *opts, Error **errp) > ssh_state_init(&s); > =20 > /* Get desired file size. */ > - total_size =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); > + total_size =3D ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE= , 0), > + BDRV_SECTOR_SIZE); > DPRINTF("total_size=3D%" PRIi64, total_size); > =20 > uri_options =3D 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, QemuOpt= s *opts, Error **errp) > logout("\n"); > =20 > /* Read out options. */ > - bytes =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); > + bytes =3D 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 =3D 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, Qemu= Opts *opts, Error **errp) > VHDXImageType image_type; > Error *local_err =3D NULL; > =20 > - image_size =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); > + image_size =3D ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE= , 0), > + BDRV_SECTOR_SIZE); > log_size =3D qemu_opt_get_size_del(opts, VHDX_BLOCK_OPT_LOG_SIZE, = 0); > block_size =3D qemu_opt_get_size_del(opts, VHDX_BLOCK_OPT_BLOCK_SI= ZE, 0); > type =3D 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, Qemu= Opts *opts, Error **errp) > goto exit; > } > /* Read out options */ > - total_size =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); > + total_size =3D ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE= , 0), > + BDRV_SECTOR_SIZE); > adapter_type =3D qemu_opt_get_del(opts, BLOCK_OPT_ADAPTER_TYPE); > backing_file =3D 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, QemuOpt= s *opts, Error **errp) > BlockDriverState *bs =3D NULL; > =20 > /* Read out options */ > - total_size =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); > + total_size =3D ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE= , 0), > + BDRV_SECTOR_SIZE); > disk_type_param =3D 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 = . > +# > + > +# creator > +owner=3Dhutao@cn.fujitsu.com > + > +seq=3D`basename $0` > +echo "QA output created by $seq" > + > +here=3D`pwd` > +tmp=3D/tmp/$$ > +status=3D1 # 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 "=3D=3D=3D Check qemu-img info output =3D=3D=3D" > +echo > +image_sizes=3D"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=3D0 > 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 > +=3D=3D=3D Check qemu-img info output =3D=3D=3D > + > +Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D1024=20 > +image: TEST_DIR/t.IMGFMT > +file format: IMGFMT > +virtual size: 1.0K (1024 bytes) > +Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D1234=20 > +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/comm= on.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" > } > =20 > +_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 > --=20 > 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 ? >=20 >=20