[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH] qemu-img: use blk_co_pwrite_zeroes for zero sectors
From: |
jemmy858585 |
Subject: |
[Qemu-block] [PATCH] qemu-img: use blk_co_pwrite_zeroes for zero sectors when compressed |
Date: |
Thu, 20 Apr 2017 16:38:46 +0800 |
From: Lidong Chen <address@hidden>
when the buffer is zero, blk_co_pwrite_zeroes is more effectively than
blk_co_pwritev with BDRV_REQ_WRITE_COMPRESSED. this patch can reduces
the time when converts the qcow2 image with lots of zero.
Signed-off-by: Lidong Chen <address@hidden>
---
qemu-img.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index b220cf7..0256539 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -1675,13 +1675,20 @@ static int coroutine_fn
convert_co_write(ImgConvertState *s, int64_t sector_num,
* write if the buffer is completely zeroed and we're allowed to
* keep the target sparse. */
if (s->compressed) {
- if (s->has_zero_init && s->min_sparse &&
- buffer_is_zero(buf, n * BDRV_SECTOR_SIZE))
- {
- assert(!s->target_has_backing);
- break;
+ if (buffer_is_zero(buf, n * BDRV_SECTOR_SIZE)) {
+ if (s->has_zero_init && s->min_sparse) {
+ assert(!s->target_has_backing);
+ break;
+ } else {
+ ret = blk_co_pwrite_zeroes(s->target,
+ sector_num << BDRV_SECTOR_BITS,
+ n << BDRV_SECTOR_BITS, 0);
+ if (ret < 0) {
+ return ret;
+ }
+ break;
+ }
}
-
iov.iov_base = buf;
iov.iov_len = n << BDRV_SECTOR_BITS;
qemu_iovec_init_external(&qiov, &iov, 1);
--
1.8.3.1
- [Qemu-block] [PATCH] qemu-img: use blk_co_pwrite_zeroes for zero sectors when compressed,
jemmy858585 <=