From patchwork Fri May 21 17:49:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 12273531 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 481B6C4707A for ; Fri, 21 May 2021 17:53:26 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C87B7608FE for ; Fri, 21 May 2021 17:53:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C87B7608FE Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:33792 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lk9Ku-0005BF-P2 for qemu-devel@archiver.kernel.org; Fri, 21 May 2021 13:53:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47524) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HR-0005dM-O7; Fri, 21 May 2021 13:49:49 -0400 Received: from mail-eopbgr80131.outbound.protection.outlook.com ([40.107.8.131]:27182 helo=EUR04-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HO-000645-DR; Fri, 21 May 2021 13:49:49 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DU8IArOkeK/2DKeWwGTKCdeLHRppt9JDx1oXNljcSGH5YoqgoLc2WBWKzVB7vagqq4BvMQ71b4LC5CDD1LLebDWocacDjtQDZJvL+IRA7GH46UPeefV2AqLt9Z2xCe7P+ZlOtCZ6+dt6N943yBgF/NSo6EAqGHr9bPfyADMeqszlsFrZ9hBfjHk8KYMGU8a3LXVhzsSFLtDHLFXy4XPSw2pubw2U06anuqSO+kfQpHhHRrkoFfRmrFFJe07CHM8C1HI3HRei4uBniF+0jK3PuQWU7z3oGGu7u9DH90QnoI3dx9MEQZoYQ3wFMJ08I4rOXAY1VE/mfy4Nxd3WMJpZ7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oNVRjDrDsD88nqmhfv6j1z2w0IA9Adbx6d6gb7rztfw=; b=IiD6bf3FVrSMOLOYzFeSxHEc4CMjKJB7zXsXsYALSBMCy68+ji5Kkh9hRnjP+rjj3BSd/gDwbu4/6el5tdG1M5WNxKd4acDC5ySEie4Mos5hwqs0ouov9bDtoMATlscfCcbvNxBxQzVxn99nl7hby5/5R+HEIZKpOD8h5lJzvNdsshAoCEzVRgPgXQbyaoSLj1n3Z7TdN08JciDFOF0P9Wk1AnbI+i7F9o90h7x4G/BfaJfX8VPDSa0UOGgA8TGKhsiKnn/r4ACEeJp+lrR/vX7m5u5MqWIQBDPj+0MbMGByRvB76MUwUrzCGGL9y6XknW1RUqUsVIREh2hmqxm0Uw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oNVRjDrDsD88nqmhfv6j1z2w0IA9Adbx6d6gb7rztfw=; b=KQAefzdQGx4FGLegkrqYb5kgd/hWAYL28pFqkbYvYNdM0uoWb3hlZbI3s5Ow6bzzCX9rrY9GMX7EzlNw39TBmafqgTxiAKcguS71wQYoW07x1ykEhravvJOf6w0OB1D/bDcdctS//yOgBzeesSg5aH0UzozQWVwtu6wp4PxIwlg= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5911.eurprd08.prod.outlook.com (2603:10a6:20b:292::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.26; Fri, 21 May 2021 17:49:40 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133%8]) with mapi id 15.20.4150.025; Fri, 21 May 2021 17:49:40 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, vsementsov@virtuozzo.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com Subject: [PATCH 1/6] block/block-copy: use write-unchanged for fleecing scheme Date: Fri, 21 May 2021 20:49:20 +0300 Message-Id: <20210521174925.62781-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210521174925.62781-1-vsementsov@virtuozzo.com> References: <20210521174925.62781-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.197] X-ClientProxiedBy: HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.197) by HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.23 via Frontend Transport; Fri, 21 May 2021 17:49:39 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 67232c52-6dce-45ec-bac2-08d91c80cef8 X-MS-TrafficTypeDiagnostic: AS8PR08MB5911: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:125; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FQ587YNvgGIKIte6pzFbFc5hYCCqivmvhzd5+953rpK1/VBYY58FOAV5Mrcr4yvs3YU2faQsu06l9vIEtf048nu9QiEwoqXKP9PKQR5FOdlAn6M1NIQYJz44Ly1NVGdijaLTeS8fAJ34ED0vYicXFg0zThKHGtXoN07zdOkBShAbXm5dqjz/BUWQIB9rdMrPuNUqr5uUzeqpc9G2088sbUk4M9AXIqqulZFj0KDSRVNR+o8xIGQzG9uyRN4ADkLwQ+bM89yIvonuK8+4d269WwFDUmifmkts5N4EYFBa4BeNegnmrYxy0IDqSizKGvIWej2VAuQqAuTMZCkBmyvmPIjh9pDfljJiye1Grn4h3JDZ1EGlEghZQWC1Saqe29cw7JPd4lM3xNTl5JL75U9hQLd2xYGj3JTf3u7ygvO/XF8GQv3TWOy9oE+Kai47Ihny2+WrJvIoAVciInPhFTrj46zbbss90HDkIiHAw2ZsCDCfkvApP/m6st+DLG8csCndprVf4LQSnYmQLjs4b+9sJBqXPZHgwK9Svl752XIyoOUeFTh09c6SwzuIqJfaot7XOG6RcLRh/jDVehTelCxmNjihEpAiWMbZStiaDhxKM7DkOC08BcF2liAeFTigZwcLlELnv1D9kKZA1vH9CJreenkJBbcYgr+fgn30nXWi7Zq401/pCvRzoMi6UioFZyZ5 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(136003)(396003)(376002)(39840400004)(6506007)(38100700002)(38350700002)(6916009)(6666004)(86362001)(52116002)(478600001)(36756003)(316002)(2616005)(956004)(4326008)(8676002)(5660300002)(1076003)(26005)(83380400001)(6512007)(8936002)(66476007)(66946007)(66556008)(186003)(2906002)(16526019)(6486002)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 6mKEDqxruKNy+dMPqF/5+0m6um/B2suZ4BA6KsUhff+GvF7sWiL0liCRW7ixGMLN19d2/RT7MTo4NYkiMssHRsNa/k7JUDa0EjDR6M2aKi6NE/m9ObhbMeON/W5V00iBPury2/HhMIrb4iby9wG3PuK1ORc0gpRAUo8Q9/TerlVSGLYq5CjGdmv5w7XzXwCx7tE1SFS2U5L0pkHNte5HoFKq1N8Ho0Fm9f2puoeYzlCyNOzMyA5kB4PiUWBzb3KzG49XfoPA9klOtH/HgVokKc6Hr38emf6MwRbLqUq4pZsAoaysITiUmEYHhw985wzwaNXKNz3lQ1J5emkHxshkmKuJDyvhR0KMgjMeGPYKeY34q7qzf9QHPrJgRsSIT5+L/22PxMTltPlaWBx3xGEuoSJCPEpCQwkwyd1DFc8d5ypXlidVXm0UG56NrYfca8mRKeBzuR4Bxg+u7Mqrn9/TyVvbsyzEvZ5bn0p50UXLEUi5XG/Eonw5IWcMfasFrhE7P9/zFgWKvbONSYPs8Ez7wOJ1ymLKBGiqligVHdI6G4Q/5TD3gH9LxxW00W1a7gmCu5inaWgDz2RVVYWQjC6393zZBeOgPl5A6s5tvvcgTJZbLMuY85DSc9Mbk99iPYr0MM1UUhv4z6nE6jOTdg9aogSG7WGYuFmMed1uNakgTzyUQwngT17rNj1Tk1fuoZZ4tyzbdudqsOMRYckqwnWHIBDQB4zQI+0yt3akDHIysj8SE94BSgKEgfFbK8ZWaN8wb4su0U5OmgSGe+oXI841hHsuJvXXkEOTYsMqr8Swa0InN0XJTjvkRPDJw9QWBNpFJ7sabRmmriTZZBq1jh1y4SNmtQpiPPxQ5jrYy05HbzaSGYYIGp54ToZc5MB6wuK6MKo9snyCglozVp94cZwqgQzfalGW/thObLsAk8nG7tpQAXC/AsG5oj7JyFWCTa4zUSdBsyC7RCsD/Ovvy3gSK5jP5yyQJEZINhqVouZY1hyYUT1nrvdUFZDiVhTSoQj3lByjVF0QFyAovCACFyOXwZbS5HT9DCuR4zGEPUnSHU3FC4bxAeMl5JN1ReyKSAK+wimQVbKv1iQYSTKRKQuPho6RnoY3M7Y9W9qGTEq0C52dub3hkiLnfVLo6n0ycukhFxF+IZV0WwtXIij7mUHH9vGpWMBy5zlaBHCjHizD99nfYclr4uFBr/cxkRm/m8p3gk3Lm407dEqe9SXUzxhPiNUubKCYqcD5pYJpz+MboGY+18hYSAEHYgh+iJy3AAU+E+0ky1TRf0vldlUeUNsdv4TYv4l25UicIQuDKN2bbwdUUorJ95ZfgupkiYoSKu7W X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 67232c52-6dce-45ec-bac2-08d91c80cef8 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2021 17:49:40.5326 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fJSwhoMq3WVBnMs0xK8Dsi9qjpQob5LHFAJ+l5/n5WCWVCN04JGVguGr+PQjGwv+YuC9rpzGh4fEGVo9qnI1riO28kJmykq1PqkkWMlLY/o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5911 Received-SPF: pass client-ip=40.107.8.131; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" We are going to use fleecing scheme for push-backup, so that copy-before-write filter does copy before write operations to temporary image and backup job copies data from (immutable from backup's point of view) temporary image to actual backup target. For this to work properly, backup job should unshare writes on immutable source node. copy-before-write filter should do write-unchanged operations for this (they are really unchanged, as source is a backing of temporary node). So, let's detect fleecing scheme in block-copy and do write-unchanged operations in this case. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/block-copy.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/block/block-copy.c b/block/block-copy.c index 0a9c3692bf..1a9db5794a 100644 --- a/block/block-copy.c +++ b/block/block-copy.c @@ -418,6 +418,7 @@ static int coroutine_fn block_copy_do_copy(BlockCopyState *s, int ret; int64_t nbytes = MIN(offset + bytes, s->len) - offset; void *bounce_buffer = NULL; + BdrvRequestFlags write_flags = s->write_flags; assert(offset >= 0 && bytes > 0 && INT64_MAX - offset >= bytes); assert(QEMU_IS_ALIGNED(offset, s->cluster_size)); @@ -427,8 +428,15 @@ static int coroutine_fn block_copy_do_copy(BlockCopyState *s, offset + bytes == QEMU_ALIGN_UP(s->len, s->cluster_size)); assert(nbytes < INT_MAX); + /* Detect fleecing scheme */ + if (bdrv_backing_chain_next(s->target->bs) == + bdrv_skip_filters(s->source->bs)) + { + write_flags |= BDRV_REQ_WRITE_UNCHANGED; + } + if (zeroes) { - ret = bdrv_co_pwrite_zeroes(s->target, offset, nbytes, s->write_flags & + ret = bdrv_co_pwrite_zeroes(s->target, offset, nbytes, write_flags & ~BDRV_REQ_WRITE_COMPRESSED); if (ret < 0) { trace_block_copy_write_zeroes_fail(s, offset, ret); @@ -439,7 +447,7 @@ static int coroutine_fn block_copy_do_copy(BlockCopyState *s, if (s->use_copy_range) { ret = bdrv_co_copy_range(s->source, offset, s->target, offset, nbytes, - 0, s->write_flags); + 0, write_flags); if (ret < 0) { trace_block_copy_copy_range_fail(s, offset, ret); s->use_copy_range = false; @@ -485,7 +493,7 @@ static int coroutine_fn block_copy_do_copy(BlockCopyState *s, } ret = bdrv_co_pwrite(s->target, offset, nbytes, bounce_buffer, - s->write_flags); + write_flags); if (ret < 0) { trace_block_copy_write_fail(s, offset, ret); *error_is_read = false; From patchwork Fri May 21 17:49:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 12273479 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F000C47076 for ; Fri, 21 May 2021 17:51:26 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C46316135C for ; Fri, 21 May 2021 17:51:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C46316135C Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:54626 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lk9Iy-00005A-TX for qemu-devel@archiver.kernel.org; Fri, 21 May 2021 13:51:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47578) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HU-0005gu-Lf; Fri, 21 May 2021 13:49:52 -0400 Received: from mail-eopbgr30105.outbound.protection.outlook.com ([40.107.3.105]:26486 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HR-00065R-GV; Fri, 21 May 2021 13:49:52 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DkRq1KEyvrEfHYwi7KDhxAFHyzR0mScsK4IeAlwuLouxKPY0zzjqXqNXfS2Tz5Nh6npbr8MhalgYWFj03/9YmYieAY8nGlv8NG238IbCV/aK6CIHe61HXAz3PqDmDsp+znYazyfWi2RYSjQ7HOooDA0qbRz+922f/IHijcsBHI/yD/5+/ISTy14exO089itNJ3M7qdbDurelpfbLPgPO9tS9O6/ZIy0ZU9X1O/oEO5xVPjovqL5xbY0Rwo8QsF2PdoLFC+rLrNjJUdtW7Tn8g7jFW8ZkGvZ3YEjXgP7QQGNJS6C6qd/ykiICFMl3Y5QACIDr47/ghU9YYfTWbq9RRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6JgL9X/WqGmE35fU0zMf/+FjcQtGghxH1Po1XKoeUYE=; b=V1dz+Zxmc+F8d3abH3B0jRU684Jz9kTuhBWKzC6iBU8KN1YEti+maYmlv7ehTRfRGH2q7g0q2/xRzTdVL8gwOwGsRf36pG1Bpj1bb4RWycPxGF/OrxtGGlpza+0J0IO6mhKu0wnSTLygGNmWr35upVre0Bi7VZZ8e58LKU1B+4Bo6qqH20Cm/M2h2QX1gSG1kLd5Z62+lSoBPwrGQfkOkg9mpv06fg0X1xB5WD52u7ALqoiIJ9iKSAqon8wQ61WhXEe3V62ukW7Mjw8zhtBfTJb4FnKOu14Z7tvY1gI2Mn8lb+rHePs6N8Qax50P+6ZhumDTEEqsnsD2qNcchgLN6g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6JgL9X/WqGmE35fU0zMf/+FjcQtGghxH1Po1XKoeUYE=; b=m5RwKVp//OMJRettpiVZBgzaY+1c0mNQOHoKic19xW2jtKwXSLxnVKGr6BNv9/dLVZ2Tadd9F20plQHTCWD8MRyx7LauFqQq1wIS+23tM1oQwf5Chsyp675Qfn/k1nWG15ZxhSwCRQoI9IsvN2o3iOrGu8sTOxKQHax3NZv1o6U= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5911.eurprd08.prod.outlook.com (2603:10a6:20b:292::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.26; Fri, 21 May 2021 17:49:41 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133%8]) with mapi id 15.20.4150.025; Fri, 21 May 2021 17:49:41 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, vsementsov@virtuozzo.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com Subject: [PATCH 2/6] block/copy-before-write: require BLK_PERM_WRITE_UNCHANGED for fleecing Date: Fri, 21 May 2021 20:49:21 +0300 Message-Id: <20210521174925.62781-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210521174925.62781-1-vsementsov@virtuozzo.com> References: <20210521174925.62781-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.197] X-ClientProxiedBy: HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.197) by HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.23 via Frontend Transport; Fri, 21 May 2021 17:49:40 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 24ce52e7-fe14-49c7-9725-08d91c80cf9b X-MS-TrafficTypeDiagnostic: AS8PR08MB5911: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:31; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: P4vYgVMpQtByf2W37PszazfbmxyhqKL2fas49TVocqEyIlhQq4mAtK6O/93LxTlYuz8088sezoj19YRPMwwdMPjX5fgKWeK1bmO3bn+CUPLKN77CFRU934maKGAaqbyVhrRo4RVh8K9aK+ck5cuRKe6BSaiOoNcXNOfG1HbnxurdjvINIUUvOfM+jpXaFLfi7dXWMk0JQbu2bTmAXhx0+XLz5pmBcY3vMMMTqWSFMh4Srhd1Jtoq0+1erBoPYyxTQQBkZYo0z6XGRxRTpSeKJcS+w/tCzmfG7Tkis7tnKeFoNMybty4hNpmx0UX0oemejecEEw1JoaKUrUOMf7sok+fTi6zn88AjJrxF7sjSoWAjU5rHBzlIxv+XLet85FoODNQ+d74PrtYCbBfkChp1uxIIg8/XBLnWlIlEtNLBza9GRim034G296SAudjef+OTMf8NU3wAYyDK3Qby5HnhgjfvnvYmA6gmQTimEtTPtRQYxh3N59eVxupQEK/RGr+E+5GQ1fhtcc0jsaRY2Bj43V3jSZeTM0u1rA/T9zT589Tk/teKJzVGi6qXVS2G99bEVVTileuN+20OZZePWSH5jVG7IdG7Q8BOzudYzaftDa29ChtMUNpX3Bx1tlEhjodUNxvug/JzfPDjDcDVjduUbZE9Rny/9orKmONzGVQI3QIxLRDCoV/y/qUoK67cyeBv X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(136003)(396003)(376002)(39840400004)(6506007)(38100700002)(38350700002)(6916009)(6666004)(86362001)(52116002)(478600001)(36756003)(316002)(2616005)(956004)(4326008)(8676002)(5660300002)(1076003)(26005)(83380400001)(6512007)(8936002)(66476007)(66946007)(66556008)(186003)(2906002)(16526019)(6486002)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: vizy8y7Pb6TQajEmrpmIv7rax3I7P8TfiViRrjSsWOxuxaMLmmioRnIdC+YRhAxfwcJ5+cbc8OfvD2JP9tcj+USf+uRLr0cqLyZ8QFOq7lMg1Ew9tQQaSQNYf2M0luUfN1LKSWxpQQs2a77cHyZqx/AWObnf15zDxf7OO0v+yw0YUwfwbCxNGLi/CYdpg8t98cblOJhp16sDSh5ZBVTE7OAkYgYQ16VRWINVZr8cJTP1nE/Pwf/djqwxyWPyGam/C2onQOKOrKFMt5qXkkMz2tBOzveIlv28yE2gZTL2pk6HDC6ZGuRVuATCCpWIXZvHcZrAKOZ3maQopLOadnsNbXS5AqQ8YzaaeA5ZnYVWEs+lzY5NfPZ48KUo7iXpth9Q6dtcAsZ5PpmgzEJBoiRj3ToenSQ67AcEUFyvyu8id2M8DOK6Vqrrac0CitdzxaWwVIc64AW9UYyUVl/qJ/y0irOLShzLm2bl8l5C3mAQ6/QPKIFF5fhBPJWMBQEBo0Tf/2dcwkOvd9TK/642Ub9XrhNX5rD/bBiiQ9ONLiPa1rD87twBO8QSwYjHmALbKcJVARruwN3akLyrLGel2j7xHz1PcXCZQ07INPahXT9ILzkE+ksDrLteSJ5ImY0vRvGcSjB3z7aRe4y3vYJA/PN3Tbk8zd3KIvTlN46iXoZjgV1zHhp/twSOmdfltZKOFqoDjpdDXy2VlOqeAbuR1SlRPAC6wni9rHlfyV6mvcuX6MsEMNmqAkb5F8lOblFb79OMcu86F6KYbwT4kIO0lH93H/dvXiGbBy4dy5Se6vnrZi/4//5jomHNoybretmcx8Jd5Cap7v3vW7oC8pkwm6tMCnAKrKnr56RbcvCfiCz4/UluIa7tKtscmWnSBIoPnAbnEHZG+M+Q7JDoigcCy+YeWeitcYe7eqFvEq/uhioVFT4S0huok6qUz9XNDBUHtGIsuOegZbbfzUUULY1wpafOcaz9myg2rffOxAuH2S0n6fag3vhyy2bYFijr7IzbfgW7Ze9u/m53xGbMiBO8qrF6TmYlTHzRcNfGkOki2OaOY+r4U8S8Ulkc8F/qoZcwZ58RqA3W6lwbUJ28lDuFkrCnIOpXDvWD+Lc7vzYPAIcK8Rx1PsT0mjU9WGk0FlHW7dBmzgRpKHWN3418Squw05sPPOV1V2rKcXtXGaucJ+oC/76bcMOhijluclfwQ5rcUpKNiKP5mYLkCbfgxtsSqdfybxQko7zaaeulNCD0UV/p3uGFv4bAe/wM41oTh/xCLfEftMcPBBmwEoogXckMxqkCeO3WWuV4CFlA72c3v6wWMS47g0WYTPL0oak7xGtjUoC+ X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24ce52e7-fe14-49c7-9725-08d91c80cf9b X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2021 17:49:41.5830 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GtAETvTPhrHTo9JnADeMaDhXKF6/CU70kJN9GltJnqFA/aQhwYSYEyj/yl73NDT2Kkf9MFzEPWHmO6GNVg+9Ci9fwHFK5gYu83GXp0+lT70= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5911 Received-SPF: pass client-ip=40.107.3.105; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Now block-copy detects fleecing scheme and do write-unchanged operations if detected. So, let's require appropriate permissions. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/copy-before-write.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/block/copy-before-write.c b/block/copy-before-write.c index 6ed5bce1f1..1b104545bd 100644 --- a/block/copy-before-write.c +++ b/block/copy-before-write.c @@ -113,6 +113,14 @@ static void cbw_refresh_filename(BlockDriverState *bs) bs->file->bs->filename); } +static bool cbw_is_fleecing(BlockDriverState *bs) +{ + BDRVCopyBeforeWriteState *s = bs->opaque; + + return bs->file && s->target && + bdrv_skip_filters(bs) == bdrv_backing_chain_next(s->target->bs); +} + static void cbw_child_perm(BlockDriverState *bs, BdrvChild *c, BdrvChildRole role, BlockReopenQueue *reopen_queue, @@ -129,7 +137,8 @@ static void cbw_child_perm(BlockDriverState *bs, BdrvChild *c, * only upfront. */ *nshared = BLK_PERM_ALL & ~BLK_PERM_RESIZE; - *nperm = BLK_PERM_WRITE; + *nperm = + cbw_is_fleecing(bs) ? BLK_PERM_WRITE_UNCHANGED : BLK_PERM_WRITE; } else { /* Source child */ bdrv_default_perms(bs, c, role, reopen_queue, From patchwork Fri May 21 17:49:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 12273535 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DD334C4707A for ; Fri, 21 May 2021 17:55:02 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 66F54608FE for ; Fri, 21 May 2021 17:55:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 66F54608FE Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:37958 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lk9MT-00081i-GD for qemu-devel@archiver.kernel.org; Fri, 21 May 2021 13:55:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HW-0005iJ-8t; Fri, 21 May 2021 13:49:54 -0400 Received: from mail-eopbgr80131.outbound.protection.outlook.com ([40.107.8.131]:27182 helo=EUR04-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HS-000645-Ri; Fri, 21 May 2021 13:49:53 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RT91Y5xwe7ZHVxkA84vxvf3x0jker3hxQSNP3QZli4tJ+OaJIsXWMg6LzSfAyM7r/CVqd6qBO72rv88zPh0mNYJv9xxzjS16Sk4L4GuG9K9PGvIOI4i6XR2OZJ/fKs47OYXxlZz5iG0ZftfjL9s1ZBZq0nFeMpMHbkVVaIKjCKtsKgqDzYfx6wV/yONnNtmCIX0ntwbv08SucAi+uBnKX6hiqY8fWvnc1JT2n28oUxWknYGNXlel1J8IsPpIGSnSzzjAIgJUEfPk1aJrSa9/m+PgmHLdAFCfrmMsplNjhYLxQPpkADdV7xOZI3QknVOLgnFi/zUqa/IYDKd22pYtvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sxcCg79ZmiqHPfn0nCt2eDBVCitSrAUSW9e/jJ0L55w=; b=mrV26ASXWKES6L04HPrsrQLpbnqmtfMzDBk/wnR8W9SKSzlQ8+KjmgYZmO/wu8WuzNa7vDKPwxf26TXURtEnihmPbbBUXxQ7AomRnGGHXDUwtomD7IekyQIPB/T4sl37zoVK8E5LmfWL3CoqoJ6f9nY2Krs8uc+slNu3j5DNkufqsWmajSWLuc5dNzt+W/EQZDWgC190jhPgnCaKz5byGoMBBocP6+cIU7emt0WYj8sBMfpve0uAY3oLuF3mEgrM31wdakEcpHMt4sD8+6ASu573VEWC8vrly3aj6WUUitBiWqhF7I925qa9RwR8bPsvogujVLLYBiqpxG1nmohAlA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sxcCg79ZmiqHPfn0nCt2eDBVCitSrAUSW9e/jJ0L55w=; b=Fi/yedrHgkGWunF2/79g2YyuLrM3PHAK8Avz+1A2JvGW46g5SY7G2XTkQSRd409aqh3GJmMyqekpDeakbrsyqkv2j6qYIpG5jWNvqhtnK1qlzPojejN01fTzZpDivby1+FtneWyGrLB2ICrXylfgnW5YAk44Wvp3xcZOUD6LxXM= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5911.eurprd08.prod.outlook.com (2603:10a6:20b:292::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.26; Fri, 21 May 2021 17:49:42 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133%8]) with mapi id 15.20.4150.025; Fri, 21 May 2021 17:49:42 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, vsementsov@virtuozzo.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com Subject: [PATCH 3/6] block: share writes on backing child of fleecing node Date: Fri, 21 May 2021 20:49:22 +0300 Message-Id: <20210521174925.62781-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210521174925.62781-1-vsementsov@virtuozzo.com> References: <20210521174925.62781-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.197] X-ClientProxiedBy: HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.197) by HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.23 via Frontend Transport; Fri, 21 May 2021 17:49:41 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 968fce33-3d97-4323-9ce8-08d91c80d02b X-MS-TrafficTypeDiagnostic: AS8PR08MB5911: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:159; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HutEyuE7f8gko5UrWbgJBBI0dMJ5sH8ca6zzcmlWQVNMj9qiWJY7LXAiumKRcuM6J40nR185iUOjkc/adzAUbYIT/GZJ1SljG3HLjGubv8/p72eBXnZIurDCK9wwdUe5yvefEVxmaMyUCxetFTKDBAyyCiiwmBCrotD5WbyfBasi83ALT8Uble3UVOvW5peqAQTo6Q4JOvYQ3IABiNSaE8IF9zTHqdvqLn2XZz0wEZ7eFcAHYNe50IfuDZzFHuWOWYDfOtRDt4VYR2CtUZJCf+f/HSfyLHWEzf7trQsG69aik9/pu7wxbO2zMKC6RZSFGaElqANGELlb+xsDCp/HiFX1n0ZurSfky2S5CLO6SKuGfYMc/5Ds9vHRI35RTLypLy1/eReMAvseG4RXIfUmmi2xUsB3dO/OIlaRXPvwdyQkQwqAzkVbMXlf9XTV1ID+i6UIaHk9YKJXI4pi05yuFjx40GJ3R/qpOZiU4WgXOSWWzDnsPoxm486rNjCIoLGOGaztr1BvZUY3G58QV/Uymv/ZUz2iltTRJ2RbQc3w+n9neK10y4EMluZmT8uf5rpmccFhi5pVU2fAiEVqsMeDmPbg8FCEYG+L/nZ1GyHw/73WVWx5isK/loWr3iEHNAUR2HQrAltxuwONmE7UPMeObT3GGcURM+v7pkjIhJRxMb+CH6FM69Qo2+G43H2HnIy8 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(136003)(396003)(376002)(39840400004)(6506007)(38100700002)(38350700002)(6916009)(6666004)(86362001)(52116002)(478600001)(36756003)(316002)(2616005)(956004)(4326008)(8676002)(5660300002)(1076003)(26005)(83380400001)(6512007)(8936002)(66476007)(66946007)(66556008)(186003)(2906002)(16526019)(6486002)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: CENN+CfjgHNndNMgAR4LwsgjmDOHmCiGGo4nIkQx8wZ3bc2CqKlpugm599bmUxATNVimrWYxVFmi10Xa50OPEaN2nV4mVkb2akI6J7mL5FZzhgnHnruhEET0kzFF5XF/QB9nw1nirFWGEPeHtP+8pj/Tg772w/2zRKwUlwE+MPCjFi9QqfjdOZb3fMMkGGQDpd0GUJZvGHsKly/dB4dhIx5Vpr9IxEjkCkeiQ43dlpFlZdvc/HhowQl+2H3Nyl79tp+eTwcQaZJi9o6RZS3FNchuo6C17HcXgAdV/dcyeo8f+kCqG8OYxLsVD4JCzBWBNuF9pjGAV9C55DV0nDBBwvzPVfUjmTxzQuGzheWes6/8CVSenUdUskrzVpsYxpasR3RzXzDZdgriJugy6o0goQXm1L2TRriVqBfXAsXICqPT14xjyJo7mI1tynD+CWVupJscu2eorKiKL3xeYM3r9hebzEfBhdCFwrjj5anILcwKUyhfSSwp+Yzl9G9NCi/k7TGR/Z2KyeY9qXSh66vxk8oOTk7lDRqB2gI4WB0482SdkbYIPcbn80NUc7GVRpqmP0o8kGGhjevOllF2++6LeC7REtP+HNCEIHS09fmyN6jUpJ+PN8/agOsftqrz7TVQpXmv+PtC6rMBuQv81AyRPFmcddrwYq7FO0Vo9R1XIYLzfWcKQ5Tq5hKHFPK7mc/K0mfK4CCrBfP04hDrsM76eeBEaXxIQbIiL/yiUHNZJMKHOd8H8ZsBZckBChEw50ztm9Cb4VWiT8k5onqNELxHV+OBpw5KbTqYnIm0C/6JTXiipOdV6d5isi3ZCpu69lVgtj7bA9WJ1MXGlp6Yk59kwBqpPzmcYP2PKkK31d1O5jCmwUlYzSimEaKFANFxRiuDi7cddNWxHFF4OU47FVWXnMa8A9fl/TFT2CCBM7OwculU3ktW6Ejw+tATiCq7yt39et7lixqWbK4BRKqz/0NLlbQZjDR7oZVrTNK4V5L+RHwbLe13J8t6IlIaZ5OYuAjpxHhsKO952ViZnPNl4w6jjkVuqziTcNgQIsOrmn6Yjmq2Ox2TU/8FfouIgQ4mri8rNIdFrV+x0eV7BAhu9d4cDbXlXyATvghMkSG9mdQKUmVo/xgsfleouwgtzNSTHCMS0+xKFKytGjY5EYJ47CiyurSzmEaqHIib4qyiEHYkovivm+oSRsxlCjrrZNOnOjAIfDZ3UF52xzKzYZI09oRxQQufxh0Aavplzji6HOjCdaBOBnVPDuspN79xROGrUdGZkUUlH5NH+Oinx3IQQT4RdG2u2MIkG1L7fUnFvXONVFBgZ+2iBTLAIh2RpscG/AAl X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 968fce33-3d97-4323-9ce8-08d91c80d02b X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2021 17:49:42.4751 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8ihx7IIDl4lV+I9wvZ3dCSjOxWDp/d1pqyxdSQ/WCVWzb93fkZzmLJK8LXrJARCAbHq2bjuOHHOqmZRwow5ctOYU/YK2Qt3/iQxpgapFtMA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5911 Received-SPF: pass client-ip=40.107.8.131; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" By default, we share writes on backing child only if our parents share write permission on us. Still, with fleecing scheme we want to be able to unshare writes on fleecing node, which is a kind of immutable snapshot (copy-before-write operations are write-unchanged). So, let's detect fleecing node and share writes on its backing child. (we should share them, otherwise copy-before-write filter can't write to its file child). With fleecing scheme we are sure, that writes to backing child goes through copy-before-write filter, so we are safe to share them. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/copy-before-write.h | 1 + block.c | 3 ++- block/copy-before-write.c | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/block/copy-before-write.h b/block/copy-before-write.h index b386fd8f01..ca47af732a 100644 --- a/block/copy-before-write.h +++ b/block/copy-before-write.h @@ -36,5 +36,6 @@ BlockDriverState *bdrv_cbw_append(BlockDriverState *source, BlockCopyState **bcs, Error **errp); void bdrv_cbw_drop(BlockDriverState *bs); +bool bdrv_is_fleecing_node(BlockDriverState *bs); #endif /* COPY_BEFORE_WRITE_H */ diff --git a/block.c b/block.c index 39a5d4be90..c03810e8fa 100644 --- a/block.c +++ b/block.c @@ -50,6 +50,7 @@ #include "qemu/cutils.h" #include "qemu/id.h" #include "block/coroutines.h" +#include "block/copy-before-write.h" #ifdef CONFIG_BSD #include @@ -2502,7 +2503,7 @@ static void bdrv_default_perms_for_cow(BlockDriverState *bs, BdrvChild *c, * writable and resizable backing file. * TODO Require !(perm & BLK_PERM_CONSISTENT_READ), too? */ - if (shared & BLK_PERM_WRITE) { + if (shared & BLK_PERM_WRITE || bdrv_is_fleecing_node(bs)) { shared = BLK_PERM_WRITE | BLK_PERM_RESIZE; } else { shared = 0; diff --git a/block/copy-before-write.c b/block/copy-before-write.c index 1b104545bd..88c9bb0a91 100644 --- a/block/copy-before-write.c +++ b/block/copy-before-write.c @@ -269,6 +269,43 @@ void bdrv_cbw_drop(BlockDriverState *bs) bdrv_unref(bs); } +/* + * Detect is bs a fleecing node in some fleecing sceheme like: + * + * copy-before-write -- target --> fleecing-node + * | | + * | file | backing + * active-node <--------------------- + * + * In this case, fleecing-node can (and should) safely share writes on its + * backing child. + */ +bool bdrv_is_fleecing_node(BlockDriverState *bs) +{ + BdrvChild *parent; + BlockDriverState *parent_bs; + BDRVCopyBeforeWriteState *s; + + QLIST_FOREACH(parent, &bs->parents, next_parent) { + if (parent->klass != &child_of_bds) { + continue; + } + + parent_bs = parent->opaque; + if (parent_bs->drv != &bdrv_cbw_filter) { + continue; + } + + s = parent_bs->opaque; + + if (s->target->bs == bs && cbw_is_fleecing(parent_bs)) { + return true; + } + } + + return false; +} + static void cbw_init(void) { bdrv_register(&bdrv_cbw_filter); From patchwork Fri May 21 17:49:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 12273481 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EF1D0C4707A for ; Fri, 21 May 2021 17:51:41 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8DD9D613AD for ; Fri, 21 May 2021 17:51:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8DD9D613AD Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:55936 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lk9JE-0000yv-Ik for qemu-devel@archiver.kernel.org; Fri, 21 May 2021 13:51:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47598) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HY-0005jU-I7; Fri, 21 May 2021 13:49:58 -0400 Received: from mail-eopbgr30105.outbound.protection.outlook.com ([40.107.3.105]:26486 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HV-00065R-PA; Fri, 21 May 2021 13:49:56 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gDB/EG90xHdUamd8XkE90NvJs9pyhO6tALhVEaouUgU6xCXTN3J9TgoaWgcXPL5Fbpe1rBNDMpqPxPqa1a6NK2+HsRBRpnwa3RrS8yPBxVtURvwq+YmXT/FqmES4KhOx+6BsNkcm96doId+MHJ45R8CsrFbjyc8SbRMlX5xjuTmpKcKY6r4p4o8aK2Z/MTMkQXBL5hlp2jk6Jl/N30fNefL7FKluVAyb5AkpwBASzNdW+IhWoT2eXZZvhfe96lQAQhx0Wau4dByH0SDGwPBSf3c58HmOxY7sbAY0wFPU2Vd/6IUXjgpEzsoZkfUY1HoXLVnzG802Rdkme0c2ngGq6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FsM8UA1xqmsIsKc3h+9eoRECzg0XMMTjb+xgRtuBDa8=; b=c6aB/GqjSQBEw6EoT+cb5/ncsbtPijtYcD0YAm95EsNJCs28x6PGk9sdUsZUVCMAzLs/nJQN5/wtKzPuxgiAbTrowD5WwmU1N2skEFQp6uxQwoko24ataX8WSq0Mlfv+rs5e938FPzfGvo0GIBIGZRY9JljA4C5z8Y8b9BQ7DKrI+OJIaJyrRUiPWNTa2YftDztJUHHgt18PMItn1AcnmYfgZ2NCHdjXHvKO1pSn2R0ESFVtrrAC6QMR6DJMX39+EhuSfaCk/jgO79ko34u2OE4o/g295zNS06uJTBwhTcHnijlVbGvHXUO8Ty7nkjEiLH6Z4sTrsDWPDclGC/oFkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FsM8UA1xqmsIsKc3h+9eoRECzg0XMMTjb+xgRtuBDa8=; b=syb0DLcYqf3eH8TddErwel8vz5+vOWug6AY+TTvKLqfGnDDY8hsdDQUGW8MzJBjGeyRcqqrK0jpmdYt4ARyu/VvrL2C9RdYLJcXD5XwyG62uiEqW7CvJHTuDPc7R0bC9j9hDYTWutklSbLvjVxluaFuqW4biRpDp3nlNAUvEIOk= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5911.eurprd08.prod.outlook.com (2603:10a6:20b:292::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.26; Fri, 21 May 2021 17:49:43 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133%8]) with mapi id 15.20.4150.025; Fri, 21 May 2021 17:49:43 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, vsementsov@virtuozzo.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com Subject: [PATCH 4/6] block: blk_root(): return non-const pointer Date: Fri, 21 May 2021 20:49:23 +0300 Message-Id: <20210521174925.62781-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210521174925.62781-1-vsementsov@virtuozzo.com> References: <20210521174925.62781-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.197] X-ClientProxiedBy: HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.197) by HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.23 via Frontend Transport; Fri, 21 May 2021 17:49:42 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c638a32e-2514-412a-c61a-08d91c80d0b6 X-MS-TrafficTypeDiagnostic: AS8PR08MB5911: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4125; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DeDEqWXr0pPgA+1/NXf+YL6dNzsjLPEgiKUeRaJXWxVDkg/BFrC0qjOq0ieVetws+M04Gc/S7YzEHkp8PT96tonO3xAQeDou9r+beufiw4reBTwe/lDmbj4eOeyLX2osvHhCu9WzJBtpRc1tMjfcti8kWCX1bucrR3NADBzRQpgNJvFgXMvUFcRYGsJ9MjRaTa6nTCbuZotfT/YklIlmEtYUy7ZlI32brg77xvgFeXdXI9/EdxLtoOSl1hPKUs/YdiiwB0x6Ff+7my1rDkZPT6TWLe7yTqXMrojTb+PmtNKsW47Kxw4X+jkL0KDdLTe2YEhxaIAlM2gtd+aJwapcHmfI5Dvgnla6I8YqbT4zHUf8uR8v4XCQLUYtUdmm2bsjjSwOXgx2oD9x2G/0jGuV1w+qAErsfHgYmovjiriLSFZkO7O8MslL4rFWaX8x7BB5nkxQyA69iF2GWXZnLA+YtC6V43Krbq8MooyVJvW2vi7SXKrZ0qF/CeCdTFp6PfcRNrYsaGsLWNJ8k0x+aMilOj3sk23rwCg2rdeoV/3GOikEFPlejAw2LSaDCTegydb2OzjUIrZSqjBMBSK7StPLiQp3YHHzob2LMzmb2Q+LD90lHvJ39N8Lbvqkk8jD9inYinsJzAj0njjsMLp3tpdR56L8HVRIjFPj8tkXtnmxi8VqdH/w+w0bixy/I+ymOJt/ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(136003)(396003)(376002)(39840400004)(6506007)(38100700002)(38350700002)(6916009)(6666004)(86362001)(52116002)(478600001)(36756003)(316002)(2616005)(956004)(4326008)(8676002)(5660300002)(1076003)(26005)(83380400001)(6512007)(8936002)(66476007)(66946007)(66556008)(186003)(2906002)(16526019)(6486002)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: t8rSEkR4XyZ/ANpwjwonByebzLUW2tgb2yQJ1nTFPHXZGlrorjjX1mq4mApf9Ohaeh/FMxhrE+4w3xNjih302upNTYmcYU4oLZ9Z4I7HlqAolztKvon+JWUFbqmhPOiHu2C1T2PqBXBLKVt5d0Zv+1MWM3KDPLPI+ru8fBGgWn/vaF1E9ESarykhFp7FNb8GIy+A/U/pWverj3kfFA2qCwHO2c41BIaCwPmHpAlivBwOxI7jGTqCy/5nDcHs4vAZQvvGsNMTwyUSxVLRBIgb5zw/boizka3yLu1kSFJtGHD9s1BYMik4pgUdHr+m+2ePjov1LkH7HZ1W16Bk2UILVbepHC0qOKxdDjav2NVMK5rYRqO7uYI78mHlulLDRnMVE8qVVqcmG1ni0Fi4g1wlIqVvUOEzTAAc9bB6kH2x5o2TLHj6PIi4XoBNsANTHqMclMSTAiG6w1NRfkvLIghYh19ZiwUq0SKgfAMFJJZn3e4ay31uZx0+5xDEmRuRvvs12a2OOquFm5VZ5eiX16j0IzgWrejevtvf8DD5X6/7M7c0aIM4oFzo13kgzHwfREXzrn/sCmLEKppS6NSj+//8rM5A70WmW5teSIQNvBfIBMTl413yxVpqOKKgH10XfpQsatNDVFKl7IFqKmwCaRyF+rca0suudcataKxGjGftd1M1NMnfO6sSWmIpM9RypDE0Z42YYQMVIEYn82t9YqjkgUj5oLFJwqik1DmtvYbk7dOUWuWVmcclu2Oy6geWVurdnVHG2iVa15OTNqF+T5TTXwZ5AFF4+55gVnLXKNoeAKa9awFq5EWkhuUOJtrcnzeePalU6raA+ZZw/m7N0/degRjq33Ikn7d9KG2BQa5WGKLwvE7QUuB1+9hY4N7rU9IweLQtNmdxLHMjmtsZqqBl7ehM73U6I+hFLULP7x1f6REujHSgVAMIi2eMfll6ZhS5JJCakcInbVgRO9TdgY6FV/rJG+OKfKMO+utW6RKoFqd16NA8XCmt2KxltvEAHGWaralwbgdORRx0H/WZ62VH8B8JEDiDtMW/yLsbK0Gj+JmI39n5o0uWwfN1oYTYSUIIFO+6iXKBIXyOe9Bjpa3avD/PNtDv/38fTrzAoWKDcYuYn6VXK8GcVpaexf6N/4sog75+V3gMlqGluHAy4udGxo4NWKHvIQBhVtgh1EB4n7gk3X0sZMMH3Ja55gUUb1H2mJacqJtt0NXyYa85mikSihHJ2Ju6STDyHItH+6jnAS0O2Sm3cY+WBDl7PKWMnUvjTLscspx2KYCXuBIjqy66uJ61wroXi+MGOCnG391RZ7wdGWfMMl9YtLkGteKn6Wa+ X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: c638a32e-2514-412a-c61a-08d91c80d0b6 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2021 17:49:43.4199 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /Ev0XEgCs0VsVuUf9RRbhX1JtB5EQTuDoQ9AZE8P+/94CBQ0S/i3/W2CQOkLx+q9LDssnmWtPQ7lNm1K6ybcId+9y3CkyksntLUzBnla92w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5911 Received-SPF: pass client-ip=40.107.3.105; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" In the following patch we'll want to pass blk children to block-copy. Const pointers are not enough. So, return non const pointer from blk_root(). Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/sysemu/block-backend.h | 2 +- block/block-backend.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h index aec05ef0a0..9c755c38b1 100644 --- a/include/sysemu/block-backend.h +++ b/include/sysemu/block-backend.h @@ -266,7 +266,7 @@ int coroutine_fn blk_co_copy_range(BlockBackend *blk_in, int64_t off_in, int bytes, BdrvRequestFlags read_flags, BdrvRequestFlags write_flags); -const BdrvChild *blk_root(BlockBackend *blk); +BdrvChild *blk_root(BlockBackend *blk); int blk_make_empty(BlockBackend *blk, Error **errp); diff --git a/block/block-backend.c b/block/block-backend.c index b1abc6f3e6..758cd8507e 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -2452,7 +2452,7 @@ int coroutine_fn blk_co_copy_range(BlockBackend *blk_in, int64_t off_in, bytes, read_flags, write_flags); } -const BdrvChild *blk_root(BlockBackend *blk) +BdrvChild *blk_root(BlockBackend *blk) { return blk->root; } From patchwork Fri May 21 17:49:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 12273537 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2965C47076 for ; Fri, 21 May 2021 17:56:46 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 27E166138C for ; Fri, 21 May 2021 17:56:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 27E166138C Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:42172 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lk9O7-0002a9-Nt for qemu-devel@archiver.kernel.org; Fri, 21 May 2021 13:56:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47614) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9Ha-0005jZ-41; Fri, 21 May 2021 13:50:01 -0400 Received: from mail-eopbgr80131.outbound.protection.outlook.com ([40.107.8.131]:27182 helo=EUR04-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HW-000645-V8; Fri, 21 May 2021 13:49:57 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mco/W3N5YewOIr6qSkv0BcwDJFcatkTRSCR/+aVw1ooaZv4c4y7h4gVHKjTQEswhROhKW3A7JqS8Ow1J1gMm0F6+NoYNXK2dDk1sAYJLmQtJtINinz7ut/ThmwlW49+QOhgk9wD4+Fp9xtYWW/Ps6Yw2pgBRDmW4zFwgB2VLwgAAE3WH+SdE5VpUgGxUVacnqGp3RfBx9plP0UOM/0veyJ3RyangD8njYqq0Uja5/BK90x6OkP4bHBDloogRjXW6MdzKGnEUk9T9zTokUZ6M+K7p31g2ln7DbqNI9BE0xorUoTt8GV+XdKWB94ukpsxTUrDRrfVoFud+zFjd0lIX9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W32qR0dU/jtVjexo7afbVzfkcTtP+AtZAWb3b6pwLDg=; b=eDlGLsIrT70tjhMqIaholItPSCtn8eud4Z1MeIS5nZ9FUGFdQ2hrviGWLp06AXp39dmm1r2LJHpDOTkEOFZShNDIMGLVZaSxRadzMjuubat32sgD2roPqVZqaaZuw1AntfzScKcl7Bj7pQeE0tEEoZN3fyKW/hR8jUx9dE1/h/khBUB2LIjVtfugqkTI6Ge4VdofcJV5xekwP96Ud/aHuBywT4ZrP/pClQeFNvtzf7uU6gYb+s6hFUkrgR6UVz8FSRBgxzTHzTsKkFy655hCbXUqnLngteDuVmta175gw9c+IuOTNnm1GCD8/1gS6j7/67z/E5JqTFCKQzH0XMfmWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W32qR0dU/jtVjexo7afbVzfkcTtP+AtZAWb3b6pwLDg=; b=osZTuAA4I2OtBYFeGPsABiD7FSROz+d2SJ8NQqCdcrdY/YGSxMUlOeD8vlQg6YWPsIrxRe6C3LJgAcqXvzOSopLwnWW91Lh3Y8/KFUeH23LrA8Vu1YUORyra/uxuiop3lBJOi+/x0blBFxukm5zMkmZ6ulZHHj1o4740Is/9YQw= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5911.eurprd08.prod.outlook.com (2603:10a6:20b:292::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.26; Fri, 21 May 2021 17:49:44 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133%8]) with mapi id 15.20.4150.025; Fri, 21 May 2021 17:49:44 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, vsementsov@virtuozzo.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com Subject: [PATCH 5/6] block/backup: don't insert filter if no writers Date: Fri, 21 May 2021 20:49:24 +0300 Message-Id: <20210521174925.62781-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210521174925.62781-1-vsementsov@virtuozzo.com> References: <20210521174925.62781-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.197] X-ClientProxiedBy: HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.197) by HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.23 via Frontend Transport; Fri, 21 May 2021 17:49:43 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d7869ac0-018e-454e-e8d1-08d91c80d143 X-MS-TrafficTypeDiagnostic: AS8PR08MB5911: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:561; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CMLwe1Ck3Ti1mjZASZQ1W3hLkHIw4kfYHF7QlJFyYlx5dvHkfNpVkhK/qRyGuKzkcaudSE9NcMNFX1L+b+Ra0Vjs1RFA9uP+z/gvJwWYh6rByXGnTLNMltczyIAoKUvh1tuit/Dz9hq2aKrwD+Xb8Zj9lKRD8PXm7cbBR1z5+pBAmo4aw+8mEa23wDgN5eeTRmPHj3dkovr80fBCxXc1a3u7k3K94rwQXc6nTz3HLP8RZDZxunQoyB+Ow1UM7TUIr1Gw9wTf+QkI/TFhxxaFEmn9T9n0Hl0LwbaAXF+KafCYEXeebnN/74TJEgKJM5KA0F0NYewAd+fROmezTTycQ0sBJb4PohKNwW6wP4LUZJ5KB2WNvHSEofb16QO9aIs5CAgX8OvQxbNoEPwfrGD1rRf3fNBd4mjYLQK9/n50O7Fi5p50CTnIf9lyPVRwExmvAkiQKubsP+OI1kuml7k6/RfZYEvgdQRdZhH9qXM6rOy3HKEhre+tGDac+P4XgtKDeShM/KT0YHBqEvAZGGxB+cS8YkzMZyFaiMfa9RPE3zd2W/Ti7C3ECbRmUHVgnnNwbxz0z/NVj6d2Vvi6QP1loqskDP1F0VFK5R7ZcqsV9GB8jQMRWnD68MB8FTzydoe3Or6HNDRDcQihox799CaarHfV1GSicTfYMLA0Xv5M3Rxqsi6cSOFTsy6b/qLR0scE X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(136003)(396003)(376002)(39840400004)(6506007)(38100700002)(38350700002)(6916009)(6666004)(86362001)(52116002)(478600001)(36756003)(316002)(2616005)(956004)(4326008)(8676002)(5660300002)(1076003)(26005)(83380400001)(6512007)(8936002)(66476007)(66946007)(66556008)(186003)(2906002)(16526019)(6486002)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: rDCcPSjUx/pn0pCepSERc1fDF1Py+JruQLFSydxPsRv7LBiqbAglHeTD7yNcgqOm039+OYvwvu/YXepAgY/XJxIOY+xucuIf5+K+kFvU8xXkEGaXEAsDX+oSaeL8GS0ABplgXrhn8Q1QNJNEksr3uN+/KCHUTtbg4rkv+7ni+qkualG5tARXzVD6dIybfZeg58L9CR03zk2Ac59DLCdCZlL6ZepfkQ5Itm197FLN7E1+yqELsqPmiKst+F5h6aok+zs5xOo7DKVlN4h7zNO+3eLdwtRqZSLg6rjVrm9ShMktAfizyMIiRkoSxNs9IvGhz5xI8E7gj8OOo24FLwMd7YA38ZuSG+h0FEK+wcJUesKk89N89S6uXwUeTCAIQ4KQQvOPWHd+rSF7vQKhsVOTc/sLNhiEMw9J6AsEKdL5C3fnvAjfdGfUqIVD43sAT0jlrOVq+r9BtbQRZ7oxUMHB0lba7QlOH9pHPMVQKkJ4mUjh2UZuxwEQCkr4nXbopajByQhCTKmviApQu/K7ELyRO4vvPkKIqUICjtN+djGnd1dR1uUUj2FDjEM6oT7rsnvqLugmFwDB2nrBhdWtGGuyMneEhWLWs5KTwzqbh2t1tVpojrn2Tx3ltPRfZxy3EMCCOo099XCr1RqEkLmj8MQhjuIcbpOFp+79rsIlhlTu9gUylfC8uT2L60Kx2vG83RTc9mELOZkoLaWNO6GirTxTLCPDXxYlWfoz9LNAaXIve3zvzuHcBxiLM9TR0GnRD6yYuTQ6AcJNFy0Q8aI/T4eI+DjulL9i2epzE+o54TY7eMSgCHr5CxLV7de5ulvNpx9nQSV+YbZTEyv+tVr05/kbgbQBoqJyNOnrh5SQcE5tCFTs5sf6+W65cV8DBGtUc5wftNGdlOsYvjmRkFfi8Pc4LVwhEtoNqXZlPfWZ8Ul8hR+jRau++Ts9Y2k6jazqqn2M8gYnA5e9+Oo+9OTAEWLFqXh26GqaBFQ/87nz72/mDJmjWlAc/BNhkMa4vN85Id4LSZUAW7djnJlvOs/nV1x7imr8AKW38byeeuxXNQ2Kn1lTaGr771h2st7d24uS6s7K3H5hqJvAXgABsqLcVnYLm5g/IZMpwGp5+zkelB0w47imeow/S0UmPKKVnYdMpkn8fzAw9L+p/xpmNey+Ml6772cHnQ4KYXwV4xYUnpyeDZEVbwucTojZEt01bEw80cdm1yO8IHjP+iKWbHb/SPQkvuGNr/n6H1kL3sqthNgjimuMkpkuS5mEnO3XfRx0/Qc0c44zUDSbmoED0/F0g1f8BRhM3RVLzKNH5JLQfv2Oi2usESTn85ocZRqIaRH8v1GJ X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d7869ac0-018e-454e-e8d1-08d91c80d143 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2021 17:49:44.3419 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ht8/BuzdvU2qJp25D8iKBk1Z6qT3TXMwN7x7RFnOR62TGdhCws0BVmvwO7DzUOJHxVoWYZeHLM9nqw0rh49+UaB5QUyRK3xn7bFSmcvTO0c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5911 Received-SPF: pass client-ip=40.107.8.131; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" If source is immutable and there no writers on it, we don't need to insert a filter, so let's detect it and use simple blk's for block-copy. Note, that it's possible, that user will try to add writers on source during backup. It will fail, as our source blk doesn't share write. In future we can add a tri-state source-mode parameter for backup job with the following values: immutable: got without filter. blockdev-backup command fails if there are writers on source. Adding writers during backup will fail. filtered: insert filter unconditionally. Writers are supported on start. User may add new writers above copy-before-write filter during backup [current behavior] auto: go "immutable" if there no writers on start, go "filtered" otherwise And "auto" would be a default behavior. For now, let's just change a default behavior to not create extra filter when it's not necessary. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/backup.c | 55 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/block/backup.c b/block/backup.c index 14652ac98a..e856e4ad73 100644 --- a/block/backup.c +++ b/block/backup.c @@ -34,6 +34,8 @@ typedef struct BackupBlockJob { BlockDriverState *cbw; BlockDriverState *source_bs; BlockDriverState *target_bs; + BlockBackend *source_blk; + BlockBackend *target_blk; BdrvDirtyBitmap *sync_bitmap; @@ -102,7 +104,17 @@ static void backup_clean(Job *job) { BackupBlockJob *s = container_of(job, BackupBlockJob, common.job); block_job_remove_all_bdrv(&s->common); - bdrv_cbw_drop(s->cbw); + if (s->cbw) { + assert(!s->source_blk && !s->target_blk); + bdrv_cbw_drop(s->cbw); + } else { + block_copy_state_free(s->bcs); + s->bcs = NULL; + blk_unref(s->source_blk); + s->source_blk = NULL; + blk_unref(s->target_blk); + s->target_blk = NULL; + } } void backup_do_checkpoint(BlockJob *job, Error **errp) @@ -368,6 +380,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, int64_t cluster_size; BlockDriverState *cbw = NULL; BlockCopyState *bcs = NULL; + BlockBackend *source_blk = NULL, *target_blk = NULL; assert(bs); assert(target); @@ -450,9 +463,37 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, goto error; } - cbw = bdrv_cbw_append(bs, target, filter_node_name, compress, &bcs, errp); - if (!cbw) { - goto error; + source_blk = blk_new_with_bs(bs, BLK_PERM_CONSISTENT_READ, + BLK_PERM_WRITE_UNCHANGED | + BLK_PERM_CONSISTENT_READ, NULL); + if (source_blk) { + BdrvDirtyBitmap *copy_bitmap; + + target_blk = blk_new_with_bs(target, BLK_PERM_WRITE, + BLK_PERM_CONSISTENT_READ, errp); + if (!target_blk) { + goto error; + } + + bcs = block_copy_state_new(blk_root(source_blk), blk_root(target_blk), + false, compress, errp); + if (!bcs) { + goto error; + } + + /* + * initalize bitmap in a way copy-before-write filter do it, to have + * same code path later. + */ + copy_bitmap = block_copy_dirty_bitmap(bcs); + bdrv_set_dirty_bitmap(copy_bitmap, 0, + bdrv_dirty_bitmap_size(copy_bitmap)); + } else { + cbw = bdrv_cbw_append(bs, target, filter_node_name, compress, &bcs, + errp); + if (!cbw) { + goto error; + } } cluster_size = block_copy_cluster_size(bcs); @@ -464,7 +505,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, } /* job->len is fixed, so we can't allow resize */ - job = block_job_create(job_id, &backup_job_driver, txn, cbw, + job = block_job_create(job_id, &backup_job_driver, txn, cbw ?: bs, 0, BLK_PERM_ALL, speed, creation_flags, cb, opaque, errp); if (!job) { @@ -474,6 +515,8 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, job->cbw = cbw; job->source_bs = bs; job->target_bs = target; + job->source_blk = source_blk; + job->target_blk = target_blk; job->on_source_error = on_source_error; job->on_target_error = on_target_error; job->sync_mode = sync_mode; @@ -500,6 +543,8 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, if (cbw) { bdrv_cbw_drop(cbw); } + blk_unref(source_blk); + blk_unref(target_blk); return NULL; } From patchwork Fri May 21 17:49:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 12273533 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71E8BC47076 for ; Fri, 21 May 2021 17:53:38 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C6D0A608FE for ; Fri, 21 May 2021 17:53:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C6D0A608FE Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:34580 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lk9L6-0005jT-Vt for qemu-devel@archiver.kernel.org; Fri, 21 May 2021 13:53:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47620) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9Ha-0005jb-Uq; Fri, 21 May 2021 13:50:01 -0400 Received: from mail-eopbgr30105.outbound.protection.outlook.com ([40.107.3.105]:26486 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lk9HZ-00065R-3b; Fri, 21 May 2021 13:49:58 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oXRTq1ea8/vM0b/xorriRQDjJG9B1Zn83ALyASWhwlpNh88HKsebLFRTMAKIFsU0fB1F8+wrq+uPuoFLg3Bi1KM9+Gvvjw4OnfNkj2rkRN7sYPRYoIvR+YUF7gRWkqEYsejmWGBttLtOKEgw9bp4ZfcV135CUIbniM6OhRywz9lRxi3bNWSxZxZU7FM0O9IjiDJu50cjJi0BTenBzIbrGYK2+O0+e6Lt1e393C+wpgl2hiuiHD5HlHkhkAUoEqP/dy7gHODPPi0CMAutP8nbelzZ0hfxjjz3rre2sFLns177wvvBqz9ND10ENC6lrnDhTBmGz4pg9fBs+WTWUCp6Ug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fPR1ZX5PZ8JDk2OOGHKZ/gJ4icAEgNLQKgF7et72HCw=; b=nMEzeyt2A6y0tH2GBeDr0UjWFWyXsKadsKunqTrsr8hvDMctb6/JmS866hRvLKB1YdfczWFxgdLdbMacy5QcgYowOByHvwwhOaxQ3s1CavhGSyZzbVa7qcah7lxAnMM5LC8+LG+jyKVgZePTV2/kTUztn4HuuenADCIQkq85p0kKbTKaTOOXSUfkhFIIQXIYwNE6rvtQ1jjkMFqfcwOhuhfq+JfhYVrejqaEC2inPE2JVxnyAXRLNaNHE0Vq4/kUks1GCG4/cYVMogUNqGi/Ul5jyxr/V5dnAP9OlZeDk4RJssxt99CasGit09aEWdADCexJV7J4r4YFxTmxwRew7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fPR1ZX5PZ8JDk2OOGHKZ/gJ4icAEgNLQKgF7et72HCw=; b=SIr7Axau1F0bsc73Sy4lYpVJFeYg6QBw7ElEP59224AHqi5dy8n87drT2qTGjhlgG/I/XRmE4C/ausPyMwRPqBA5IC86pQD3/+wFI4vTQN1sWVss9JJU7ujkhFDEUD7AB69t4ucaaqDvkbFtdFfTmlwkw9nufFJlFFAU/xUKTX0= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5911.eurprd08.prod.outlook.com (2603:10a6:20b:292::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.26; Fri, 21 May 2021 17:49:45 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::b403:c1a9:6bb7:133%8]) with mapi id 15.20.4150.025; Fri, 21 May 2021 17:49:45 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, vsementsov@virtuozzo.com, jsnow@redhat.com, mreitz@redhat.com, kwolf@redhat.com Subject: [PATCH 6/6] iotests/image-fleecing: test push backup with fleecing Date: Fri, 21 May 2021 20:49:25 +0300 Message-Id: <20210521174925.62781-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210521174925.62781-1-vsementsov@virtuozzo.com> References: <20210521174925.62781-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.197] X-ClientProxiedBy: HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (185.215.60.197) by HE1PR09CA0083.eurprd09.prod.outlook.com (2603:10a6:7:3d::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.23 via Frontend Transport; Fri, 21 May 2021 17:49:44 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 18404dac-e02b-463e-492e-08d91c80d1d0 X-MS-TrafficTypeDiagnostic: AS8PR08MB5911: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:580; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /UUZYuACOq/b47tgfbZrDPFB/yjmoZZvIgwNGUCvZsoFQCHIebHFukF7nt1vG+yyN3CMVt9t8BhTKt/UTpObrSc+E9jjHhxqzvmoF/y3pNmVmPAbR6dAU86CcfFojo6YmHtFotLIhfaAhTddQUmulJjCUuGlZsIJiXXwu9MAQy0VCtF2/v565A80heIv+8rMdmyg0i0eLMBMgr6qT8QJ7/vOgTzftzIBVOj6EL4Tl2UlP1FwKCsUOC1RItr2NDyMALSsoOc3zbUEWVv3HLVTT0oshblldpW5iY6AMQwdkPR4aC8EE2OODCxfRPLpULTRxW5z3LayOl3Z3Oh4oaoKo0GtZvh1hblT5o2r5dfPPX1yv5p1aUGoHN5O+ovTGF0rZuQOmbrGfi74ETCX9pSwvK2Q7NB+SndyfNf+04eJImAsMAlwadQd/AZ8iD/iRRQoI9xhj1Oz2LzNyF1K/73lPs50x/gUP5iXhugyef1Cs1l/n+rH6+XpTvxOMKgXWDQ+UqIyTaGGK97MtTLkXH0bm4tVc0vxsgubfhRQ6FisKCOHJU9S2ZTQbX3t9CJVTnjTA5wq+yNXM4FVL9/rdQS7FttKa6ZIzPbV+ohM3ikhLhLg3W6oeZg6v9nXPdzSBs3/PnrYnA1OODqUi3IOhTXSnWUQ2AOFkd5xlhVPibHiWWKhMFEYEoQGTuuOn+5y1o9J X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(136003)(396003)(376002)(39840400004)(6506007)(38100700002)(38350700002)(6916009)(6666004)(86362001)(52116002)(478600001)(36756003)(316002)(2616005)(956004)(4326008)(8676002)(5660300002)(1076003)(26005)(83380400001)(6512007)(8936002)(66476007)(66946007)(66556008)(186003)(2906002)(16526019)(6486002)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 55iBCwu8bqhUhCgJvItseA+3xfs/8cG579hIvqplcCFyHeOt+P/7cSHts5fzY2ghN/tcoyndFRDEVPcrujrn3AbyvCrgU8tuCWjn+ygzU+pEOOnIw6GodSRRO/Pm8QTXslZmBb6TlZM0XLE7zQKvsIRP9JkumDNP1XxMTWjDcTNQCeUQOWDweEzmtvptDSc1N0sAbPxSBt4oLTocdiVBlcSOobHxURR0VWKOG6VsEqByoNrR2WpUFwWI3/gk4+IXmeuHCKTXenXLK0Pn5WsaJVv1L6y1acEWGXx1htZGxMV36Mny3U1/aIoxQNT9NfNl70hGVmWjpnaSRVdR5eF8UkSZDXda4NO6wEl6s+WLaNhRndgdP/RP+eBLnBfHmnpJjsuSZlTLpagLu7w9KmMjvHh5g5ZMiInvgMelJ1SV1H1qr1lT/MlTwJiPGtAlU69p/6NPfxPOPcCvECTm4Z/prPMN3uAPcbrVrgyfqGrHUVaTNr6jZpqV9WTmudq46oZMRmwB+eEizdR0S3J4EfLGNxjHMbmFS243pVA5UekID2AaIR8/VlrwM/X0SOFG7moOl+GSS32II9y2B12fx6eae61u+5VEx68yvEd2TZcRQQ+UMq140jcozxB6rDVMf/dsiTBFIp+xPJrQqajqZCuueTFJoa4o/FWTgaqBA2kyF/qNNrMY8RO70nqt6tGBWJ21BbA4uGLwU4aYEJodU9IxSwGSoim8hrWh+Tx5uHykWBm30ErT/0Ze0RPN56PF712U7Ip02VoYYc1x/fHpudx4sJw3rEVkNCjD7jshCSOcBych3V8lD+lsm8fq1hKeUDjejtGMooFdWJPd+k5g2ZukxvV/MOYiGYyriFILxuD2hVadsjXtG2Yt0jAkCzM91akv5sRGi0IDKLZ+VzNlo8jRwzlJ9eUZDmLHv9Lc0iWaANVX5ak/e4ICaL+zuN+HTNm6K3rzGDtKz5VVeJWFex04YKyNxQaYgA7T/RRZnRNd4kUNGjFCuLt1GV4pX5ZHoM57dzMq4UEwi2kaJoI2Ildcvp0S48dorcGGmf+di+MRyA5NTUPGWVCL/EMqbJ4px6vU/yd1C60zbdMovIxmrGmthbOckAwuzSgWjyr+CkXh93QcVVh0MsQIFYQCJcpPEvEtl7Dx003oRlj5FwN1wegwnKeBehOupAY8eerNlsx/PBLutR7vz3X7viYRECzp0JTLw7retEl+7TMtbd3pYjPmBNFHo7qj9ybHSopNrDik8+L0GJ3UtnFPnH6cAm/2FvxlcFqV2845RGgmhqcgbWQeO+XTT3hw9ladPgIhcTVeGx0mfMHsXYEKNmSQ492+nYAO X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 18404dac-e02b-463e-492e-08d91c80d1d0 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2021 17:49:45.3007 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MBHJtZujCwfTj4SAJLOWAnGgxYK8AUAYICaPYA2Nq1U5W/iHlutG/CKVeNoecnrqzxQlsgX5ZxtAa+kIEE5jJgls2WH7sOOTEz00sSKm+ow= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5911 Received-SPF: pass client-ip=40.107.3.105; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Add test for push backup with fleecing: - start fleecing with copy-before-write filter - start a backup job from temporary fleecing node to actual backup target Signed-off-by: Vladimir Sementsov-Ogievskiy --- tests/qemu-iotests/tests/image-fleecing | 104 +++++++++++++++----- tests/qemu-iotests/tests/image-fleecing.out | 60 +++++++++++ 2 files changed, 139 insertions(+), 25 deletions(-) diff --git a/tests/qemu-iotests/tests/image-fleecing b/tests/qemu-iotests/tests/image-fleecing index 404ebc00f1..4c0cf2a088 100755 --- a/tests/qemu-iotests/tests/image-fleecing +++ b/tests/qemu-iotests/tests/image-fleecing @@ -48,12 +48,20 @@ remainder = [('0xd5', '0x108000', '32k'), # Right-end of partial-left [1] ('0xdc', '32M', '32k'), # Left-end of partial-right [2] ('0xcd', '0x3ff0000', '64k')] # patterns[3] -def do_test(use_cbw, base_img_path, fleece_img_path, nbd_sock_path, vm): +def do_test(vm, use_cbw, base_img_path, fleece_img_path, nbd_sock_path=None, + target_img_path=None): + push_backup = target_img_path is not None + assert (nbd_sock_path is not None) != push_backup + if push_backup: + assert use_cbw + log('--- Setting up images ---') log('') assert qemu_img('create', '-f', iotests.imgfmt, base_img_path, '64M') == 0 assert qemu_img('create', '-f', 'qcow2', fleece_img_path, '64M') == 0 + if push_backup: + assert qemu_img('create', '-f', 'qcow2', target_img_path, '64M') == 0 for p in patterns: qemu_io('-f', iotests.imgfmt, @@ -108,25 +116,42 @@ def do_test(use_cbw, base_img_path, fleece_img_path, nbd_sock_path, vm): target=tmp_node, sync='none')) - log('') - log('--- Setting up NBD Export ---') - log('') + if push_backup: + log('') + log('--- Starting actual backup ---') + log('') - nbd_uri = 'nbd+unix:///%s?socket=%s' % (tmp_node, nbd_sock_path) - log(vm.qmp('nbd-server-start', - {'addr': { 'type': 'unix', - 'data': { 'path': nbd_sock_path } } })) + log(vm.qmp('blockdev-add', **{ + 'driver': iotests.imgfmt, + 'node-name': 'target', + 'file': { + 'driver': 'file', + 'filename': target_img_path + } + })) + log(vm.qmp('blockdev-backup', device=tmp_node, + sync='full', target='target', + job_id='push-backup', speed=1)) + else: + log('') + log('--- Setting up NBD Export ---') + log('') - log(vm.qmp('nbd-server-add', device=tmp_node)) + nbd_uri = 'nbd+unix:///%s?socket=%s' % (tmp_node, nbd_sock_path) + log(vm.qmp('nbd-server-start', + {'addr': { 'type': 'unix', + 'data': { 'path': nbd_sock_path } } })) - log('') - log('--- Sanity Check ---') - log('') + log(vm.qmp('nbd-server-add', device=tmp_node)) - for p in patterns + zeroes: - cmd = 'read -P%s %s %s' % p - log(cmd) - assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) == 0 + log('') + log('--- Sanity Check ---') + log('') + + for p in patterns + zeroes: + cmd = 'read -P%s %s %s' % p + log(cmd) + assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) == 0 log('') log('--- Testing COW ---') @@ -137,6 +162,20 @@ def do_test(use_cbw, base_img_path, fleece_img_path, nbd_sock_path, vm): log(cmd) log(vm.hmp_qemu_io(qom_path, cmd, qdev=True)) + if push_backup: + # Check that previous operations were done during backup, not after + result = vm.qmp('query-block-jobs') + if len(result['return']) != 1: + log('Backup finished too fast, COW is not tested') + + result = vm.qmp('block-job-set-speed', device='push-backup', speed=0) + assert result == {'return': {}} + + log(vm.event_wait(name='BLOCK_JOB_COMPLETED', + match={'data': {'device': 'push-backup'}}), + filters=[iotests.filter_qmp_event]) + log(vm.qmp('blockdev-del', node_name='target')) + log('') log('--- Verifying Data ---') log('') @@ -144,7 +183,10 @@ def do_test(use_cbw, base_img_path, fleece_img_path, nbd_sock_path, vm): for p in patterns + zeroes: cmd = 'read -P%s %s %s' % p log(cmd) - assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) == 0 + if push_backup: + assert qemu_io_silent('-r', '-c', cmd, target_img_path) == 0 + else: + assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) == 0 log('') log('--- Cleanup ---') @@ -159,7 +201,9 @@ def do_test(use_cbw, base_img_path, fleece_img_path, nbd_sock_path, vm): assert e is not None log(e, filters=[iotests.filter_qmp_event]) - log(vm.qmp('nbd-server-stop')) + if not push_backup: + log(vm.qmp('nbd-server-stop')) + log(vm.qmp('blockdev-del', node_name=tmp_node)) vm.shutdown() @@ -175,18 +219,28 @@ def do_test(use_cbw, base_img_path, fleece_img_path, nbd_sock_path, vm): log('') log('Done') - -def test(use_cbw): +def test(use_cbw, nbd_sock_path=None, target_img_path=None): with iotests.FilePath('base.img') as base_img_path, \ iotests.FilePath('fleece.img') as fleece_img_path, \ - iotests.FilePath('nbd.sock', - base_dir=iotests.sock_dir) as nbd_sock_path, \ iotests.VM() as vm: - do_test(use_cbw, base_img_path, fleece_img_path, nbd_sock_path, vm) + do_test(vm, use_cbw, base_img_path, fleece_img_path, nbd_sock_path, + target_img_path) + +def test_pull(use_cbw): + with iotests.FilePath('nbd.sock', + base_dir=iotests.sock_dir) as nbd_sock_path: + test(use_cbw, nbd_sock_path, None) + +def test_push(): + with iotests.FilePath('target.img') as target_img_path: + test(True, None, target_img_path) log('=== Test backup(sync=none) based fleecing ===\n') -test(False) +test_pull(False) log('=== Test filter based fleecing ===\n') -test(True) +test_pull(True) + +log('=== Test push backup with fleecing ===\n') +test_push() diff --git a/tests/qemu-iotests/tests/image-fleecing.out b/tests/qemu-iotests/tests/image-fleecing.out index e96d122a8b..24f97bf7f6 100644 --- a/tests/qemu-iotests/tests/image-fleecing.out +++ b/tests/qemu-iotests/tests/image-fleecing.out @@ -137,3 +137,63 @@ read -P0xdc 32M 32k read -P0xcd 0x3ff0000 64k Done +=== Test push backup with fleecing === +--- Setting up images --- + +Done + +--- Launching VM --- + +Done + +--- Setting up Fleecing Graph --- + +{"return": {}} +{"return": {}} +{"return": {}} + +--- Starting actual backup --- + +{"return": {}} +{"return": {}} + +--- Testing COW --- + +write -P0xab 0 64k +{"return": ""} +write -P0xad 0x00f8000 64k +{"return": ""} +write -P0x1d 0x2008000 64k +{"return": ""} +write -P0xea 0x3fe0000 64k +{"return": ""} +{"data": {"device": "push-backup", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} +{"return": {}} + +--- Verifying Data --- + +read -P0x5d 0 64k +read -P0xd5 1M 64k +read -P0xdc 32M 64k +read -P0xcd 0x3ff0000 64k +read -P0 0x00f8000 32k +read -P0 0x2010000 32k +read -P0 0x3fe0000 64k + +--- Cleanup --- + +{"return": {}} +{"return": {}} +{"return": {}} + +--- Confirming writes --- + +read -P0xab 0 64k +read -P0xad 0x00f8000 64k +read -P0x1d 0x2008000 64k +read -P0xea 0x3fe0000 64k +read -P0xd5 0x108000 32k +read -P0xdc 32M 32k +read -P0xcd 0x3ff0000 64k + +Done