diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2016-07-27 16:31:01 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2016-07-27 16:31:01 +0100 |
commit | df5c50a208296c8303e591296f4e834a3b3fcb3d (patch) | |
tree | a5a14eda272efc162227678a5f8ab1843193c6df | |
parent | c1fdfe9fcaf4e47ec3def98c5a7c52d2cae6c511 (diff) | |
parent | 0965a41e998ab820b5d660c8abfc8c819c97bc1b (diff) |
Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging
# gpg: Signature made Tue 26 Jul 2016 21:51:38 BST
# gpg: using RSA key 0xBDBE7B27C0DE3057
# gpg: Good signature from "Jeffrey Cody <jcody@redhat.com>"
# gpg: aka "Jeffrey Cody <jeff@codyprime.org>"
# gpg: aka "Jeffrey Cody <codyprime@gmail.com>"
# Primary key fingerprint: 9957 4B4D 3474 90E7 9D98 D624 BDBE 7B27 C0DE 3057
* remotes/cody/tags/block-pull-request:
mirror: double performance of the bulk stage if the disc is full
block/gluster: fix doc in the qapi schema and member name
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | block/mirror.c | 10 | ||||
-rw-r--r-- | qapi/block-core.json | 6 |
2 files changed, 11 insertions, 5 deletions
diff --git a/block/mirror.c b/block/mirror.c index 69a1a7cc96..d6034f5b70 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -23,7 +23,9 @@ #define SLICE_TIME 100000000ULL /* ns */ #define MAX_IN_FLIGHT 16 -#define DEFAULT_MIRROR_BUF_SIZE (10 << 20) +#define MAX_IO_SECTORS ((1 << 20) >> BDRV_SECTOR_BITS) /* 1 Mb */ +#define DEFAULT_MIRROR_BUF_SIZE \ + (MAX_IN_FLIGHT * MAX_IO_SECTORS * BDRV_SECTOR_SIZE) /* The mirroring buffer is a list of granularity-sized chunks. * Free chunks are organized in a list. @@ -325,6 +327,8 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s) int64_t end = s->bdev_length / BDRV_SECTOR_SIZE; int sectors_per_chunk = s->granularity >> BDRV_SECTOR_BITS; bool write_zeroes_ok = bdrv_can_write_zeroes_with_unmap(blk_bs(s->target)); + int max_io_sectors = MAX((s->buf_size >> BDRV_SECTOR_BITS) / MAX_IN_FLIGHT, + MAX_IO_SECTORS); sector_num = hbitmap_iter_next(&s->hbi); if (sector_num < 0) { @@ -388,7 +392,9 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s) nb_chunks * sectors_per_chunk, &io_sectors, &file); if (ret < 0) { - io_sectors = nb_chunks * sectors_per_chunk; + io_sectors = MIN(nb_chunks * sectors_per_chunk, max_io_sectors); + } else if (ret & BDRV_BLOCK_DATA) { + io_sectors = MIN(io_sectors, max_io_sectors); } io_sectors -= io_sectors % sectors_per_chunk; diff --git a/qapi/block-core.json b/qapi/block-core.json index d4bab5d991..2bbc027311 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -1692,9 +1692,9 @@ # Drivers that are supported in block device operations. # # @host_device, @host_cdrom: Since 2.1 +# @gluster: Since 2.7 # # Since: 2.0 -# @gluster: Since 2.7 ## { 'enum': 'BlockdevDriver', 'data': [ 'archipelago', 'blkdebug', 'blkverify', 'bochs', 'cloop', @@ -2138,7 +2138,7 @@ # # @path: absolute path to image file in gluster volume # -# @server: gluster server description +# @server: gluster servers description # # @debug-level: #optional libgfapi log level (default '4' which is Error) # @@ -2148,7 +2148,7 @@ 'data': { 'volume': 'str', 'path': 'str', 'server': ['GlusterServer'], - '*debug_level': 'int' } } + '*debug-level': 'int' } } ## # @BlockdevOptions |