From nobody Mon Apr 29 04:57:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 149155479355418.979214295439192; Fri, 7 Apr 2017 01:46:33 -0700 (PDT) Received: from localhost ([::1]:49554 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cwPXL-0001gl-J6 for importer@patchew.org; Fri, 07 Apr 2017 04:46:31 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48700) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cwPWF-00018V-CF for qemu-devel@nongnu.org; Fri, 07 Apr 2017 04:45:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cwPWC-0002A3-97 for qemu-devel@nongnu.org; Fri, 07 Apr 2017 04:45:23 -0400 Received: from mail-pg0-x243.google.com ([2607:f8b0:400e:c05::243]:34352) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cwPWC-00029p-2b; Fri, 07 Apr 2017 04:45:20 -0400 Received: by mail-pg0-x243.google.com with SMTP id o123so14095789pga.1; Fri, 07 Apr 2017 01:45:19 -0700 (PDT) Received: from localhost.localdomain ([123.206.110.226]) by smtp.gmail.com with ESMTPSA id 73sm8106945pfj.31.2017.04.07.01.45.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 07 Apr 2017 01:45:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=V7oKhIqNy9pAtiqLUEbJS4QWC9NZdpg6+6dys43N1aE=; b=hRit+0Fl/FGomaYrdzvFvEcykBE5S2EnKapuZzNOZqrCSwrpTVxoJw1o/djUq0ESwQ G7U3VTEANUpo93Bolbf5cGQGXuvfYPKCjdV0i44X7bd8GQBcPgk9xK+FJVrzomIL/rOL HSVLvG8h6WzakBDyf464gsbo6bDGvhCLBvpfYmcZO+uPpIKQHwGyRbKL5NpmnUdVMR+n hfOzjbEAzQLGdn+WWsihdKVz1c2vNLfN8mYsOl2zbAdXxGFhyZG04w0IHsGGAEnM8t82 REGVjwwuzzNsJO09WoO/duTP8Doxu8GVPS2d+W//pVagVzbYA3AwtT7vZZQLoKmB1oC9 DQGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=V7oKhIqNy9pAtiqLUEbJS4QWC9NZdpg6+6dys43N1aE=; b=TDKsx6pqKZ/82HjTnRBtTlsha1iYuOsylcyR2mEWJbumwWw0fkD0xfqK4uxt6lkzWH 5DAgx5nb7Ei43ojPUEGCs+g0RXKooisrBn/Edl8wkV+MnnGb0G4hz4HNUD4XexxSZEPr Z1L/SB/gjzsmkgmkCZc9Z2pym+YWbSOblOUQLE3Wqkv/Qcku41KYgsF3y7soZC0s5TNg wJNBfB7inPXf0SXP7yOOJIEfMf6a35O3pP1sortF0oRS1pIKzsIBk0128nPQpt9LSgqG IzjYKhHF2F57U0Yh2HrQSqZZ57Roz4trzqI/LvAEla0uJNoecE44cwG34calRivCov7H NeOg== X-Gm-Message-State: AFeK/H2sU8KkHjy+fzrLXT31MEi/vHJiXDceglCymcTrHIqZnJxngqyXg8DcqPDJSpRMuw== X-Received: by 10.99.5.133 with SMTP id 127mr40003875pgf.8.1491554719078; Fri, 07 Apr 2017 01:45:19 -0700 (PDT) From: jemmy858585@gmail.com X-Google-Original-From: lidongchen@tencent.com To: qemu-devel@nongnu.org Date: Fri, 7 Apr 2017 16:44:45 +0800 Message-Id: <1491554685-1288-1-git-send-email-lidongchen@tencent.com> X-Mailer: git-send-email 1.8.3.1 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:400e:c05::243 Subject: [Qemu-devel] [PATCH v2] migration/block: use blk_pwrite_zeroes for each zero cluster X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: famz@redhat.com, qemu-block@nongnu.org, quintela@redhat.com, dgilbert@redhat.com, stefanha@redhat.com, Lidong Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Lidong Chen BLOCK_SIZE is (1 << 20), qcow2 cluster size is 65536 by default, this maybe cause the qcow2 file size is bigger after migration. This patch check each cluster, use blk_pwrite_zeroes for each zero cluster. Signed-off-by: Lidong Chen --- migration/block.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/migration/block.c b/migration/block.c index 7734ff7..c32e046 100644 --- a/migration/block.c +++ b/migration/block.c @@ -885,6 +885,11 @@ static int block_load(QEMUFile *f, void *opaque, int v= ersion_id) int64_t total_sectors =3D 0; int nr_sectors; int ret; + int i; + int64_t addr_offset; + uint8_t *buf_offset; + BlockDriverInfo bdi; + int cluster_size; =20 do { addr =3D qemu_get_be64(f); @@ -934,8 +939,36 @@ static int block_load(QEMUFile *f, void *opaque, int v= ersion_id) } else { buf =3D g_malloc(BLOCK_SIZE); qemu_get_buffer(f, buf, BLOCK_SIZE); - ret =3D blk_pwrite(blk, addr * BDRV_SECTOR_SIZE, buf, - nr_sectors * BDRV_SECTOR_SIZE, 0); + + ret =3D bdrv_get_info(blk_bs(blk), &bdi); + cluster_size =3D bdi.cluster_size; + + if (ret =3D=3D 0 && cluster_size > 0 && + cluster_size < BLOCK_SIZE && + BLOCK_SIZE % cluster_size =3D=3D 0) { + for (i =3D 0; i < BLOCK_SIZE / cluster_size; i++) { + addr_offset =3D addr * BDRV_SECTOR_SIZE + + i * cluster_size; + buf_offset =3D buf + i * cluster_size; + + if (buffer_is_zero(buf_offset, cluster_size)) { + ret =3D blk_pwrite_zeroes(blk, addr_offset, + cluster_size, + BDRV_REQ_MAY_UNMAP); + } else { + ret =3D blk_pwrite(blk, addr_offset, buf_offs= et, + cluster_size, 0); + } + + if (ret < 0) { + g_free(buf); + return ret; + } + } + } else { + ret =3D blk_pwrite(blk, addr * BDRV_SECTOR_SIZE, buf, + nr_sectors * BDRV_SECTOR_SIZE, 0); + } g_free(buf); } =20 --=20 1.8.3.1