[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: |
Benoît Canet |
Subject: |
Re: [Qemu-devel] [PATCH v14 1/5] block: round up file size to nearest sector |
Date: |
Tue, 9 Sep 2014 14:12:18 +0200 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
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
> 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 ?
>
>