From patchwork Mon Nov 21 01:24:39 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: w90p710@gmail.com X-Patchwork-Id: 697105 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3tMWBb4yb0z9t15 for ; Mon, 21 Nov 2016 12:25:43 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="GHMko9Rk"; dkim-atps=neutral Received: from localhost ([::1]:46846 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c8dMY-0000zq-HN for incoming@patchwork.ozlabs.org; Sun, 20 Nov 2016 20:25:38 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36359) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c8dLo-0000Zz-KW for qemu-devel@nongnu.org; Sun, 20 Nov 2016 20:24:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c8dLn-00044T-PK for qemu-devel@nongnu.org; Sun, 20 Nov 2016 20:24:52 -0500 Received: from mail-pg0-x242.google.com ([2607:f8b0:400e:c05::242]:35920) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1c8dLi-0003zg-4z; Sun, 20 Nov 2016 20:24:46 -0500 Received: by mail-pg0-x242.google.com with SMTP id x23so26884392pgx.3; Sun, 20 Nov 2016 17:24:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=k2gR5yZnVy0sC8syiQ9pB9UaP+CqCZjUC/yysJBeCW8=; b=GHMko9Rk53MDZwIh4MdXg4zSGvtoMzVblqKRQ2UI+kQkS7U6zXWMAwPhTAWuCT41sP Dj2hvO7C5hUIwx8Axu1yEeuJ3dSF5dA2cyVQHlosN6Ae1njX3xgAGzBGnJhMSsfSzvPf aZ24xudce5TSexO6azriRBNMOF9jZc3CsB4Z0PzYtAv2T4AHZMtIXStgv9hfZNTp8UlU XAoDZsB7VYJJqP9PheiPs+ywwHdrqDW/avy4jY7as/fz+ECV53W+cz6hpvQFCify25Kg NL4wiPL+tmuAY/vqSWlExeOFSPS01d6Yr380PHeRIWFxCWBbHUMyf5j9YiazKPPsh/s+ /Lbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=k2gR5yZnVy0sC8syiQ9pB9UaP+CqCZjUC/yysJBeCW8=; b=FNG4I5ojGQsqsw0WZT2q44N0ILVxR1C6EikOyBAPYTjuQ1dYhIahUIYLQyDzz1+CNO LLCEYno8x5DXLQVqarxGrmIG76joqvWDA5fbqat6dz70DkqRs+WtudWNUtynuYwsVWgA OmKrcLiVO+8w5zBQ0zqKtFESKNsCzOW5rvRs0VYchJATwUOZ+/KH/5Wh3STeHVSbwfcE uOWEq+X8RKKv8NYpzbUm9vjoh5A69ksEXWMc1ptxf+XogR+bbHbMI+ioDrgpVmmAjWfD mlRQKY1pxlZT6djlJBbWf/iceQKLa8gBgFG6SSdCFJhFFqJIN8L1B5TSnvKWfIk/e++g /pGg== X-Gm-Message-State: AKaTC01lQA2qZ2pN/KJXffqZBrawGMujuV3XP64tqr6Foo0fG4z9XZG0kU6LwdV7ns4i4w== X-Received: by 10.99.131.67 with SMTP id h64mr25874292pge.135.1479691483980; Sun, 20 Nov 2016 17:24:43 -0800 (PST) Received: from localhost.localdomain ([23.91.96.90]) by smtp.gmail.com with ESMTPSA id p79sm32638649pfj.51.2016.11.20.17.24.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 20 Nov 2016 17:24:43 -0800 (PST) From: Yang Wei To: jcody@redhat.com Date: Mon, 21 Nov 2016 09:24:39 +0800 Message-Id: <20161121012439.2394-1-w90p710@gmail.com> X-Mailer: git-send-email 2.10.2 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:400e:c05::242 Subject: [Qemu-devel] [PATCH] block/mirror: enable detect zeroes when driving mirror 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: w90p710@gmail.com, qemu-devel@nongnu.org, qemu-block@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" In order to preserve sparse disk image, detect_zeroes should also be enabled when bdrv_get_block_status_above() returns BDRV_BLOCK_DATA Signed-off-by: Yang Wei --- block/mirror.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/block/mirror.c b/block/mirror.c index b2c1fb8..8b20b7a 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -76,6 +76,7 @@ typedef struct MirrorOp { QEMUIOVector qiov; int64_t sector_num; int nb_sectors; + BlockdevDetectZeroesOptions backup_detect_zeroes; } MirrorOp; static BlockErrorAction mirror_error_action(MirrorBlockJob *s, bool read, @@ -132,6 +133,8 @@ static void mirror_write_complete(void *opaque, int ret) { MirrorOp *op = opaque; MirrorBlockJob *s = op->s; + BlockDriverState *target = s->target; + target->detect_zeroes = op->backup_detect_zeroes; if (ret < 0) { BlockErrorAction action; @@ -148,6 +151,7 @@ static void mirror_read_complete(void *opaque, int ret) { MirrorOp *op = opaque; MirrorBlockJob *s = op->s; + BlockDriverState *target = s->target; if (ret < 0) { BlockErrorAction action; @@ -160,6 +164,9 @@ static void mirror_read_complete(void *opaque, int ret) mirror_iteration_done(op, ret); return; } + op->backup_detect_zeroes = target->detect_zeroes; + target->detect_zeroes = s->unmap ? BLOCKDEV_DETECT_ZEROES_OPTIONS_UNMAP : + BLOCKDEV_DETECT_ZEROES_OPTIONS_ON; blk_aio_pwritev(s->target, op->sector_num * BDRV_SECTOR_SIZE, &op->qiov, 0, mirror_write_complete, op); }