From patchwork Fri Dec 4 22:07:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411283 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=wZ148qA2; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4Cnn1n2Xm0z9sWK for ; Sat, 5 Dec 2020 09:09:49 +1100 (AEDT) Received: from localhost ([::1]:45378 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJGt-0003L3-BG for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:09:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39446) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFc-0003Ik-3U; Fri, 04 Dec 2020 17:08:28 -0500 Received: from mail-eopbgr10108.outbound.protection.outlook.com ([40.107.1.108]:31004 helo=EUR02-HE1-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 1klJFY-00024O-Gp; Fri, 04 Dec 2020 17:08:27 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d6+DgrhgIin5ij373SOdIC5fSPQ6b4EAWqAl9cPJMS71vDfUYevvTchliejznJxFyUTxPdSesgew+UtRWqOfNlvna5TF/NI//4HG/48Ta3UpUVDVq39kuCJMurctOl9YJJXL4tlUZsyrKglefm2HFOkcORPl+2zJQbzTXaXefLnQVeaQNzd/rXu16nFaf1e+glnOfazczIUx3rMOOAkmab5Pth5rD0ZjhY0+ypE7NYoEzFaMAIifZNjuulH9JJzHB2CMW/UReh+4+nz0StfJ53hSXbsh9Oia04436ll/+2C//gYdu4nRmpfbYOMW6iVj3eRlF6v4fg6f7SnTWQykMA== 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=i4bZTTtpjUIkb0CyXuXomxBOD7CrwAEwDdzwDi+DR1w=; b=Drl3fbuas8OVbPFUunqfRRaAAEESthakpO67OYtub5RspujRL9Kvus3GT1oQZ7TTKMhLp1TOqxPMh2Gu6NfmiUfxVZcIzPgft3y3LDmZ8jAFMeJymXAwAbYBbnxnHpFByG6tYImly/uNjJcAPrxEtrr+NpsSozC325qnxS4pSc28Ox6QY1bu6e14SA9OZQUE5MVpLo6f1YCQfuaHfQEUnxUs/cBgfssTSGZKz8GwvJZEUfmpPLJjjB/Pqolm9ihVTzchDWsflWL5KbNm6ewzGg4Y4NVJsKx21DdWLCkCZpeatZxylh6At1YnQ7hZLNrk7/tkVnb95sGiJtBZ3L8UgA== 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=i4bZTTtpjUIkb0CyXuXomxBOD7CrwAEwDdzwDi+DR1w=; b=wZ148qA2GI6lMsFzEFTNwbT57LqWv4eLsRsxUw2LkGrApkoM5n0qwiJaRv3AQUAk9frTgExyTvmiYVG1xWZj0WIviUeSS8+NwkmN6eWeodyrW5QGT9Frz5lk5rDY6uBF95wMyRXt2+/IHYeWETydZ64YNKWKgxcatGolcoDHaks= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:14 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:14 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 01/13] copy-on-read: support preadv/pwritev_part functions Date: Sat, 5 Dec 2020 01:07:46 +0300 Message-Id: <20201204220758.2879-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:13 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 37c47736-e605-4682-9384-08d898a1189b X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3276; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wwE42GA/A6pF3SDdAKHw4Y9fU/IV0AcOwc/Rak2Psd21l8SLEoLAHZcv5aQJMsSuj8dKW797iFHhmPmvc4b/8nbun0mDF1V8CzEXeLSXhKBRyEIn4jb3vpCFkQCkLZMO+HYf/+tTqkaT/RPn7QpuO1JUALl/1l2H6zneS9/oW78GCxvHHLWsGchzHS2qRFJzjeUafwZQoavf0hl41TmtHrfC5xkW/Cs+w+/QBb5Yc6AGc/07nJVOsOAbZ/xZBBwK6eqJcHFsLH5CkoN1nmKHMyHcJQ/x+pKWiL0eJSXDrYIcJWuwFOQ6SbqPTEZJMpwXfAEhv6w33Vcpo0DvLL8YZw== 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)(376002)(39840400004)(136003)(396003)(8936002)(2906002)(6916009)(52116002)(316002)(478600001)(6512007)(6506007)(83380400001)(2616005)(8676002)(6486002)(956004)(5660300002)(6666004)(107886003)(66946007)(1076003)(66556008)(186003)(36756003)(86362001)(16526019)(4326008)(26005)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: E9pQE2jCsj+VwMuj37psJODJcrVCid4PTsUx1yBD+utd7+UrBfA5k2QNMDbRZuXSOmImrJIgMC82zAizM2a+8ABCRZoqgq5Lg1E5Tqpt5hGiEsDftHQDFQ6bify9+SPbE14ZpZ+E1/sNDcgreSNya4MPbdVPOrJNyzdNc/n6rVJjmxuivSqSlyK/Dmuc9GZ/BZOAxfkKghOt6OAF9sltHmObbYf7NV+W2cV0RWjW/u6Q9kdCzMVSJqHV2usM7S3EfY8Uw8P0sbz2sIxkoYArJBuPvDuKmiIporTj+fg3m6uOFGBiEDJlPyOinhgSAR6I8BVNi0CnrYkIqNlUXICnExb27zU1ziWGiB5IPqdnH32DbtsELztKJeg7TPSV6IuCCWdTOGp3XPNIQo2450cQl5/D07jVSRvBxTuYmM/JGigWg1qHoCPs0CIcZyZD56tS1Wc6kftGmrs4KwoXQThENsf4hxKD8hnPCzfCstU/oIOljnYqQMZmD2KcPAtfTxTWwIJ94IixqF5pKMtd4ocFVXROuxoJjKzLduGJYc+BrrVAyp3jjE5jA2AbSupWJg52NjcJorg5qqOcQHCO6c2cEBl/1JkmjHiGUjwY2JHHzQsLIiZFWh1sRIy5cFKGYaTCpemynY/b+T/YacFkdYKJrKHf8TKe3ZWxOdTS9esbOL65falZIrIzsbw9YjZnAi30LkDwhPXg20BRgEzNxL5ye0H/yDp8NhjpAFULX0yun8tUPUIuXvmsMF0kq5exJCJY4D8c7e8KJVuUOh3xdIZLCvWo0RDAriyOm6EEz5WmNiGRBBvbkNXK04QEhbr73x9OxpoKqnwTglC29/hHU/iR1QqjlipYJCYI0gx1Yq30KEhHCFKEU7CxzbrpPa0q/bnMLtqWOOH5p4ULekD7AIfJ1b5E/a7rDurtP0yvwfBl/8C3aoTvhLAOxBgNHce8NpKtXczRujA8OsxAzJQOKeYqDcStzhW5uOIsvYU1JaW1jP9IUxPQ25/bEDXkuRqzQHvZ X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 37c47736-e605-4682-9384-08d898a1189b X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:14.4832 (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: gieD5Ef6AVf+9Id4yVXnI3TUjYPc4pBZWUbrPDcNjq+c2UwOnr9n2NBHdHlx62Ta3cFIDTUtDd/wQqQ0zmMu0xW0um1LLP4Lz8zL1t6g2Aw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.1.108; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-HE1-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich Add support for the recently introduced functions bdrv_co_preadv_part() and bdrv_co_pwritev_part() to the COR-filter driver. Signed-off-by: Andrey Shinkevich Reviewed-by: Vladimir Sementsov-Ogievskiy --- block/copy-on-read.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/block/copy-on-read.c b/block/copy-on-read.c index 2816e61afe..cb03e0f2d3 100644 --- a/block/copy-on-read.c +++ b/block/copy-on-read.c @@ -74,21 +74,25 @@ static int64_t cor_getlength(BlockDriverState *bs) } -static int coroutine_fn cor_co_preadv(BlockDriverState *bs, - uint64_t offset, uint64_t bytes, - QEMUIOVector *qiov, int flags) +static int coroutine_fn cor_co_preadv_part(BlockDriverState *bs, + uint64_t offset, uint64_t bytes, + QEMUIOVector *qiov, + size_t qiov_offset, + int flags) { - return bdrv_co_preadv(bs->file, offset, bytes, qiov, - flags | BDRV_REQ_COPY_ON_READ); + return bdrv_co_preadv_part(bs->file, offset, bytes, qiov, qiov_offset, + flags | BDRV_REQ_COPY_ON_READ); } -static int coroutine_fn cor_co_pwritev(BlockDriverState *bs, - uint64_t offset, uint64_t bytes, - QEMUIOVector *qiov, int flags) +static int coroutine_fn cor_co_pwritev_part(BlockDriverState *bs, + uint64_t offset, + uint64_t bytes, + QEMUIOVector *qiov, + size_t qiov_offset, int flags) { - - return bdrv_co_pwritev(bs->file, offset, bytes, qiov, flags); + return bdrv_co_pwritev_part(bs->file, offset, bytes, qiov, qiov_offset, + flags); } @@ -137,8 +141,8 @@ static BlockDriver bdrv_copy_on_read = { .bdrv_getlength = cor_getlength, - .bdrv_co_preadv = cor_co_preadv, - .bdrv_co_pwritev = cor_co_pwritev, + .bdrv_co_preadv_part = cor_co_preadv_part, + .bdrv_co_pwritev_part = cor_co_pwritev_part, .bdrv_co_pwrite_zeroes = cor_co_pwrite_zeroes, .bdrv_co_pdiscard = cor_co_pdiscard, .bdrv_co_pwritev_compressed = cor_co_pwritev_compressed, From patchwork Fri Dec 4 22:07:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411287 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=GrxrjA9i; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4Cnn6H16GBz9sWP for ; Sat, 5 Dec 2020 09:13:43 +1100 (AEDT) Received: from localhost ([::1]:53842 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJKf-0006zc-4H for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:13:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39454) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFd-0003KX-Gh; Fri, 04 Dec 2020 17:08:29 -0500 Received: from mail-vi1eur05on2136.outbound.protection.outlook.com ([40.107.21.136]:31968 helo=EUR05-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 1klJFa-00027F-AM; Fri, 04 Dec 2020 17:08:29 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XPtPdKWrnnon/BDR4qE+Kxf/XwZdv1AU96QPpON6gWe7SlAbkWpPp38ee83b9vIrsEx6oVWQmt1u06Aq3+xLPBZ8Fn/CtS6ERrM1PEVBRbHe78eRP8JC+qEiJQm1dVh5T7ubflKS8KXb7x8yj8UA0oiwohfp5uUewVBGTzw5w3EYxVkprOyHn9EL7AQ7JCa5FchNHJ9Tn/wKHiPfH9wW8vA8cri0S4uBlqHOq2HrfYa38H+htbP2ZR+4My3iM2XDr8MW+/3NO5sKGlwrQyoCtL7KEw8NwYlss9aaSMFVLFl3GSSqU2LfzvFAq3FQjakFj12UWv0uduOvBtHyudMGWw== 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=JeZ0crB1VKq62DL+gKla+V76HsysFVyDg0MnRkS2amg=; b=iwGtvZojWwzimr56aHDeL2w0kHH0UaqUlzrdyR6NmZoVkS9VFApPpGxwogtbXTbB2VSQDXe+8GPJLS/uQ9d62RIjqGPm35+O/kW5A9n336G5cbVEfOwbs9MTluP6tT5JuEfLc1TrfHBl9iHj6dgGda3x9QeK6A75FsnCOXQCxozXNwJMOf+Jex3QUDM/geiE+6EgW4Ixj6LTbME6oPzBGLlfLECGBA3igP+y0EVMZ2BkiwQeNRBVFYxI2LLNfe96l9ZVdJPGBHb+mwuZMKnVgSr7BVo3IUsB9rG/CvgwgUZ5C+qxsI9cMNWy0qYcT1wZmgeacBjHEthJO+vDF1/7sQ== 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=JeZ0crB1VKq62DL+gKla+V76HsysFVyDg0MnRkS2amg=; b=GrxrjA9iINuqmyO2ZAqN7ysxnlMDruePaLAS7d0CJOXFtsLQbCIpWr8HOx0K6R8pa+zwaUakmh9HTEKVEDHKAp/VJ/QjIw1RLRrQhUTRYdU7yNZsxBMDLZoeQY8EEtdXkF/iYYAVqX8Ur6CKgNgbdr/xKmEBMwmsOEX/zALPqRo= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:15 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:15 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 02/13] block: add API function to insert a node Date: Sat, 5 Dec 2020 01:07:47 +0300 Message-Id: <20201204220758.2879-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:14 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 76557c0d-b037-4fe8-b07c-08d898a11942 X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5516; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +13yUQPj+yc38AUkrsnArL/Rv/hmwGBZMDx6M5aPsPNrXgMrRANCMQnej8FPS9Fk+OePnhz6w6Oh+JtE4aJ3GPqfjmf1BHF7UrAWXCQuzvhI2FLrQIsO0NnFxsv0dM+4w+5zys0owSopNsdcYiL0A+eKLSgG4DyBoqhU6hiMVZ+b56EDgFqjCzXg0YCjkN3U0n8jTKd6AhkRHrIyADfjIwbCJf8maSAwbVafGINZeF3f899/+pAVrGefauAJTuKIsE7EYsVhky+EEEAtTJ5y6YG0YM9wRnoNm0ProEBJ6EyIYFVqJD5JCMMWJa1qKAjAZ4nCTb8DgtcR7rz+MZuO8A== 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)(376002)(39840400004)(136003)(396003)(8936002)(2906002)(6916009)(52116002)(316002)(478600001)(6512007)(6506007)(83380400001)(2616005)(8676002)(6486002)(956004)(5660300002)(6666004)(107886003)(66946007)(1076003)(66556008)(186003)(36756003)(86362001)(16526019)(4326008)(26005)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: W7d9jB7/UrD/ufsnJC1r6QBajy29QlKX6JOKpS66f2iEThT8FMrhU2oX5AOHl6HjdUI/B6zliu3PXlDjcEeyoV/dDAg2YuBg/DDRK63MueIFq/sfOixD1etzTWGW3VlYr3HtElRiS8PCMYbqfkGmrCrxQ7hWgqi+UwWUP+5A8LwFPE6gM3r2rqlvHS6EaH0KNWPS3eHTBk7LB9y9hVokgaByWXZ3o9m6v9g5A0U2OJOVx6yUEpFdDJw6P1eJKz4de/JhTXecBN7GcmXdu+OHY61lACLoAt1fBt17QPnJZmE1CGBYoV2bT8M4EwT5HKZrFS466QTgTU3RaxQ9KRD3S1Lnfw5PdS0q03UajLq4TnqidbcorxFmtLLcadIea8UuB3y5IWqon5UwxUpFy5nCg5nm4W2snthAcbZLf5v0B3JaPQHP0Oz2ZR90PJyrIwAB6+FnQW+P+ObVdwtTz9q3Jkr2UHe9yO1drqo2LWsU8mEcF1LJSV6KG5fTZ/+XvfdB912fmYIuTdgNCO/JpSO0Z1dQBhnozNEPqvMm3iZh+viEkSCxIqk6U3PL+sBj3vB5h8O/rBJvN9sVj6aBMvt9rk0CXfSywDluL/1wULVRwNhiEnsH/GjRKxLgZz/zQrzUob0TlwiKSNmLNfDXx1oABOdQ5fJQDKkCpkRX4P/RE/3ya5w6ZjU1I5dLAxVXO3Yhny0Qntsnygiuqd13C45pF8KVWxar38XWMfcaygxTpgZHsH13xofVrltGkgxPNe+ZBzxboBK3xgCWoyOq8tRqfk1+elp4V/kQK+wlvOatB0/D3V84Jvc6Vwi5bcFyuGyBRI0wKQjihjyYWSxj9DGEYWuU8DRbrUKnWmqPgms2m+9ypH+3sDXo+pVtOH02zvSTXzNYTzEeEZH+WDQE9YyHUxDTooaqBaj/A2yCLM2iPf0hLQdFLeG00Ruvedgn40Ry1xkgJLNRRPuDKIYFGvk0NNp+uBtfEpbm0p3gGdGIAqHZ87xSQXEgRy+iut82EouB X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 76557c0d-b037-4fe8-b07c-08d898a11942 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:15.5286 (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: jSldIwFldZBeLJ9l7d4qEBKWw5MCr9HDXHRfb/21c+WwXPhoqWIs+VQKfc3Bruxc0vbAr4Hr5D2LohCUxXUpAfmYewzqal7cD4nbpfw6Tjs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.21.136; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich Provide API for insertion a node to backing chain. Suggested-by: Max Reitz Signed-off-by: Andrey Shinkevich Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- include/block/block.h | 2 ++ block.c | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/block/block.h b/include/block/block.h index c9d7c58765..81a3894129 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -350,6 +350,8 @@ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top, Error **errp); void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to, Error **errp); +BlockDriverState *bdrv_insert_node(BlockDriverState *bs, QDict *node_options, + int flags, Error **errp); int bdrv_parse_aio(const char *mode, int *flags); int bdrv_parse_cache_mode(const char *mode, int *flags, bool *writethrough); diff --git a/block.c b/block.c index f1cedac362..b71c39f3e6 100644 --- a/block.c +++ b/block.c @@ -4698,6 +4698,31 @@ static void bdrv_delete(BlockDriverState *bs) g_free(bs); } +BlockDriverState *bdrv_insert_node(BlockDriverState *bs, QDict *node_options, + int flags, Error **errp) +{ + BlockDriverState *new_node_bs; + Error *local_err = NULL; + + new_node_bs = bdrv_open(NULL, NULL, node_options, flags, errp); + if (new_node_bs == NULL) { + error_prepend(errp, "Could not create node: "); + return NULL; + } + + bdrv_drained_begin(bs); + bdrv_replace_node(bs, new_node_bs, &local_err); + bdrv_drained_end(bs); + + if (local_err) { + bdrv_unref(new_node_bs); + error_propagate(errp, local_err); + return NULL; + } + + return new_node_bs; +} + /* * Run consistency checks on an image * From patchwork Fri Dec 4 22:07:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411285 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=VifWAJn1; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4Cnn2t1ny2z9sWP for ; Sat, 5 Dec 2020 09:10:46 +1100 (AEDT) Received: from localhost ([::1]:48712 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJHo-0004qc-6K for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:10:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39464) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFe-0003N2-SG; Fri, 04 Dec 2020 17:08:30 -0500 Received: from mail-eopbgr10108.outbound.protection.outlook.com ([40.107.1.108]:31004 helo=EUR02-HE1-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 1klJFc-00024O-QT; Fri, 04 Dec 2020 17:08:30 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N+YMRU6f3X77eOvo8aBi3vqX46+23BOdrlhuc79Z0p3yaU1AHGyhJjVBOKFXKKTJmWJI3vWVeQaEK+EcLP48KYbwT4DooFAe9n2NrZD/xCJwAJ70jsxQPtt/QsCwdH1Eko2OCrI4Rfh7981bIYvIhp48yHiDmdfR4NUYI4qPO18ZZp8qTUmR/jbPVqVzEsbGbIlLQ+3gw14HaT89sOKnXZYwYjCQ8IMjz6ps/8FVnMNdKFS6Pn2K4Ug1ib3U7xySqPa4DaXY1WSolDlUzdQo4Z34E0Qk7zcMG9rgW0pCTiwevxxhyKgMvlGpYfL//93mXjoDxGfPgrBm57p7TuhNtg== 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=6eCCJ+yv6h620/iFwwUoD2atejSkLc1qEP+q2NGFcjE=; b=OJU2rQX4sziFGcKLI2NewojntWQPRuSJEbSPmaE/6cuvLIHE0begDs3FMiUvLQwarDKQx8BdGtOgZ9zGQWCSbSKazk7+969JvQEJq4vmdyOUQ+DO6opZZULVvWRPq5gSRhWkmFpEV3U3DTbmWGm4x3Q2QeTop37wBvbcgWPmzuRTv2SI9fFxX3450MG0S8UwxTXvXTvn45lDDOXvRvqfNApuR/Z2mOTdjPUqPdF7uogqoHg4IULbOnStZ3Dkglz75GJ1mhIIrJWiuC9LmeEnETCt+MaNfE2jFTEr6Zt8OBk3BaBqLdP8gwFIwiiDoTUh6HuFbRpduqSVquqMtP4scQ== 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=6eCCJ+yv6h620/iFwwUoD2atejSkLc1qEP+q2NGFcjE=; b=VifWAJn1uZ3AQtIrDzYamJjxGK5+jtm+tA3ZJRcDS62S/Cr8djuVz8UaPssXqnobAua2y3Ih07tyBl3iZAdt6AHecRzIBFXEcmS6YmAzvT0NDnGi7iuKl7r0BraMFyyNwAnw1+XMjcoy90nZQ66mcJGTNIPyJ2rlkBmuCgV0oPM= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:16 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:16 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 03/13] copy-on-read: add filter drop function Date: Sat, 5 Dec 2020 01:07:48 +0300 Message-Id: <20201204220758.2879-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:15 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 086584e0-fe12-4884-57d8-08d898a119d1 X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: da2tQVuMSNVgbTvh9TYxOgcgGeJTDlkZHoryUL4d23Jtma6t9lpt5NzxRZvexnubuzXQsDSJ+vajzJS0/AX2JsF8Ewfsv4S8gI9IAmHZY2km9W4Zkl77X5p+9jiEhbmXTxR2gTP0aOI3IqH7jr/09xRIaeAv1Dwq9KrlxXXBhgSOFj6bbeID1irOyTY4fDMI7+ODDiIBgeIP1EGAoE1vyOfn/M/Rd3iu4c/Vw2xldOATV/bw1DPKUhR8LzWfQY6kH8sBNt7+CyEkjRxVAb8kIIupg4giq7gUFAq9iJDxCEDywD7Zfq5cZHrAjxyM1Xb+LzlxZxZU3fUbjGtONrbuLLR+rymeIi2r6XLhrzP5wiO1RpTvPcff1+jjuOq9wSMCB0LLe6gOIyMAtuM9YeoCFK0CqUhd0N+9kziZjnm6cdYo2AOqy8pcE8kgQYwlU0vmq/rBc9LLzf1Fpa9opGmqlA== 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)(376002)(39840400004)(136003)(396003)(8936002)(2906002)(6916009)(52116002)(316002)(478600001)(6512007)(6506007)(83380400001)(2616005)(8676002)(6486002)(956004)(5660300002)(6666004)(107886003)(66946007)(1076003)(66556008)(186003)(36756003)(86362001)(16526019)(4326008)(26005)(66476007)(2004002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: L9exy983junWA64ZC+Y6+mBbUu9rVb4qTRFsrwfJCIoGZBNkTQH2NFXDad1FBudDMkBsfQj4IyIo+9MWm47ZJtmU5cEIe2Dj81WJ3CiLDEbnPEuz29YjJWqLWsIoDS2Gpm7uQxJ0uSo2yvMU3ybJPKgYS33a8tArLRLShaUuaz51APLEoZgvEcquCywDQVwOJYfBQSBWOdRp0Ul4VcsrwmSg3GO0twijoj6KRLtfpuPzGlAMXl5QeW/yuGAzgCjCTjjiyJfVEB7w1P5/q5/8ckwotjD+2XqdoKT9llXm1cAX38Olu6FbHVpti45WZWalkKT8dXl6xApr7lmEVG0/sKGQrz0Ua02PUCuAll4pV3esYylpVM9ndMljAQM7IBGgDn2lNNTGhPmXC6475zNiTCBZLYkRxUfMn0SU4ixQS1d91PedxvHYyVhs2S3nIOQ5nrvTJLe6Cn5t8RYFEUxOSN4mZu5xGMTOZ9d2Js56X6zkZDvfdmuHVSk65Df0Ka2NLKuVbXXysfxb3OZzu5annY0oc+8VdtjTZoUJI0QnTqcc0D5SpwJCH6TV6TB744jqP6jJG4zgT6jYSJeFZ9zLz5+TtbvpGdP2XZJ+J0XJ1eICY3JQb/VWqLW5EAG4fWJpt90Yme/3PG7O9ROCW1tHqo4dPwtXlV5EL12LYsaDeCLiB37tdtzwl19/rU/k79ypvVS/Xdwv3IY5fYLjK34gLniSUUaYLmniFTikcGuKk9IiOELVWbzCXpfO0+wO+OSIPI0AvTkRL8zpIPSVtbhI7L2mX1wc7/w9w9NSaLp4yP1wBYjbTUnD1tBCBNTHqCtZ2gvGL1KlUOx8yvInZCeFTf/gIqY2OwiEfMv7LfpglAQlkESubGLXJI+Gn7ngELOY3kO9lBtjids8lPvFTU9LKqPjqQlSn6LPf9DoRjMiKsjSoEjM4lBgf1mgimR2PXlAI99TdvN78CoN/kqfSUEKdUqXp/gmJsU6UmWNn53x7K2iITZvW6gWBgzWi+aMmxuY X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 086584e0-fe12-4884-57d8-08d898a119d1 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:16.4755 (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: RdOJt/GxyJ6bmJ7Ron9aAV0SRLxn1cxYlfVP66edIlJa3HhtZYyA2F87n6Oe+kfNDoxioKynFXL/MtOz/FYAe1DpbcgooRHk+WF35RLrmoU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.1.108; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-HE1-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich Provide API for the COR-filter removal. Also, drop the filter child permissions for an inactive state when the filter node is being removed. To insert the filter, the block generic layer function bdrv_insert_node() can be used. The new function bdrv_cor_filter_drop() may be considered as an intermediate solution before the QEMU permission update system has overhauled. Then we are able to implement the API function bdrv_remove_node() on the block generic layer. Signed-off-by: Andrey Shinkevich Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- block/copy-on-read.h | 32 +++++++++++++++++++++++++ block/copy-on-read.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 block/copy-on-read.h diff --git a/block/copy-on-read.h b/block/copy-on-read.h new file mode 100644 index 0000000000..7bf405dccd --- /dev/null +++ b/block/copy-on-read.h @@ -0,0 +1,32 @@ +/* + * Copy-on-read filter block driver + * + * The filter driver performs Copy-On-Read (COR) operations + * + * Copyright (c) 2018-2020 Virtuozzo International GmbH. + * + * Author: + * Andrey Shinkevich + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef BLOCK_COPY_ON_READ +#define BLOCK_COPY_ON_READ + +#include "block/block_int.h" + +void bdrv_cor_filter_drop(BlockDriverState *cor_filter_bs); + +#endif /* BLOCK_COPY_ON_READ */ diff --git a/block/copy-on-read.c b/block/copy-on-read.c index cb03e0f2d3..618c4c4f43 100644 --- a/block/copy-on-read.c +++ b/block/copy-on-read.c @@ -23,11 +23,20 @@ #include "qemu/osdep.h" #include "block/block_int.h" #include "qemu/module.h" +#include "qapi/error.h" +#include "block/copy-on-read.h" + + +typedef struct BDRVStateCOR { + bool active; +} BDRVStateCOR; static int cor_open(BlockDriverState *bs, QDict *options, int flags, Error **errp) { + BDRVStateCOR *state = bs->opaque; + bs->file = bdrv_open_child(NULL, options, "file", bs, &child_of_bds, BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY, false, errp); @@ -42,6 +51,13 @@ static int cor_open(BlockDriverState *bs, QDict *options, int flags, ((BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK) & bs->file->bs->supported_zero_flags); + state->active = true; + + /* + * We don't need to call bdrv_child_refresh_perms() now as the permissions + * will be updated later when the filter node gets its parent. + */ + return 0; } @@ -57,6 +73,17 @@ static void cor_child_perm(BlockDriverState *bs, BdrvChild *c, uint64_t perm, uint64_t shared, uint64_t *nperm, uint64_t *nshared) { + BDRVStateCOR *s = bs->opaque; + + if (!s->active) { + /* + * While the filter is being removed + */ + *nperm = 0; + *nshared = BLK_PERM_ALL; + return; + } + *nperm = perm & PERM_PASSTHROUGH; *nshared = (shared & PERM_PASSTHROUGH) | PERM_UNCHANGED; @@ -135,6 +162,7 @@ static void cor_lock_medium(BlockDriverState *bs, bool locked) static BlockDriver bdrv_copy_on_read = { .format_name = "copy-on-read", + .instance_size = sizeof(BDRVStateCOR), .bdrv_open = cor_open, .bdrv_child_perm = cor_child_perm, @@ -154,6 +182,34 @@ static BlockDriver bdrv_copy_on_read = { .is_filter = true, }; + +void bdrv_cor_filter_drop(BlockDriverState *cor_filter_bs) +{ + BdrvChild *child; + BlockDriverState *bs; + BDRVStateCOR *s = cor_filter_bs->opaque; + + child = bdrv_filter_child(cor_filter_bs); + if (!child) { + return; + } + bs = child->bs; + + /* Retain the BDS until we complete the graph change. */ + bdrv_ref(bs); + /* Hold a guest back from writing while permissions are being reset. */ + bdrv_drained_begin(bs); + /* Drop permissions before the graph change. */ + s->active = false; + bdrv_child_refresh_perms(cor_filter_bs, child, &error_abort); + bdrv_replace_node(cor_filter_bs, bs, &error_abort); + + bdrv_drained_end(bs); + bdrv_unref(bs); + bdrv_unref(cor_filter_bs); +} + + static void bdrv_copy_on_read_init(void) { bdrv_register(&bdrv_copy_on_read); From patchwork Fri Dec 4 22:07:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411286 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=G0jUFx/g; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4Cnn5p5HYMz9sWR for ; Sat, 5 Dec 2020 09:13:18 +1100 (AEDT) Received: from localhost ([::1]:53366 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJKG-0006ms-Gt for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:13:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39500) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFh-0003RK-FU; Fri, 04 Dec 2020 17:08:33 -0500 Received: from mail-vi1eur05on2137.outbound.protection.outlook.com ([40.107.21.137]:46336 helo=EUR05-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 1klJFf-00029T-88; Fri, 04 Dec 2020 17:08:33 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MjZp3NGKouFP4rXWxoR5UqhGUXLWzl35iP2YbWcEeB2uuDlt87AC3Z3ZCyd10Zl37RF2n47m14ndSSrVClbjPaV47FRCkLbAHupaZAlhJvkP+bmVnLA3CIKGg9Rn/jKB0HN+Iv2JmCeuHy7UE7lVnRk4sybh6JV0aQUnRby8LFEQ//XHIREQBwgI/n1SUsndF+iVQlc3ZT3cHfdOWsjChOlDB/0MYq2o+8WsHdcGjjo1u7zwdPYMqhMPg6vE8LsZPDF69DIMw9XNr4xBG2p1TYiyeI8swsOWFSWYnv6vACgNhleEDDBH4u+tCmDhzOlutBrmDatkWrzmJTiUH2e0hQ== 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=bdcHmrLdUEiIRm+Np48NlarNqzMR5IO1RttOTVYMpKk=; b=N7M+vVJGw8iaI+KkU9CNccqcWRlQyBDDHMztZe+s7fBjS8mtkc0OD8Bjdrep2aKuB/u6VIdG3JqtBkdRhZnBOM02N5kSpPI4xl/ldAY6MvUAkaHxfkLQhqk3SW+ApaynEru7JTlixif+G+d58LAaFtPyuZ/It2MwlJPd5E1ev00GkE+W7KxQTx1sUD75xJFp3trvXp0tN0jC10h16OxULR9wxKjHyZWtbuF/CAtfAGyaxeyMFDWjpWK6fz1cZsT+ttcT6OCLYvP6A1fzwWAGoaP3DfL8YdHoMGycrtdVYibVXCRRL/J0WxrLSoVJDCG+Hh+H6cffLLgZhPsAgdTCCg== 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=bdcHmrLdUEiIRm+Np48NlarNqzMR5IO1RttOTVYMpKk=; b=G0jUFx/gRMzvout2iN/BY+x0d6zt556AWdrw6Q5vb+e/3/ONPf8P9tjO/0HVWnpt6YhMQCzdIRkjaEOHW5tMt0T3C5PE646upwwkL37u7YwRu7Qe3rNTeLy7r3BYFsXxmO8tmDT32hYTCdJcQWERg3Tgw1GcBQZwVHzMUNUxi1w= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:17 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:17 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 04/13] qapi: add filter-node-name to block-stream Date: Sat, 5 Dec 2020 01:07:49 +0300 Message-Id: <20201204220758.2879-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:16 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d907fc9c-4fdf-4fba-8df6-08d898a11a64 X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1728; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mQa0SinFZU082pGyC9DI0hLvK/sJZpiTZROK/uVK4U29ZZ9o6Q5DpBmd8MGyEa+ncQnzWu7VjTO8POYpY1c6MsuG/FJsT5niQamq1PBo+zXhjBzoCoHsdVvYKE569R0/hsv4LfYe1pwta/+wIvD93wwB0M2J8LDqtinErscv+8EENA9CUis2iqAFlxhBBSrIl7clefCniCZL0+lXehJu8vZU5YUdY71a2ZWMX+xU80T4rRKeRIn900QyJ0fAdnK1mgGd4bqH9XIq9cq+u2+01w0MXzrec1jrXu2xleL4LQKq9nwZiML+7Xz1Y4vEcTx4nYbd44VRWeRyPLt5nXgGnw== 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)(376002)(39840400004)(136003)(396003)(8936002)(2906002)(6916009)(52116002)(316002)(478600001)(6512007)(6506007)(83380400001)(2616005)(8676002)(6486002)(956004)(5660300002)(6666004)(107886003)(66946007)(1076003)(66556008)(186003)(36756003)(86362001)(16526019)(4326008)(26005)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: HIYQBvbBMCoUuOkjuJvIXRBLMwiMAdg85jlybP5VXm8dHpEePpnNdlXQwr322oYLIBiuDQSbhs4nVQSGVvCW1pmabZkCO3rWsOdgYFUqq3r8fANVzBLp1Fm3FAwqOh6iKwAQDhqaPeQjZXFEWaZyOq967ZFcmbHevKXsAgNcIUuRuGJt6EEZNi5514Cu2Eu6oCu6c8hFKc6hO+ShpEUPVpFtA2+I3wvUQasbU0iVuC9wYVqSHqsf9S2QyGgyIMofV7rgylRws7xpg24BhhgBxJ8xeg3OmUFG8Q5WUqFvXRHW2riPKQfGmdZ8LtJANqZbSpZk614w6fRuhk0M/qIT5zkBu0V1+YQQgpKf0SDFKRlSwEZ3cwo3lhqxzXsxwCgEzzXijOi+GLGo4SYov/7znXPPlgAKyTFszNHGftpJ2ueB0gpfPWgnmNeBfPdT8GP6tro65aYFucwARIZ8LMav0s7l4/PQDzNzR09SsYoumcoys65WXfDUy+uDYcVVDMS2B2LepDuJBZiZ9ewgOFopLe7vE30YmFqoX3ExS6n19Z6DV/HtwMw9IvTvcXwRp0W07glk6VAoOIRn/gGkTe+8/uxERQrll+tyjVZog3FMlNfrpd3SbgHfiGJwvTxuHYODAQvxY47H6axf98oE6wMKFsX/JTS/iAoKgmwR43IegG/O1Y/qJNjZT/tHLOq24R5oW5fhg5FBVwGoo1G/LSI9tYYpRhp1OV0p3HVoIhqnFAfm3dPgDWXU7vnLp7N6+WI4yW1UuX2UwY2uYvvVDjP2RkCYH0uVfYYsj2enFHkAlBBROYGVofSmv5wfD+U/bVLLYzK3UDiU0wuofH8m181JWDcMqGV7KqS9jmfhbF+hfRUugkjhk1PzjHCwVUWHp3IP9PMt5e3Su8DUj8eaxUvEWEuLkBNq5sUpMj9frNrt8dzAKTRz1NMUsdPWcKS+1elJ68fhmakE/A7kef6YNwRrWUwFBOws20q+XqwmtYoPCMlvRLJ4ZfW0MZa4LDH43dun X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d907fc9c-4fdf-4fba-8df6-08d898a11a64 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:17.4372 (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: 5ezNt2rpF98c0wZXpTFD8GghRxROkdjVo/pgbrByCf8Z5jPzrHvrsKet5joKa6uri+DXSgxa7seOjgi4oURmhcadD4DOFjTsowQtBMSmqE0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.21.137; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich Provide the possibility to pass the 'filter-node-name' parameter to the block-stream job as it is done for the commit block job. Signed-off-by: Andrey Shinkevich Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- qapi/block-core.json | 6 ++++++ include/block/block_int.h | 7 ++++++- block/monitor/block-hmp-cmds.c | 4 ++-- block/stream.c | 4 +++- blockdev.c | 4 +++- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/qapi/block-core.json b/qapi/block-core.json index 04ad80bc1e..8ef3df6767 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2543,6 +2543,11 @@ # 'stop' and 'enospc' can only be used if the block device # supports io-status (see BlockInfo). Since 1.3. # +# @filter-node-name: the node name that should be assigned to the +# filter driver that the stream job inserts into the graph +# above @device. If this option is not given, a node name is +# autogenerated. (Since: 5.2) +# # @auto-finalize: When false, this job will wait in a PENDING state after it has # finished its work, waiting for @block-job-finalize before # making any block graph changes. @@ -2573,6 +2578,7 @@ 'data': { '*job-id': 'str', 'device': 'str', '*base': 'str', '*base-node': 'str', '*backing-file': 'str', '*speed': 'int', '*on-error': 'BlockdevOnError', + '*filter-node-name': 'str', '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } ## diff --git a/include/block/block_int.h b/include/block/block_int.h index 95d9333be1..c05fa1eb6b 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -1134,6 +1134,9 @@ int is_windows_drive(const char *filename); * See @BlockJobCreateFlags * @speed: The maximum speed, in bytes per second, or 0 for unlimited. * @on_error: The action to take upon error. + * @filter_node_name: The node name that should be assigned to the filter + * driver that the commit job inserts into the graph above @bs. NULL means + * that a node name should be autogenerated. * @errp: Error object. * * Start a streaming operation on @bs. Clusters that are unallocated @@ -1146,7 +1149,9 @@ int is_windows_drive(const char *filename); void stream_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, const char *backing_file_str, int creation_flags, int64_t speed, - BlockdevOnError on_error, Error **errp); + BlockdevOnError on_error, + const char *filter_node_name, + Error **errp); /** * commit_start: diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index d15a2be827..e8a58f326e 100644 --- a/block/monitor/block-hmp-cmds.c +++ b/block/monitor/block-hmp-cmds.c @@ -508,8 +508,8 @@ void hmp_block_stream(Monitor *mon, const QDict *qdict) qmp_block_stream(true, device, device, base != NULL, base, false, NULL, false, NULL, qdict_haskey(qdict, "speed"), speed, true, - BLOCKDEV_ON_ERROR_REPORT, false, false, false, false, - &error); + BLOCKDEV_ON_ERROR_REPORT, false, NULL, false, false, false, + false, &error); hmp_handle_error(mon, error); } diff --git a/block/stream.c b/block/stream.c index 236384f2f7..6e281c71ac 100644 --- a/block/stream.c +++ b/block/stream.c @@ -221,7 +221,9 @@ static const BlockJobDriver stream_job_driver = { void stream_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, const char *backing_file_str, int creation_flags, int64_t speed, - BlockdevOnError on_error, Error **errp) + BlockdevOnError on_error, + const char *filter_node_name, + Error **errp) { StreamBlockJob *s; BlockDriverState *iter; diff --git a/blockdev.c b/blockdev.c index fe6fb5dc1d..c917625245 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2499,6 +2499,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, bool has_backing_file, const char *backing_file, bool has_speed, int64_t speed, bool has_on_error, BlockdevOnError on_error, + bool has_filter_node_name, const char *filter_node_name, bool has_auto_finalize, bool auto_finalize, bool has_auto_dismiss, bool auto_dismiss, Error **errp) @@ -2581,7 +2582,8 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, } stream_start(has_job_id ? job_id : NULL, bs, base_bs, base_name, - job_flags, has_speed ? speed : 0, on_error, &local_err); + job_flags, has_speed ? speed : 0, on_error, + filter_node_name, &local_err); if (local_err) { error_propagate(errp, local_err); goto out; From patchwork Fri Dec 4 22:07:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411288 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=wnNYbUTy; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4Cnn853Gwcz9sWR for ; Sat, 5 Dec 2020 09:15:17 +1100 (AEDT) Received: from localhost ([::1]:57264 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJMB-0008OW-At for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:15:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39486) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFg-0003QZ-BV; Fri, 04 Dec 2020 17:08:32 -0500 Received: from mail-vi1eur05on2136.outbound.protection.outlook.com ([40.107.21.136]:31968 helo=EUR05-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 1klJFe-00027F-Ay; Fri, 04 Dec 2020 17:08:32 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AG6jd+pL+VYAp6AYXWn6fnW5VLj8PLzRRA2a3M50lsawciBBGa6H6IzKkornmzCSEY5a2AQljRCvAvUGMxV1hbVjyk4AGHdbq8uIHYJQHimcNwTsSuwDI0DZdcXAezQPpDvEdEfu62usn07ubEMb6eaDBICBQp8cZ4IxebE2TwFMSzc0erRweMOYASOjT1JvCfoO5VT5NCAclzPlbuXTihZPwfcrd5JrxqFsaV3rxX4OD0uuIBSzc2MAO4VoRvABPOwewWiSnVA5chqxWNch5iZG7/VkQKZxJvZhRqQcq3X1Wr0rmR1aoCyeANUpM9Bryb0aWMsH6vYbGUNf3PN1Bg== 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=u9eBQsayu5JcWpiHIPJ+2r2YMxmKgmDefuNR6maw/CI=; b=UXxNHwJ6Qjb2wCn4y/PrZCOb/N7GpTW+foCoaIVGPyThGeb/ZstLSc8/qNVDPGZ+PW70EEYA/HGq4aVxLb42/Gr4PomX5czbGwAN4toPucTo5cWFZ15DTicmfGRXp5vXKyaPJKQnpBtLUlTzACmXxCCqpEwfsMJfULRkXcnA3dzAeaK6HTxVC+V/k0lQ3NIkiObgfaK1u64DxesNrFJFC0qNd3DZJZ22DoA2KwjEmkWOCWFvmDqt5nkK1KeR7ui2t7YsjnNQ1xGi9TwQ8zeISVxjCHbj7Zv45Ubb+YUtvA6FYboiJQvqDgRhHIUwAw/ixCl6+tU5oprbSmzpRGJp8A== 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=u9eBQsayu5JcWpiHIPJ+2r2YMxmKgmDefuNR6maw/CI=; b=wnNYbUTyUEupmaSjXDIMRp3RVhdjdzJMi9uxxowQw4XxAZdE6/n+GtWEjhjBlUv9xzDRTFz1Tmk/bnSA7kQagJdXwEXPAu/ml69QSS41S7GO7lvYk+NgcOx0oR3yDqdnwLi2lsdKlSRP2dTu0743DAtzzW3Xac94M6vyzX3PEUc= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:18 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:18 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 05/13] qapi: create BlockdevOptionsCor structure for COR driver Date: Sat, 5 Dec 2020 01:07:50 +0300 Message-Id: <20201204220758.2879-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:17 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e2ab4f7b-43ac-4b5c-c40c-08d898a11af7 X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Vb/NPDaXkyfzBtshDWN3aC2BuYvuJYomV9Jbv8xZmQUOIV5PHLcmL/B3c0FCBNaymoH4qW/ziAdfryKo68coqCtiDEQkZnF/7Kix6hSkCRooOsQnILHP+NkKneHzEZTFi0Lg+mlcQJk1sao4uv2meYYcenyGrXh9gk2L69DsNiUbK8ueMJz+KzY5cTdLfEped/aBvsAhXpe0RR+qB4usVwFp/5R/8HYkQIFdxf2Nli1FL6MKsh7TPIRZR2pffrPO5RlRsKpNSYXTYOUcLYTbTxgGom8cx61xc08DUOi1HIe1H9LMqCkWzr3BKr3MY3OJCWk5owzm51YZ+vC8f9s/Xw== 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)(376002)(39840400004)(136003)(396003)(8936002)(2906002)(6916009)(52116002)(316002)(478600001)(6512007)(6506007)(83380400001)(2616005)(8676002)(6486002)(956004)(5660300002)(6666004)(107886003)(66946007)(1076003)(66556008)(186003)(36756003)(86362001)(16526019)(4326008)(26005)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 9jDGlP4Nli6VXhXLfo7+L/Kv6H3fXRWsgD+N5uPyf4my4KFEI1YnmLZFkuqwXmhIi6IjWexcnxNfwQu3i8R8xAQt58J4D+/Yi35PTVXyt0eoCxegf/N0XfYWhvQEjSr9BgEeBBqGsz5zg0waq+eGHzjS72Tz/BKvzsHaVZ6gHTBuGXAN5lDrbuhWY8sXn+KJV7e7MizbihrnsEScV5ukiCmdUqQ+OlgOb5S45a7sM8wz+lGVyTPteoStildrDeHt/7dfKh3MGD1EcQvRad0NHvL5OeLQnTiypVVGD6AY7jlfEXvSuv+zo3Iq5ArrJyOzzE78E5GlWlbWP18vTGtPBBQnQFmR7SkWqXXIjZx4E7WGjXhkM9wOOF6L+m5Sd9MLkUBHk2Yt+PUyW4njgQSOhjhfoE/H63Bed0/C7ClDbBcDzFczKCetQaoiHJ2uEdDw39KMGcyweADzGKtfsg8f7RgZ7QEYa3zTODy7Lg2hhW2fx8xJzy2vP5cn9h9I5K8qusUgOjTbt++LNRSSh/whDo/rZPTjbs4V8grqd2WWR5VEvLpKVOxciGEkcr0T2p13altz/GEyivXX+M8wMis7eEAhW2szrqa+269sJHXkaHsYwNV+UAotH9cYdY8P7mflX0xibInrertmttJrsHVV4/3Dwyz9OOkI7tm80iUidtdt1AIlSH+C90l6r6imBbYk7IJcEpGMOe4UGbVLtQKUHCwIB0D1/SgIVRZ3RpwIhvE62ac24lgba4ZeIZ2Eg7JxernX0xuZOEuNdAvtzDBUnl98n/3yrCJ+pleam5/kFgUHWaV6Cn81URzp7b6DKVEBfKYbyc3E6tJsSYk4oBO1An8RLaTg1i2+rN6tpQzz45VfnpuSgdTJmMoSTAos0pqq5KrgSjGZiYcPKPnTybr9NR/P/reRrpIHhton8gtOiLRlWBa/mX4ydp/O5HbWXxMktG/XjDu0wmMzqVPrAHvTZh2UqXcCVT4tVnpqlY075/0ARGTFAFmjdZodUjHopvZN X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: e2ab4f7b-43ac-4b5c-c40c-08d898a11af7 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:18.4866 (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: EjqUA4AZJCEqt/DHoc1HBmi0QpuPX/HzdJa0KOQ2L+p895K4JL3Mj6a3vUSlKonegHqn8IRhqRPHHEakkR8Db8D3mPQIMcjCU/Qi6NO7IAk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.21.136; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich Create the BlockdevOptionsCor structure for COR driver specific options splitting it off form the BlockdevOptionsGenericFormat. The only option 'bottom' node in the structure denotes an image file that limits the COR operations in the backing chain. We are going to use the COR-filter for a block-stream job and will pass a bottom node name to the COR driver. The bottom node is the first non-filter overlay of the base. It was introduced because the base node itself may change due to possible concurrent jobs. Suggested-by: Max Reitz Suggested-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Andrey Shinkevich [vsementsov: fix bdrv_is_allocated_above() usage] Signed-off-by: Vladimir Sementsov-Ogievskiy --- qapi/block-core.json | 21 +++++++++++++++- block/copy-on-read.c | 57 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/qapi/block-core.json b/qapi/block-core.json index 8ef3df6767..04055ef50c 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -3942,6 +3942,25 @@ 'data': { 'throttle-group': 'str', 'file' : 'BlockdevRef' } } + +## +# @BlockdevOptionsCor: +# +# Driver specific block device options for the copy-on-read driver. +# +# @bottom: the name of a non-filter node (allocation-bearing layer) that limits +# the COR operations in the backing chain (inclusive). +# For the block-stream job, it will be the first non-filter overlay of +# the base node. We do not involve the base node into the COR +# operations because the base may change due to a concurrent +# block-commit job on the same backing chain. +# +# Since: 5.2 +## +{ 'struct': 'BlockdevOptionsCor', + 'base': 'BlockdevOptionsGenericFormat', + 'data': { '*bottom': 'str' } } + ## # @BlockdevOptions: # @@ -3994,7 +4013,7 @@ 'bochs': 'BlockdevOptionsGenericFormat', 'cloop': 'BlockdevOptionsGenericFormat', 'compress': 'BlockdevOptionsGenericFormat', - 'copy-on-read':'BlockdevOptionsGenericFormat', + 'copy-on-read':'BlockdevOptionsCor', 'dmg': 'BlockdevOptionsGenericFormat', 'file': 'BlockdevOptionsFile', 'ftp': 'BlockdevOptionsCurlFtp', diff --git a/block/copy-on-read.c b/block/copy-on-read.c index 618c4c4f43..67f61983c0 100644 --- a/block/copy-on-read.c +++ b/block/copy-on-read.c @@ -24,18 +24,23 @@ #include "block/block_int.h" #include "qemu/module.h" #include "qapi/error.h" +#include "qapi/qmp/qdict.h" #include "block/copy-on-read.h" typedef struct BDRVStateCOR { bool active; + BlockDriverState *bottom_bs; } BDRVStateCOR; static int cor_open(BlockDriverState *bs, QDict *options, int flags, Error **errp) { + BlockDriverState *bottom_bs = NULL; BDRVStateCOR *state = bs->opaque; + /* Find a bottom node name, if any */ + const char *bottom_node = qdict_get_try_str(options, "bottom"); bs->file = bdrv_open_child(NULL, options, "file", bs, &child_of_bds, BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY, @@ -51,7 +56,17 @@ static int cor_open(BlockDriverState *bs, QDict *options, int flags, ((BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK) & bs->file->bs->supported_zero_flags); + if (bottom_node) { + bottom_bs = bdrv_lookup_bs(NULL, bottom_node, errp); + if (!bottom_bs) { + error_setg(errp, "Bottom node '%s' not found", bottom_node); + qdict_del(options, "bottom"); + return -EINVAL; + } + qdict_del(options, "bottom"); + } state->active = true; + state->bottom_bs = bottom_bs; /* * We don't need to call bdrv_child_refresh_perms() now as the permissions @@ -107,8 +122,46 @@ static int coroutine_fn cor_co_preadv_part(BlockDriverState *bs, size_t qiov_offset, int flags) { - return bdrv_co_preadv_part(bs->file, offset, bytes, qiov, qiov_offset, - flags | BDRV_REQ_COPY_ON_READ); + int64_t n; + int local_flags; + int ret; + BDRVStateCOR *state = bs->opaque; + + if (!state->bottom_bs) { + return bdrv_co_preadv_part(bs->file, offset, bytes, qiov, qiov_offset, + flags | BDRV_REQ_COPY_ON_READ); + } + + while (bytes) { + local_flags = flags; + + /* In case of failure, try to copy-on-read anyway */ + ret = bdrv_is_allocated(bs->file->bs, offset, bytes, &n); + if (ret <= 0) { + ret = bdrv_is_allocated_above(bdrv_backing_chain_next(bs->file->bs), + state->bottom_bs, true, offset, + n, &n); + if (ret > 0 || ret < 0) { + local_flags |= BDRV_REQ_COPY_ON_READ; + } + /* Finish earlier if the end of a backing file has been reached */ + if (n == 0) { + break; + } + } + + ret = bdrv_co_preadv_part(bs->file, offset, n, qiov, qiov_offset, + local_flags); + if (ret < 0) { + return ret; + } + + offset += n; + qiov_offset += n; + bytes -= n; + } + + return 0; } From patchwork Fri Dec 4 22:07:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411284 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=T9S4Txb5; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4Cnn2s3HsPz9sWK for ; Sat, 5 Dec 2020 09:10:45 +1100 (AEDT) Received: from localhost ([::1]:48658 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJHn-0004pL-8R for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:10:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39508) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFh-0003Rf-VV; Fri, 04 Dec 2020 17:08:34 -0500 Received: from mail-eopbgr10108.outbound.protection.outlook.com ([40.107.1.108]:31004 helo=EUR02-HE1-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 1klJFf-00024O-KI; Fri, 04 Dec 2020 17:08:33 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fbixIhu7sUHbSh5ydtW+Ln0yBPpGaeeudrnvXGmOIw6u6utFb6YxtkAmMnF/ygc8s27EaROIUEv4i3WkHOCNwUFHq1oxVAGAu96pqJyFrYjvqWlbiOmUuqb7aXUAgzw9qYpeYxU5nAF9zLN6owfdq1Jz7frJjil9Y/OqBJOttM92gJWQseSuU9uFRtq7CuZear/G4wul6AuouQWD9YDdLmfq/1uCOKoIy6dt5MB2eYOJoCLKKSLclU8U0ekAICTx6S+dZ0GgrbANnggoqZ9Z5eQo7LzC08lHX1mNnmwiKe7m+/WHL/ht4TgSmiUZCH8xWZ4wwbAgwsQGjJI9HB9QeA== 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=mhjit309SsaDAyHmAW5qOvGafsxH7cNQvCcY7rL9WZg=; b=K+u8sYyKI9/Pi4HzY7pDidk+2pxrPqKWXvH7VpVsOjp+ogcoqfHiwBpTFfQYKbu7WFcijIp69YbC2g7R6DEg3NENrM/6DfQDNRYnFy0W7wrinSpPEJT5xw41ykfqvqfE7S6t1tUXW0t3Wq8DAm/UlwigWm7Ng1CqjlDPqpM31igvwBzB0jsSyG66YeB2MSxg7KJYOvFa63KMHsnr4yOCBFxs0lSUaQi+pa4gkscDEkyr30scUgn6GMOKVBXD0qX9IXp/lfhEUPQoUZCYG2FD3PMzsMK4spTAmAdvOISJqwqf3vIFv7KQaAhZNjcsQIzUNdvPSBC77RE4dXWwnV2gfA== 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=mhjit309SsaDAyHmAW5qOvGafsxH7cNQvCcY7rL9WZg=; b=T9S4Txb5Sk9mbJK+OOem8vNCTb0PDy1oxAM/4ntlKYgMfTzfIXjMtdjxHiWdewfgy8d4rNJ5Dh3TTrb8xhbyLkhbOawHN3u8cZ/XSYuhUncUmrhBRv03AUvsQ0pOwtU+XALP6ZMUuW4FLrg9CSh90KTvR+yZOYHBMTnUbz0mCt8= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:19 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:19 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 06/13] iotests: add #310 to test bottom node in COR driver Date: Sat, 5 Dec 2020 01:07:51 +0300 Message-Id: <20201204220758.2879-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:18 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 371c8d60-0d88-467b-17ba-08d898a11b94 X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YSQeegtxndQODMmQ1IaObzPpoaBTvYr0TlSJQUazrPF8sLVOTZNyjf0D3uD4xekeEKXK+cGGEyKeuZGeRozFbBQWgfQVpAV4cr6UJHB/u6FRQnz1PWRnrylcOJGohr/A691wPxFAFM0/DVYQnQnuLpDP6KmQh2o1ryRAq3I8OcFrW/VHMp16uCLJjIVpjW2e/p8YFMMCclT5ec5VJ2r8StgWAROAZROPtrgwvkMOlv7n+JVqC5/+jyiBD0IxpKP1+isN/7jD/VRnndeVbmxggCdVnOVQgQUDaoCdCmWPKc5lbsMJKbr+Cr2ZJF7ZF3sLDV+9DusRtubToz+S9xlMjTm8MDmXkWwV9w0b5+QpXoF5xqlP3iCgZNv2+zf49pnqGVPXs52o7wwTasmvLr4RANwb11cOk3XgIvKLl0yorw7eq/X9HfNHDMF/zahhtczsmBBggrAtOrfsxTl2OOINqQ== 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)(376002)(39840400004)(136003)(396003)(8936002)(2906002)(6916009)(52116002)(316002)(478600001)(6512007)(6506007)(83380400001)(2616005)(8676002)(6486002)(956004)(5660300002)(6666004)(107886003)(66946007)(1076003)(66556008)(186003)(36756003)(86362001)(16526019)(4326008)(26005)(66476007)(2004002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 4Xxu/ukHpkHVQkrbR77OVG40WALOlz8k/lSzqcWWoNUnrd68QYem+Ic+qgPaT+MnU7Z8rv0hha3ZzKal6iZ8uEeccZILX1RXdLjWwp/Dyxqx3Ad7uA5H1upZ2GKS3YGhugTOfRiEpnXYnrQmPpPHmY4ScSymPDvMaKDwgX/dkqXOd3FOwju5lfK3utZixSp4pA0LFScONJ4GULMUwx00aAJlafg3Kp8KqnY8Hjjslsl31cKtOjqJ9QfEIEtTDtqh9UEviefCO9JzKSnZVpnFzq5n72QBS7byyfiPhJ3aABSGR0xCzrknQ0JDYiZsCEQzEZltcoF/lDuE9IpBtvRD4Md9LpyJ5dFnSM6yriQpgvCPYM6T9wA2pG4ZujXHI9RaGWehCDL9S0pZjplWpphogcxl7SaPLNlpk5qDYprY1rdIB6h1fr4xRB20v10T3piTrSPfYCS3/fXa7KZpOkV3m/++F3ISfdQXG4yww5OpeCPSckiL0vH2FJ5frZfrrmiGv27gzgL1p+sQVqSMHUoT8vPAof0CKqd/sDy6RW9I9u6CthEbG2vNmN1Ugn/xBNXpzFZoTV4LQrtD0amh/RMh2FzTLUjX95bGT/dHDANRPRGgPvElTMeZtWIMdIKEHwsJWVHnjEk1A6DdEzL7cPWd2qAiUTLInkLkbO/TSe3nqieqtZa68k8viQYuqVuo3gBkb7MgVglLinnwg3sQbJg/9xCVVZIp7NAAzFJlXh7xES3RIDjiqPtnRs+VOhUV1m8l2/fZMTEmw9PMtyyiWqDj3mfZwbnP9orFEHGjAxsT9lJ1E041apGbcBQJlMkFfIrL2t8QteCsnasRTTR0Bfw28dBKI2lHpifhYqVxlOhbBnSRf/EsUl6MunJ1n9Oo/iwudJz6RdmRNG+4pIMxi2p+cxmICA0QgX6WTHzmqwigmeU3E1HfnIta570bOVJDNDBeNTsJHBjb2AqxX/EqJYy319S0o06/IXmLpb6HCT2xLna14p7MNMgtkAjY1jUWvVDc X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 371c8d60-0d88-467b-17ba-08d898a11b94 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:19.4116 (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: FjFMtO9OOFz5UMYY6ZwX884gZ5UnJeH9t7NdeUEYydS9X47fAlChEUrk52aMERNrs4G+1YmAdC8tu0WnxHRZ4chIvrRpZ4XaCqf4xUj6q98= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.1.108; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-HE1-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich The test case #310 is similar to #216 by Max Reitz. The difference is that the test #310 involves a bottom node to the COR filter driver. Signed-off-by: Andrey Shinkevich Reviewed-by: Vladimir Sementsov-Ogievskiy --- tests/qemu-iotests/310 | 114 +++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/310.out | 15 +++++ tests/qemu-iotests/group | 1 + 3 files changed, 130 insertions(+) create mode 100755 tests/qemu-iotests/310 create mode 100644 tests/qemu-iotests/310.out diff --git a/tests/qemu-iotests/310 b/tests/qemu-iotests/310 new file mode 100755 index 0000000000..c8b34cd887 --- /dev/null +++ b/tests/qemu-iotests/310 @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +# +# Copy-on-read tests using a COR filter with a bottom node +# +# Copyright (C) 2018 Red Hat, Inc. +# Copyright (c) 2020 Virtuozzo International GmbH +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +import iotests +from iotests import log, qemu_img, qemu_io_silent + +# Need backing file support +iotests.script_initialize(supported_fmts=['qcow2', 'qcow', 'qed', 'vmdk'], + supported_platforms=['linux']) + +log('') +log('=== Copy-on-read across nodes ===') +log('') + +# This test is similar to the 216 one by Max Reitz +# The difference is that this test case involves a bottom node to the +# COR filter driver. + +with iotests.FilePath('base.img') as base_img_path, \ + iotests.FilePath('mid.img') as mid_img_path, \ + iotests.FilePath('top.img') as top_img_path, \ + iotests.VM() as vm: + + log('--- Setting up images ---') + log('') + + assert qemu_img('create', '-f', iotests.imgfmt, base_img_path, '64M') == 0 + assert qemu_io_silent(base_img_path, '-c', 'write -P 1 0M 1M') == 0 + assert qemu_io_silent(base_img_path, '-c', 'write -P 1 3M 1M') == 0 + assert qemu_img('create', '-f', iotests.imgfmt, '-b', base_img_path, + '-F', iotests.imgfmt, mid_img_path) == 0 + assert qemu_io_silent(mid_img_path, '-c', 'write -P 3 2M 1M') == 0 + assert qemu_io_silent(mid_img_path, '-c', 'write -P 3 4M 1M') == 0 + assert qemu_img('create', '-f', iotests.imgfmt, '-b', mid_img_path, + '-F', iotests.imgfmt, top_img_path) == 0 + assert qemu_io_silent(top_img_path, '-c', 'write -P 2 1M 1M') == 0 + +# 0 1 2 3 4 +# top 2 +# mid 3 3 +# base 1 1 + + log('Done') + + log('') + log('--- Doing COR ---') + log('') + + vm.launch() + + log(vm.qmp('blockdev-add', + node_name='node0', + driver='copy-on-read', + bottom='node2', + file={ + 'driver': iotests.imgfmt, + 'file': { + 'driver': 'file', + 'filename': top_img_path + }, + 'backing': { + 'node-name': 'node2', + 'driver': iotests.imgfmt, + 'file': { + 'driver': 'file', + 'filename': mid_img_path + }, + 'backing': { + 'driver': iotests.imgfmt, + 'file': { + 'driver': 'file', + 'filename': base_img_path + } + }, + } + })) + + # Trigger COR + log(vm.qmp('human-monitor-command', + command_line='qemu-io node0 "read 0 5M"')) + + vm.shutdown() + + log('') + log('--- Checking COR result ---') + log('') + + assert qemu_io_silent(base_img_path, '-c', 'discard 0 4M') == 0 + assert qemu_io_silent(mid_img_path, '-c', 'discard 0M 5M') == 0 + assert qemu_io_silent(top_img_path, '-c', 'read -P 0 0 1M') == 0 + assert qemu_io_silent(top_img_path, '-c', 'read -P 2 1M 1M') == 0 + assert qemu_io_silent(top_img_path, '-c', 'read -P 3 2M 1M') == 0 + assert qemu_io_silent(top_img_path, '-c', 'read -P 0 3M 1M') == 0 + assert qemu_io_silent(top_img_path, '-c', 'read -P 3 4M 1M') == 0 + + log('Done') diff --git a/tests/qemu-iotests/310.out b/tests/qemu-iotests/310.out new file mode 100644 index 0000000000..a70aa5cdae --- /dev/null +++ b/tests/qemu-iotests/310.out @@ -0,0 +1,15 @@ + +=== Copy-on-read across nodes === + +--- Setting up images --- + +Done + +--- Doing COR --- + +{"return": {}} +{"return": ""} + +--- Checking COR result --- + +Done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 2960dff728..2793dc31be 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -316,3 +316,4 @@ 305 rw quick 307 rw quick export 309 rw auto quick +310 rw quick From patchwork Fri Dec 4 22:07:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411290 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=Mt7noRAE; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4CnnBY0kwlz9sWP for ; Sat, 5 Dec 2020 09:17:25 +1100 (AEDT) Received: from localhost ([::1]:34300 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJOF-0002G3-3l for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:17:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39522) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFj-0003SZ-19; Fri, 04 Dec 2020 17:08:35 -0500 Received: from mail-vi1eur05on2136.outbound.protection.outlook.com ([40.107.21.136]:31968 helo=EUR05-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 1klJFh-00027F-1w; Fri, 04 Dec 2020 17:08:34 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DK/w1JrZ0eADHwLGgHhbWWB8epVNz8FLQoQ583CAxWVOh3wSjFipNWCUJK2Q9lJO2crSO7jFJu6uf3hK/K55HXPb064VE8Tt1gNrg+R/ZpH4oVm2aGPFAnGMVG+YwArL8Hgi/oXCXdmhxhtZqkx1OpIPCQpls+4SdrOV26uoWnbKe8HOvaQkpkQXUJb8p2Xh+5AmiDNQX5BZXTOx+9aMnjqxCC4UTOdg21Da05Tu+616Gz/pXeefVTrWnRFep2l6UHUD9Yj1nZFJb7c7avJ5c8Zk4pQqYtiIJHvu/W0mlMC27KiAj1XfYL8spgNWWtKx/FyKfQ9G2MzxzCef/UF+1w== 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=H+t1IXKor3ol4iALhRk16dDwM+gNXXBALrC/kgwHZQU=; b=NSZCym6fNCZ1330ptx+Z9M1w1pW66nwAWHLJWorph/xEGHgl5KT0hXRUFSvlh6huFN4f97gisSjzbcIPIx/iDuY9BEHIPd+W03BQV5ZvHoi9rWmqLx9NrXfpSaTlxWek2yNi3Nk0CjKUUY5V4GibtNL26fVyEdSE1jTeMV7IwruN76mAt61RDoQ/WV7GAr9K0xuxBuvDFs8BoyQpkgXZwcpGJSom+q2Y9iTHDgKG59NqPnGG989SrnGO6UF1UIbhsBCLO7zQReYko5CNuMIAOJF5/vfE+Ndx2XDXbV/K26AumBFiQTzB510svLPpNSN5k1VK10pj1KnphujfbYpvSw== 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=H+t1IXKor3ol4iALhRk16dDwM+gNXXBALrC/kgwHZQU=; b=Mt7noRAE9gVDaz+WcmzG2RU6bnLyIRZws2R22j3lezjgGXUcLmlENdTgwcL2jN51ykA4/zahwMk9PQ4ZDPGB2i1S3olkI5bG50trLyCS/uHqP6WTfjkHi3AvVsDoSH3azykbmwG1PElxbSQQ1kwlh7UhgndiutT/g4FX7EPmiHk= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:20 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:20 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 07/13] block: include supported_read_flags into BDS structure Date: Sat, 5 Dec 2020 01:07:52 +0300 Message-Id: <20201204220758.2879-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:19 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ac4c9500-675c-4bf5-2378-08d898a11c22 X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1443; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JxKLKFnumOxHTncoslo9rIZal+bKlYEmIy1CdnXzP2zvw/lZiFjo1HU0ypeRsP5ZtlxtO3iVWjYVYHfrK12W8QJQMZ6PwfMc3GnS6QM6RAcvqrSuizRMHnSVW+XuEGzRpmRa42vmNoE2aEmkybwq/yduTj2gF90kMiDx3g5O+xUCfUpo23dskxBQScYnMpRlHYpNQMQyBL/UhXZJtrZcTYH1D0MJ73VJi4o3OPYLH3kkm7hFGgv9NMKkDxPOuFjG+sEEvoVPW+A9SgbmBoTCyMpgRwxlIRudRPHkCdlBvcwOo1ZZu6R7iXge4nbC0vDKLCYiAlggB36ZeIegfj53Pg== 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)(376002)(39840400004)(136003)(396003)(8936002)(2906002)(6916009)(52116002)(316002)(478600001)(6512007)(6506007)(83380400001)(2616005)(8676002)(6486002)(956004)(5660300002)(6666004)(107886003)(66946007)(1076003)(66556008)(186003)(36756003)(86362001)(16526019)(4326008)(26005)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: cg9NsVzVWUEpA0TAG7K0tXsZAtkvzukSf+Dea3vuZLVLRfd51Td2i2/JvVXOmy7UN7U8/7E+c+70JOCzl+pJg7mNATFsMFNvooOuTU4sBKfVXJ0j8LmreHuCfqYZlBo9egGzhwLxZKst3p2Uw/+yQaxE5BYGArIyH8tz+mBdcuHVWtkd5YDr1kv80idseg/yXCPXcH/5KTSV3hTK9bMXKeVUm5sF3AtY6DFK1h1jFa9KpnvZ6hLKfDopOWr2fKOoojj3pKnSNSi70grwQ13jt4lM5Z6iQixt5dt46jVMN3xwCq6EvWq1e6HcPBAo8ytNRxe5lGOclWbfR9/Wmyqcv+AOSGCySV0CtYa0FSGz9KmBC+YoXKpg0VqJpzpcIPaWxpSJNcn5lGjfgVRJluxZ2iNsbaWrqsh5OHn6AMFZEabvGvSiDStouVZQBkna9A5oLfzLcozhzAn7JLbxkfEuRVLOQQX9TWAPh6hQOTAoApUjKe1Gd+QF+foxQmAVAVE3uV+RWI/a/R2zrSvzBQzb8Hh90xHt2NbbpP4j1NaAsYwdUjsFnpCvWG6yMpCentTPhieFrVH+bm8RNL291Q4SA3godJGxuPwunuuK5/Gf8M2lvbO4a80yIPVb0O4MTBt0AtGfd+epobavCU6qJnG13jSL31AReYGIGl+S7xKCDWbI+nOFJV27xUi0lzYwyUWbUPQCEKDrEEkN9MZvANkvZpQVZUevXaqFlVZyxdbilVfhMSbQm1cRFWevdANXWMBh2qGDqf/2MPGrvx6mv9IUjhPdA1HI0dBBqsfCnPjt/Wl7XKWljtHlhQhN84aYMffIF1BOFjdAyiRItfL5lar2C5XL1wbatMNRPPjvV4zzVNtu37aPonhznOVCQb9OkRTK1vkXB5Bokuy3RCqThNowhU3cnwlM7up/uAiuBC/M+M23obAiViN9L5eSf6x4cfjP0SxaXIqwJI8GTv0slbSG/B/Ng3eltErq+MSCmO2HuQV/HGMsqlycPZuk+cSC++1o X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ac4c9500-675c-4bf5-2378-08d898a11c22 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:20.3494 (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: v35OZzro4fFQseN1iRoDg1LhBFN0rt2APWK03ws3gy45uOywCv0WPLg6l++AhtvC98LhrVVXJ1UDRCmfYb9I1MZ/B2RM2rGuqB8cpQCHST0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.21.136; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich Add the new member supported_read_flags to the BlockDriverState structure. It will control the flags set for copy-on-read operations. Make the block generic layer evaluate supported read flags before they go to a block driver. Suggested-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Andrey Shinkevich Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- include/block/block_int.h | 4 ++++ block/io.c | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/block/block_int.h b/include/block/block_int.h index c05fa1eb6b..247e166ab6 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -873,6 +873,10 @@ struct BlockDriverState { /* I/O Limits */ BlockLimits bl; + /* + * Flags honored during pread + */ + unsigned int supported_read_flags; /* Flags honored during pwrite (so far: BDRV_REQ_FUA, * BDRV_REQ_WRITE_UNCHANGED). * If a driver does not support BDRV_REQ_WRITE_UNCHANGED, those diff --git a/block/io.c b/block/io.c index ec5e152bb7..e28b11c42b 100644 --- a/block/io.c +++ b/block/io.c @@ -1405,6 +1405,9 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChild *child, if (flags & BDRV_REQ_COPY_ON_READ) { int64_t pnum; + /* The flag BDRV_REQ_COPY_ON_READ has reached its addressee */ + flags &= ~BDRV_REQ_COPY_ON_READ; + ret = bdrv_is_allocated(bs, offset, bytes, &pnum); if (ret < 0) { goto out; @@ -1426,9 +1429,13 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChild *child, goto out; } + if (flags & ~bs->supported_read_flags) { + abort(); + } + max_bytes = ROUND_UP(MAX(0, total_bytes - offset), align); if (bytes <= max_bytes && bytes <= max_transfer) { - ret = bdrv_driver_preadv(bs, offset, bytes, qiov, qiov_offset, 0); + ret = bdrv_driver_preadv(bs, offset, bytes, qiov, qiov_offset, flags); goto out; } @@ -1441,7 +1448,8 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChild *child, ret = bdrv_driver_preadv(bs, offset + bytes - bytes_remaining, num, qiov, - qiov_offset + bytes - bytes_remaining, 0); + qiov_offset + bytes - bytes_remaining, + flags); max_bytes -= num; } else { num = bytes_remaining; From patchwork Fri Dec 4 22:07:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411294 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=hV/02+/C; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4CnnGB0vQxz9s0b for ; Sat, 5 Dec 2020 09:20:33 +1100 (AEDT) Received: from localhost ([::1]:43412 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJRE-00061N-UT for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:20:28 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFn-0003WU-MC; Fri, 04 Dec 2020 17:08:39 -0500 Received: from mail-vi1eur05on2137.outbound.protection.outlook.com ([40.107.21.137]:46336 helo=EUR05-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 1klJFi-00029T-8B; Fri, 04 Dec 2020 17:08:37 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kjvG/LHRiZ7o77id5BGCJX5LFG7rX5Uh3uYKx5xgt8BFhhP1pKyYCXm9ULH2QRo4W6fCk2O/Qeqdnz4Ajp3sVGyBEoC4QJYfYHz76EJlupDx+90eWQOLxoUs2qyKpVqUPl1Sg272Yd20Lr9kgK/g5POQGvkWXuFHfV6zgFzSLQZn5paacsMdRnMmm363DcOe5tYnXUfdQ171aDfRVKw4Pa34BQRjNZPjvmUOLTNluDo664LUTO+P+xB7RQpzYGkqMoDjKA95oQjtrTuynqskMvqwWy26dGlk0PMr17G75M9sbgghsOshvd9ZHIaf4Ufh6pCFrQPk2pdhM1vdJ4pVOw== 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=1xnVXsl90TiPFBTKl0BlWd1jBpxp8GuzTkLjGlr/LNY=; b=EpNtpG++WhW4e5vVC5OrLkU3JxvWPmp6l2/3oCpYYQKLneD7dZ6/c2CpQpTFkZS8SuitQDqOug3hs5XaTeXIGlUerVfkXHZG2cjVph5f/pIdUXesdiEfLFK//UZmdep80JJQxuabTuTz5ZZaCUjzxQhagGt5W0FXIcKzitJllN0WQRxmokmsZIfn0smDjatWES8ROV0hTnith3zykpvJkE5H45M9yUd7dRS1QSJxziCeId+WX2ckxfbAB1SoutqQLiRo2CJSTB83l5hyXqRlJ9rMA7NV9JOteOUdoP8FtV05+mPLuKW5Qojs9ikdGuqyBATjne+K0ITOU1FKJv8pBw== 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=1xnVXsl90TiPFBTKl0BlWd1jBpxp8GuzTkLjGlr/LNY=; b=hV/02+/CqhDDzf/MMZi+cB+Ln/w0zO1LscKqucCjAV3s/rW+rOp8sOZzaD2OtewZvIhvC476O+XzxxaNdSr2TjdxT0r6Sm/5YucaO28f5zxk7APCRrcQSCrX0E7bWAJPecnOhn4ESewPEAMWyE/cU2Ic9RwDX2Oz2ulNEj4bwMc= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:21 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:21 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 08/13] copy-on-read: skip non-guest reads if no copy needed Date: Sat, 5 Dec 2020 01:07:53 +0300 Message-Id: <20201204220758.2879-9-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:20 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: be51230f-32ca-4d91-eecd-08d898a11cb7 X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4+iop8y0IP/Ngbw+tvDHnD5tIKxhkEy5cSlPgAKtTwXTJV8PrcTpEfmgwmWw1wVJfnYJ+ZD8XjkMlpNMjVp/97nLFWajPJFwfgT6bQx1XreT6OsYA4mGXH+DsVbM4mAkxiu6eAYgVjp6F4GDlhxsLW5sM9IqPgXAjPy8mg+AI2ky13cod0V5wpQ2OQp4xE8XBa9/rdBa1cXHVZi7Z0uMCWZ+/5WDLsD4//AVgOVo10pHjxKhjdlAodzknsifswCKw+sg+tGELF/7yPBusvn3dN/kws4sP7dx+qtVG0EMotIzN1wQrQ+3ph8NBXNIPB0u 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)(376002)(39840400004)(136003)(396003)(8936002)(2906002)(6916009)(52116002)(316002)(478600001)(6512007)(6506007)(83380400001)(2616005)(8676002)(6486002)(956004)(5660300002)(6666004)(107886003)(66946007)(1076003)(66556008)(186003)(36756003)(86362001)(16526019)(4326008)(26005)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: nZAGNTs7KwrXd9uj231lQSYK81FdgehnOynH3cl7eM8lLz4bUdrYY0WwUFKBOt8qmcLaDCCPEMwBPrXrmsO8JSHgshUga2fW4datHVEHteoBn1Svy7QVutZUINwnyfnJ575gGOp4MLFBbExubU4BmKru/Dv7ea6oW7Y4epJX5Y+I/j9dhKXqRWZb5Yk53FNnZyCkrfDZtxNLnDbd9sw8nduYqFcxPI8DzSKAsWhaL5B1CnjpoFZcdIrUPP9g9/yQ8sPTGGeVchnVog8mECGA5MaXQHXQ74nXj/1VPBT0S4gRek4w7acQ+fsV0YIpGutLAphFHPOhuwz5ObBmX8NQBFmBsR3o2Fm+e3NAJpAOsBE1mhzwaOwm+pV3P2J3Hxlujlq8f6CHTfDc/8BeaFLu8lKIOdnYCTymMyeKHdTBV1pqAdG1KQL9pnVn4CjCzYif2plnuer6Oedd9oMSKVN8eitN/YIuqGar1gCzI2Zcv8fULur6T6HhI8wu3/CVLt6x+YSyP1oG4puFYyP5yFlrxko45VqvMF10UcBRKY/4nzaUbHfwaGxL8XOZu/YBwuMMRRYPn2z02DQ1qyN8PiW24gPsvaj4zVniUjwbsVIJREDecaJvWGIymqVDi+33TsemzOV9rCaebO2i2JDF49xX90GKo2NSDJ6vZTXiNMS7aiiMcRklyByNmgJDidKdClh2vnKzdSPerB+b7KK2UZ32tfvNP2oS8HiLMul65IQZpKHumHabbkxSVPGaxUKd42y+vCt2nIkFPDUTT80dXGh2+5rILCIDlMButT/ewIyGVt2vLnJtlAEAexBSIh0EXtBQUfUr4YIlqm4AtRjd06I53UbhnANX18DnVEpj/9rXbQuUZjcR8lkf2Fh9jPO7csl2iO5Q4K2EOh2jVI8Pd/yDbbUZlaLYQT4qRFa39i/3o9OmevqoDT6K+VY+aRsnPfTt3KFkeCq2UIKyQCURGXYnb2Hp1W/Bdj/RCRbAj8N1do7otPWdfcCeRQ1HBURszMut X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: be51230f-32ca-4d91-eecd-08d898a11cb7 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:21.3660 (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: YsIypCgMwVSom4npan/qi7VBzTfsEsboggnuNwtMx4p6+bScZuVA1601+2y6LtlaM3IMLx+Sl+8+evdt5jd/s8fgRifplKRsMGMjeKWAkiY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.21.137; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich If the flag BDRV_REQ_PREFETCH was set, skip idling read/write operations in COR-driver. It can be taken into account for the COR-algorithms optimization. That check is being made during the block stream job by the moment. Add the BDRV_REQ_PREFETCH flag to the supported_read_flags of the COR-filter. block: Modify the comment for the flag BDRV_REQ_PREFETCH as we are going to use it alone and pass it to the COR-filter driver for further processing. Signed-off-by: Andrey Shinkevich Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- include/block/block.h | 8 +++++--- block/copy-on-read.c | 14 ++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/block/block.h b/include/block/block.h index 81a3894129..3499554d9c 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -81,9 +81,11 @@ typedef enum { BDRV_REQ_NO_FALLBACK = 0x100, /* - * BDRV_REQ_PREFETCH may be used only together with BDRV_REQ_COPY_ON_READ - * on read request and means that caller doesn't really need data to be - * written to qiov parameter which may be NULL. + * BDRV_REQ_PREFETCH makes sense only in the context of copy-on-read + * (i.e., together with the BDRV_REQ_COPY_ON_READ flag or when a COR + * filter is involved), in which case it signals that the COR operation + * need not read the data into memory (qiov) but only ensure they are + * copied to the top layer (i.e., that COR operation is done). */ BDRV_REQ_PREFETCH = 0x200, /* Mask of valid flags */ diff --git a/block/copy-on-read.c b/block/copy-on-read.c index 67f61983c0..8b64e55e22 100644 --- a/block/copy-on-read.c +++ b/block/copy-on-read.c @@ -49,6 +49,8 @@ static int cor_open(BlockDriverState *bs, QDict *options, int flags, return -EINVAL; } + bs->supported_read_flags = BDRV_REQ_PREFETCH; + bs->supported_write_flags = BDRV_REQ_WRITE_UNCHANGED | (BDRV_REQ_FUA & bs->file->bs->supported_write_flags); @@ -150,10 +152,14 @@ static int coroutine_fn cor_co_preadv_part(BlockDriverState *bs, } } - ret = bdrv_co_preadv_part(bs->file, offset, n, qiov, qiov_offset, - local_flags); - if (ret < 0) { - return ret; + /* Skip if neither read nor write are needed */ + if ((local_flags & (BDRV_REQ_PREFETCH | BDRV_REQ_COPY_ON_READ)) != + BDRV_REQ_PREFETCH) { + ret = bdrv_co_preadv_part(bs->file, offset, n, qiov, qiov_offset, + local_flags); + if (ret < 0) { + return ret; + } } offset += n; From patchwork Fri Dec 4 22:07:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411291 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=uOo0WFN1; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4CnnBq0PMpz9sWP for ; Sat, 5 Dec 2020 09:17:39 +1100 (AEDT) Received: from localhost ([::1]:35518 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJOT-0002lI-0a for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:17:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39556) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFp-0003ZL-Oy; Fri, 04 Dec 2020 17:08:43 -0500 Received: from mail-eopbgr10108.outbound.protection.outlook.com ([40.107.1.108]:31004 helo=EUR02-HE1-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 1klJFi-00024O-Ne; Fri, 04 Dec 2020 17:08:41 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SH8m5iL+QuTBT1Bh7c4/0FOAztHbYqIHlGaKapaVjtA/jzu+ruwYQxIZpiqIsB23/5KntduV7wpFsz5q8/C+4qVEZvbMQ3/S7y8HYnCLFmtYRVi+ts482O6N/nlZ1dLY+fyzv2fxEJGs4E6qZ0/BXz5nJ6OE19FcNrogSZ/Yo5MyzBa2llD/b45k8GHCKiwa6lf5ArbWK0g38QqLAUN2YR8qtyYjnRJvRfZHXhs8zzIJcSNM9C6c4RbhIJYB8kGNH58QaX86crBdwvI6n5sFxUw7Dd3NQDQI3nR2hbWd9md00d1ylyk/FVjGIEBTXmMe0+kf1ypB8dXqRgSZxkXl6A== 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=t9wC7kvISxz/8rl88BXgPPvsjQ3pB9fjiWfXET3C+bc=; b=F4ieRtmRHKnKmK2jOKJtSi+wlhgUX+XaSxVq3kWtkJ0El5rutImbGXoSwiSGhhryekTvBQUcrJNd8PUsx5GzQGZ6LPlZfPr1aGWflGTm8QjiwFlP8bSef/p21ewLwGtaBtYji4WwNgWOzB666SXwnVD6kKffN5j+OnKFNfnBe2dS2k0y0UaLJ9crz0c5ZaYyrHgtrdXEcQF05hYtdWWptNHPCvdalugR/acJmm/TaIQm+5zLYo19LmplUQ1ZRljgetU5c0RrUMq4l8KETXMVhFE3gz2pz4whIT9ctD4HYG0zwVQPBmJj2hqf5+oHwE4OYXKIhp+mA+6uZjcxCLDsaw== 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=t9wC7kvISxz/8rl88BXgPPvsjQ3pB9fjiWfXET3C+bc=; b=uOo0WFN14YTvzgbL5+Yj1ZybI/U2f+McV/qz2Ir1uQ5qQv5QKEOajD1mGBjJGcPUveI37IrPlh4584GJ9ubjfKz7AHaurUgIkbQ442lsXJg5a0ziIfu2ELuFSHxTvkCs7AtBXJ31rMaYM9k5SXOzMycMfIe8Ted9zAU3hJwZXcM= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:22 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:22 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 09/13] stream: skip filters when writing backing file name to QCOW2 header Date: Sat, 5 Dec 2020 01:07:54 +0300 Message-Id: <20201204220758.2879-10-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:21 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e80dec1-910c-4d1e-f799-08d898a11d4c X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:146; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: htYxFqpRtRw4AvFqC9y61gPEM+LB/zfIoLBvamqLk/zf4yjKwoovUdVDE2xIdaW4Eu0KySpwDXet9RVPk8iyitZROEFXwdpe5ROPSSbnTjUNWg/g/Wqnx2EOCuf8yfPj7tOWPJ8RhoOCO0yRF3DOJr8ktx2WHsmQ9ZuCG4em9wUqCWgfPKjyqtKm+iIwR4jT+84lXQl5JXVv1DTe/NCClU07oFd6maqW9pj8D8kLojdrNgst4j/qu4bZySYyPboEmM5DcZnPgtrD7oshcZpelFJU9OHkYfytx4yoNCjZrpJfEC2bAcrLRKM2nh0Bgeq8l2TbR4jdcbrUtW/r7Coj7g== 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)(376002)(39840400004)(136003)(396003)(8936002)(2906002)(6916009)(52116002)(316002)(478600001)(6512007)(6506007)(83380400001)(2616005)(8676002)(6486002)(956004)(5660300002)(6666004)(107886003)(66946007)(1076003)(66556008)(186003)(36756003)(86362001)(16526019)(4326008)(26005)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: sk8ulec1kTvkMr9zp1XE3Ny1yjsC6L/e03ELQG11WypCdDjUO2UkVeqvxP+U1dYpcqOEhl9UKw9KZNJfw+PCMMMy6NDRTr6ooQASRzKkTczz0X1hYdw/yx9q/vtSmG/U8q344ooIEON353skb5gDQvNfdDf/dmROpgWJASBarJB58LgtXMGyxNeUtCOB9NXgPcUGBsYeApITdBRwwW2m46rZ9j45qDcQe53SVmb49Gkji8J1NtdekADKSJWXPjJlMawb7mloX3skW3M0DIGBy8PBN18yX7snLwGg+RPUxwAnUvjGTrQZYrFP/uNe65rJXLDK8vG7JWdDQZCvuIj/sOJvD+eUdC7KrPErAOo7fULOL9K/tCBqVvZH2BLKcL0nLycwVx4L6VWv5qSvG3Ya+F/e8xWV9fh8aHhL3fBdGuljzYbcLYLITjpqxwFqel3xv+kLIr645tI6kIi3wS/ykocDB9kOu+sK23FLhFkA/XhoHotS6wUK8572TJoGLDIj0R8D1+4HKb+46Vr56nVwBDjHXd/qRgDAzlbyH9UgXQZoHWCWu+NCgL09tS3Oibj/ii3xcGsaOph2SwJyShX1fmBHzU0rDRkZ+duIRVkOgLKYyaYNueSmuoWcCAmqtPyxP0ebRjHYGFGXsGIBGbcXqbDeUX0iWLJeo3FcfTOVoFM4gAnPa8JCuu/EIU6oot8qhlshZyotdnOvkE8guMsNCQxFcvQ53pLWPt+zqtrm9FgssGG2zG+DJSRDwixKzLs46SGPTEZBnh0u9uBxBfi6TrKu1+gyjO7rf1QxVnOt1xzSfr+z9ssV9NIRQP5hTFJgoqrhrcVA7qOvvISs4lL5o2I+Rtbpwgfd8vPdfa02ynS+QVVLe3FZ1NtFpBTo8ty6ir3asj88qTgtdkKIPLefN7HvTyIRvZJlxT+5bxPRV9H7FMMYofv8Or90Kmmq/cvvahQulwZ89lCaXJE39309ne/zVDsofUZKb82any/s3Zc5XpSYM7BAgDl8kzCwEojt X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e80dec1-910c-4d1e-f799-08d898a11d4c X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:22.3377 (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: yqvS88YTbrG7RolsX+kZSrpZ4PwTvxzZ2nkAZOtzzcOLEQUHnsPMBVOzXjPDUiuyum4+OJn7XfuDqXAI07qPIb7AzLnaj3kbA1I5A1tXOOc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.1.108; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-HE1-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich Avoid writing a filter JSON file name and a filter format name to QCOW2 image when the backing file is being changed after the block stream job. It can occur due to a concurrent commit job on the same backing chain. A user is still able to assign the 'backing-file' parameter for a block-stream job keeping in mind the possible issue mentioned above. If the user does not specify the 'backing-file' parameter, QEMU will assign it automatically. Signed-off-by: Andrey Shinkevich [vsementsov: use unfiltered_bs for bdrv_find_backing_image()] Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- block/stream.c | 21 +++++++++++++++++++-- blockdev.c | 8 +------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/block/stream.c b/block/stream.c index 6e281c71ac..c208393c34 100644 --- a/block/stream.c +++ b/block/stream.c @@ -17,6 +17,7 @@ #include "block/blockjob_int.h" #include "qapi/error.h" #include "qapi/qmp/qerror.h" +#include "qemu/error-report.h" #include "qemu/ratelimit.h" #include "sysemu/block-backend.h" @@ -65,6 +66,8 @@ static int stream_prepare(Job *job) BlockDriverState *bs = blk_bs(bjob->blk); BlockDriverState *unfiltered_bs = bdrv_skip_filters(bs); BlockDriverState *base = bdrv_filter_or_cow_bs(s->above_base); + BlockDriverState *base_unfiltered; + BlockDriverState *backing_bs; Error *local_err = NULL; int ret = 0; @@ -75,8 +78,22 @@ static int stream_prepare(Job *job) const char *base_id = NULL, *base_fmt = NULL; if (base) { base_id = s->backing_file_str; - if (base->drv) { - base_fmt = base->drv->format_name; + if (base_id) { + backing_bs = bdrv_find_backing_image(unfiltered_bs, base_id); + if (backing_bs && backing_bs->drv) { + base_fmt = backing_bs->drv->format_name; + } else { + error_report("Format not found for backing file %s", + s->backing_file_str); + } + } else { + base_unfiltered = bdrv_skip_filters(base); + if (base_unfiltered) { + base_id = base_unfiltered->filename; + if (base_unfiltered->drv) { + base_fmt = base_unfiltered->drv->format_name; + } + } } } bdrv_set_backing_hd(unfiltered_bs, base, &local_err); diff --git a/blockdev.c b/blockdev.c index c917625245..70900f4f77 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2508,7 +2508,6 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, BlockDriverState *base_bs = NULL; AioContext *aio_context; Error *local_err = NULL; - const char *base_name = NULL; int job_flags = JOB_DEFAULT; if (!has_on_error) { @@ -2536,7 +2535,6 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, goto out; } assert(bdrv_get_aio_context(base_bs) == aio_context); - base_name = base; } if (has_base_node) { @@ -2551,7 +2549,6 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, } assert(bdrv_get_aio_context(base_bs) == aio_context); bdrv_refresh_filename(base_bs); - base_name = base_bs->filename; } /* Check for op blockers in the whole chain between bs and base */ @@ -2571,9 +2568,6 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, goto out; } - /* backing_file string overrides base bs filename */ - base_name = has_backing_file ? backing_file : base_name; - if (has_auto_finalize && !auto_finalize) { job_flags |= JOB_MANUAL_FINALIZE; } @@ -2581,7 +2575,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, job_flags |= JOB_MANUAL_DISMISS; } - stream_start(has_job_id ? job_id : NULL, bs, base_bs, base_name, + stream_start(has_job_id ? job_id : NULL, bs, base_bs, backing_file, job_flags, has_speed ? speed : 0, on_error, filter_node_name, &local_err); if (local_err) { From patchwork Fri Dec 4 22:07:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411289 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=FBAc9eqp; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4Cnn864Wbkz9sWS for ; Sat, 5 Dec 2020 09:15:18 +1100 (AEDT) Received: from localhost ([::1]:57260 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJMC-0008OS-Jx for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:15:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFv-0003fB-JE; Fri, 04 Dec 2020 17:08:47 -0500 Received: from mail-vi1eur05on2136.outbound.protection.outlook.com ([40.107.21.136]:31968 helo=EUR05-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 1klJFj-00027F-Q1; Fri, 04 Dec 2020 17:08:45 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lNXlwfcMkB61IR0gRA3Se1yHil2383BbDBOi06Y/XKY/zbxrXCDuD6pv7gRfLxbyTL3uibH8KhvAm7CKWlJ5I4jrL+6pJyK04KPd8I2T6t2QiIFrVme7SPcyFILKSEvkHkVqcRgnAnAYF6W28ESVGFSGYopj4bHonvt+3OxsZnhqI6In/Av3flLzc3+ltkDCf9oEDFVKDRQKe2ZLnLedwey2tnmJHd9GxLBtlHpTUYtEjpTh7E/sUjEGhiVavC3jDVMV3ShWbBpIm04n8kHmTmPSVvuq/Dmo86nNvhVbaKCJK9t0FeWUaiyOSM2yORvE9C1I2N7VEIc//LI5VgCfpQ== 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=3UPkFDTxtb89loCeCCba1X4AvFzQt+MF8OkMfDpe3es=; b=RhJvIDc/Y2bx+JH9DoCZ7vESnibeB32mtxphaDxiyWiVSfWYpKVlq9KH4/mOtjZftnFFiSG27XJE6d8M39v58/wSffwFAyxxb4aoKHZ0nIUXOfGIkHC4miAtwGxUb70CFEicYZ7cqdzV00PTvcT4DWKDkpwU/DvnlKUarvmTMplPtqlF56JUsmBmo0BfoN2RaYOiGyXlso3yK/HS4wwVEHzLjyXNrDklYYJZf4MqCE4ucLAcUntR5Jt1tjueqG8vSczce3O3DkpIYYGKy9I4pOp/Z4SGtLucIJBFzjqs+TBp2I47RwIOBUVWi/aAeSxU62tTndtUbbayjel9+pj5Zg== 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=3UPkFDTxtb89loCeCCba1X4AvFzQt+MF8OkMfDpe3es=; b=FBAc9eqpaYRqcxN76PQjmwAkW4siH07fomCe1psvfi99J5P+L7tACinse32gPNF6K5PywwmOWj8uTC5VZskFCoG4CdvZqA6upZKJnZksChfup2pggjAOA1KsnnljNvZJfOm8W7Q62lIdwLCw+9AtEpTpgLgf+By4HAbDQPMz1Gc= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:23 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:23 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 10/13] qapi: block-stream: add "bottom" argument Date: Sat, 5 Dec 2020 01:07:55 +0300 Message-Id: <20201204220758.2879-11-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:22 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c7cfc02a-5227-4ff3-10a6-08d898a11de3 X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1TP6vbMmkvDwWt3jflUvRVrAjug8YGhTn848I4vTmU+Nmov/tSyuvEPqFbVI6O9MkKEF0jWQ0S9zW4sAsc4esaler37YG79Kol0io5k+Qwg4bdcrltyzoRDD8RDpO8ClYPhwy0Odq0NI7n4B1XG737OxlV7LS3+GfwBzzMlXzrJjxDOuOCaKoYKNH8liN4KWD18o/jDDk6/RPL1zU0+RYkuVjx5jT3prqZba+YWFE/IIO0O9CVLG0DwqONOyQMyxiXfC2b88hxHiNih+u3a4Kz525jGC9dQx1PEW0yPCr9g86+vbf61WK3GW2K2t3GJdq7+g5dvhMxoUMsOcodX6VA== 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)(136003)(396003)(39840400004)(376002)(346002)(366004)(66946007)(66556008)(1076003)(5660300002)(956004)(107886003)(6666004)(16526019)(26005)(66476007)(4326008)(36756003)(186003)(86362001)(6506007)(8936002)(2906002)(6916009)(52116002)(478600001)(6512007)(316002)(83380400001)(8676002)(6486002)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: WxJjZyPtw0JnPLrT2tBEpOz93GnVgR8yxebRZ7X1oq5kSE6J41WsinsL6KQdYNmbB1ccFAO8TgUPHzAK4xjw5Yerj3itQe4L+5X5Bmh1VDZ4CD4aUSj6Fk/NQoB1aOkMVdsj8CJVy+0F2VNLcTl18XruxHZTimsvs7Dyjo64hcCSqtoDj1moU4m6i/t2PGKmOmumsbM/gNLdplZuFd3WqbF7k2adfcOCjR1NTUeQn/zpbk6C+653t2LgeFetgfPrmQMJAZs3omJlL0EGXrMQVB9Qn3XL/P2lf4gJS/ckulfG5FI5PfAiOgxcddzkZtVbQ/9EpYeJ9WSdrB5t12qfprEh7oQrcDMIVjs36zcXzsdW4g5CXlNLCCmTptzg1wEF1W8vGwYUZmbApuyq3cn87VllC1v+y6GbzmxTNbrPffBVSYLAmmVzxN4bBHs7RCliGz35sF7+UqB/oDcD+sl0g/V+CHRhuFN9DGVNip2BM2edtS2Vfb6QU3ZuOtjwJ1phGQxCgcs/dBxe8E2PZhMduQC6sSusTZyT5LjK/xUvr8mDAAGejauz0AVM4KSfE7/5dKuGR8k4DCSv7Mgqz4fy8cTb2x1AIe6NKogX9Ta7tsiaZ2Zgws6Aqfg2+brjNFq1u/JuzuwZ3e/JbuatXfdprZF2PQzsSqN2KEvE458vt7RNj2GRufEICsPrYz3z9k4rZxmwn3TS6Ba+2k+lzjRcX183yozcLu9m2WHofnpA5D4iQb8oZE0FDG3ITHVhN55EAfV7baJVi1ERACeSHAWL+OCLHr4ED7iG3gar06FemDTq4hs9SPNeWmKZnMP8lCbVMusNB84HGlYy8mG6WL89mQDEW5FsFnVYO/zc3ZVaYvdroyjdY2a2DmcI2IZ5azU54kDRQ9nRYKYADnM2THGEsaCC+wovTzm0rsVUjP5KVwsBI92mOYP4OL0RHEsihef2ZUqJhIiFJg6LKUIWzInnGIF8UOb3zfbenY2l9sFpuj6ft5U6NQ0LnQn9nffudfWC X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: c7cfc02a-5227-4ff3-10a6-08d898a11de3 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:23.3383 (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: YcFJBuN/vW62HtkwblxIqKwP491qIe905ePru3vDSmxBcFzR8uhZCbmi+AVfY4UoVBoFcd4rzoNKJvStsmbMcAzcKHmUqD4OmCQ1GfM5gXg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.21.136; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" The code already don't freeze base node and we try to make it prepared for the situation when base node is changed during the operation. In other words, block-stream doesn't own base node. Let's introduce a new interface which should replace the current one, which will in better relations with the code. Specifying bottom node instead of base, and requiring it to be non-filter gives us the following benefits: - drop difference between above_base and base_overlay, which will be renamed to just bottom, when old interface dropped - clean way to work with parallel streams/commits on the same backing chain, which otherwise become a problem when we introduce a filter for stream job - cleaner interface. Nobody will surprised the fact that base node may disappear during block-stream, when there is no word about "base" in the interface. Signed-off-by: Vladimir Sementsov-Ogievskiy --- qapi/block-core.json | 8 +++-- include/block/block_int.h | 1 + block/monitor/block-hmp-cmds.c | 3 +- block/stream.c | 50 +++++++++++++++++++--------- blockdev.c | 61 ++++++++++++++++++++++++++++------ 5 files changed, 94 insertions(+), 29 deletions(-) diff --git a/qapi/block-core.json b/qapi/block-core.json index 04055ef50c..5d6681a35d 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2522,6 +2522,10 @@ # @base-node: the node name of the backing file. # It cannot be set if @base is also set. (Since 2.8) # +# @bottom: the last node in the chain that should be streamed into +# top. It cannot be set any of @base, @base-node or @backing-file +# is set. It cannot be filter node. (Since 6.0) +# # @backing-file: The backing file string to write into the top # image. This filename is not validated. # @@ -2576,8 +2580,8 @@ ## { 'command': 'block-stream', 'data': { '*job-id': 'str', 'device': 'str', '*base': 'str', - '*base-node': 'str', '*backing-file': 'str', '*speed': 'int', - '*on-error': 'BlockdevOnError', + '*base-node': 'str', '*backing-file': 'str', '*bottom': 'str', + '*speed': 'int', '*on-error': 'BlockdevOnError', '*filter-node-name': 'str', '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } diff --git a/include/block/block_int.h b/include/block/block_int.h index 247e166ab6..b13154edbf 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -1152,6 +1152,7 @@ int is_windows_drive(const char *filename); */ void stream_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, const char *backing_file_str, + BlockDriverState *bottom, int creation_flags, int64_t speed, BlockdevOnError on_error, const char *filter_node_name, diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index e8a58f326e..afd75ab628 100644 --- a/block/monitor/block-hmp-cmds.c +++ b/block/monitor/block-hmp-cmds.c @@ -507,7 +507,8 @@ void hmp_block_stream(Monitor *mon, const QDict *qdict) int64_t speed = qdict_get_try_int(qdict, "speed", 0); qmp_block_stream(true, device, device, base != NULL, base, false, NULL, - false, NULL, qdict_haskey(qdict, "speed"), speed, true, + false, NULL, false, NULL, + qdict_haskey(qdict, "speed"), speed, true, BLOCKDEV_ON_ERROR_REPORT, false, NULL, false, false, false, false, &error); diff --git a/block/stream.c b/block/stream.c index c208393c34..a2744d07fe 100644 --- a/block/stream.c +++ b/block/stream.c @@ -237,6 +237,7 @@ static const BlockJobDriver stream_job_driver = { void stream_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, const char *backing_file_str, + BlockDriverState *bottom, int creation_flags, int64_t speed, BlockdevOnError on_error, const char *filter_node_name, @@ -246,25 +247,42 @@ void stream_start(const char *job_id, BlockDriverState *bs, BlockDriverState *iter; bool bs_read_only; int basic_flags = BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE_UNCHANGED; - BlockDriverState *base_overlay = bdrv_find_overlay(bs, base); + BlockDriverState *base_overlay; BlockDriverState *above_base; - if (!base_overlay) { - error_setg(errp, "'%s' is not in the backing chain of '%s'", - base->node_name, bs->node_name); - return; - } + assert(!(base && bottom)); + assert(!(backing_file_str && bottom)); + + if (bottom) { + /* + * New simple interface. The code is written in terms of old interface + * with @base parameter (still, it doesn't freeze link to base, so in + * this mean old code is correct for new interface). So, for now, just + * emulate base_overlay and above_base. Still, when old interface + * finally removed, we should refactor code to use only "bottom", but + * not "*base*" things. + */ + assert(!bottom->drv->is_filter); + base_overlay = above_base = bottom; + } else { + base_overlay = bdrv_find_overlay(bs, base); + if (!base_overlay) { + error_setg(errp, "'%s' is not in the backing chain of '%s'", + base->node_name, bs->node_name); + return; + } - /* - * Find the node directly above @base. @base_overlay is a COW overlay, so - * it must have a bdrv_cow_child(), but it is the immediate overlay of - * @base, so between the two there can only be filters. - */ - above_base = base_overlay; - if (bdrv_cow_bs(above_base) != base) { - above_base = bdrv_cow_bs(above_base); - while (bdrv_filter_bs(above_base) != base) { - above_base = bdrv_filter_bs(above_base); + /* + * Find the node directly above @base. @base_overlay is a COW overlay, + * so it must have a bdrv_cow_child(), but it is the immediate overlay + * of @base, so between the two there can only be filters. + */ + above_base = base_overlay; + if (bdrv_cow_bs(above_base) != base) { + above_base = bdrv_cow_bs(above_base); + while (bdrv_filter_bs(above_base) != base) { + above_base = bdrv_filter_bs(above_base); + } } } diff --git a/blockdev.c b/blockdev.c index 70900f4f77..e0e19db88b 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2497,6 +2497,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, bool has_base, const char *base, bool has_base_node, const char *base_node, bool has_backing_file, const char *backing_file, + bool has_bottom, const char *bottom, bool has_speed, int64_t speed, bool has_on_error, BlockdevOnError on_error, bool has_filter_node_name, const char *filter_node_name, @@ -2504,16 +2505,37 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, bool has_auto_dismiss, bool auto_dismiss, Error **errp) { - BlockDriverState *bs, *iter; + BlockDriverState *bs, *iter, *iter_end; BlockDriverState *base_bs = NULL; + BlockDriverState *bottom_bs = NULL; AioContext *aio_context; Error *local_err = NULL; int job_flags = JOB_DEFAULT; + struct { + bool a; + const char *a_name; + bool b; + const char *b_name; + } restricted_pairs[] = { + {has_base, "base", has_base_node, "base-node"}, + {has_bottom, "bottom", has_base, "base"}, + {has_bottom, "bottom", has_base_node, "base-node"}, + {has_bottom, "bottom", has_backing_file, "backing-file"}, + {0} + }, *rp = restricted_pairs; if (!has_on_error) { on_error = BLOCKDEV_ON_ERROR_REPORT; } + for ( ; rp->a_name; rp++) { + if (rp->a && rp->b) { + error_setg(errp, "'%s' and '%s' cannot be specified " + "at the same time", rp->a_name, rp->b_name); + return; + } + } + bs = bdrv_lookup_bs(device, device, errp); if (!bs) { return; @@ -2522,12 +2544,6 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, aio_context = bdrv_get_aio_context(bs); aio_context_acquire(aio_context); - if (has_base && has_base_node) { - error_setg(errp, "'base' and 'base-node' cannot be specified " - "at the same time"); - goto out; - } - if (has_base) { base_bs = bdrv_find_backing_image(bs, base); if (base_bs == NULL) { @@ -2551,8 +2567,33 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, bdrv_refresh_filename(base_bs); } - /* Check for op blockers in the whole chain between bs and base */ - for (iter = bs; iter && iter != base_bs; + if (has_bottom) { + bottom_bs = bdrv_lookup_bs(NULL, bottom, errp); + if (!bottom_bs) { + goto out; + } + if (!bottom_bs->drv) { + error_setg(errp, "Node '%s' is not open", bottom); + goto out; + } + if (bottom_bs->drv->is_filter) { + error_setg(errp, "Node '%s' is filter, use non-filter node" + "as 'bottom'", bottom); + goto out; + } + if (!bdrv_chain_contains(bs, bottom_bs)) { + error_setg(errp, "Node '%s' is not in a chain starting from '%s'", + bottom, device); + goto out; + } + assert(bdrv_get_aio_context(bottom_bs) == aio_context); + } + + /* + * Check for op blockers in the whole chain between bs and base (or bottom) + */ + iter_end = has_bottom ? bdrv_filter_or_cow_bs(bottom_bs) : base_bs; + for (iter = bs; iter && iter != iter_end; iter = bdrv_filter_or_cow_bs(iter)) { if (bdrv_op_is_blocked(iter, BLOCK_OP_TYPE_STREAM, errp)) { @@ -2576,7 +2617,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device, } stream_start(has_job_id ? job_id : NULL, bs, base_bs, backing_file, - job_flags, has_speed ? speed : 0, on_error, + bottom_bs, job_flags, has_speed ? speed : 0, on_error, filter_node_name, &local_err); if (local_err) { error_propagate(errp, local_err); From patchwork Fri Dec 4 22:07:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411292 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=FASq8uqp; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4CnnCt2QLhz9sWP for ; Sat, 5 Dec 2020 09:18:34 +1100 (AEDT) Received: from localhost ([::1]:37634 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJPM-0003b5-B2 for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:18:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFx-0003hy-Jy; Fri, 04 Dec 2020 17:08:49 -0500 Received: from mail-vi1eur05on2137.outbound.protection.outlook.com ([40.107.21.137]:46336 helo=EUR05-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 1klJFq-00029T-0j; Fri, 04 Dec 2020 17:08:48 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UnKFeHQo8NBZWDin0U5ZDR+fZvofVDj0LPNU6kLze4GsZGIS6nHieuqL03z3Ehv/FgUNRMpHlB+4lMm18/3HDBBQuxuAV5YyKbs7pgEB2n2TiVnazUWpkvU5JH/i6rVOvAPp+sL4eTSvgjqiCRn/ZRlJZhemASTxJZd6F6a10ed5AyYwFCJxJ9rFX0n5OXuOeuzssZe/ySlYZKqyiQtmbdmsK5GN6rFiZkmg+4t6S8V48h9wXjKxgdI75ev6bcpor3BHq+mq6aHbjO/zJPOhZqbU0RKsVoTMBdRhJYdZdudlBjXDGXjGfClvczBQq7MlRCFPo6nyByvRdAaYAqmkNA== 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=4tjK3JSdiSjsBAe3ia9duAfjjtr3RGC//MCeqzMaexE=; b=gAvrdx386km6ItiopI53pnAMLOSAub8RU67R4hamwwfFaNllaJM4d4YxHElQPtOZzd/6hCGc2DlmbUYdhdhqCX6PvNLxtbScf7KHr7rS3Q5hxhYZ2eY2/AKXNHzDOhui9Z3xFYWYTiJY0d4Bj1w7CSHe0P8WI6GcisFuWSjXRnwXDtQIxDRDLNB57eVE5QuUWQ6XbAaNuy52LqL5Uzr/djSZHT/jAY/W4yhGjNPlRxWe1CHnWN7i72ZlWNh99PegVOO6FSNCcRktOUXrXzL+s/kCCQgStVyg0HYKIEyc/h3NMcXufHI4We/RG+MNUd1jeX9qGmB8OGf+U48mTEtmMw== 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=4tjK3JSdiSjsBAe3ia9duAfjjtr3RGC//MCeqzMaexE=; b=FASq8uqp8UMNRtO+csF8cXNX6o9jAd+K4KtpzD4NEoFqFnFrA+Tr4YjoiK4QgzSv4ujvE6bzrfigl3OSCdtUgDHyxOeZo2PgZNocX2B0ejlMLl+DTuv76Ua1333PKRWkIgMKylgXNeGhssDoEJ9ylFjag+SYiGNVp0Z7QCXHzqg= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:24 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:24 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 11/13] iotests: 30: prepare to COR filter insertion by stream job Date: Sat, 5 Dec 2020 01:07:56 +0300 Message-Id: <20201204220758.2879-12-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:23 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 98b06fae-76e6-4c90-91a4-08d898a11e7d X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RhZ5QyyzgbJT2p+LaFDYIo110Kc6feOnAPPYChfeymkAI70oRMJSueSE4Op2kpfG6CnXE+R9k5o1jAMscNMfopWkqKKW/l5IdTU8YzTC4qqgj+zha7xb0Ep/lcCuGtpKBjFfhG49Zf8JGxyyAA/Gs2XdkRWqt3URaGgNolspOXtH0DeYzOOFRLBSk+6/lTUU+5DuWbxYiA+cy8Z5IGK7CrFPLgN4On4IrvI5nvEd0Kkjc/0bm5+YrsAoSOf9Ngc0kYk3BImh9o/D6GY5trDE5Pis879j8AYVZmdrfayCn0OssUMIedH/nOxhcPrZsHyD/7+QxVtNys4GLdEPGR2KVg== 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)(136003)(396003)(39840400004)(376002)(346002)(366004)(66946007)(66556008)(1076003)(5660300002)(956004)(107886003)(6666004)(16526019)(26005)(66476007)(4326008)(36756003)(186003)(86362001)(6506007)(8936002)(2906002)(6916009)(52116002)(478600001)(6512007)(316002)(83380400001)(8676002)(6486002)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 9tfU/n0Vs5Pg+rbO4Agdp2T9+GVYUZL9pYHUPPvs1TtdZMwcco18sQn54AhU813k/Q0Iu8BGHO/zLYn5F34TQDpKNRfEIHDJeTgAGDmJW+0bTWwar4nc6BnsODE+RTxf1Vqx6+7ujHTa+MOw/2sa7eG6JfS2OYM13RxHSC5Gu0eIBINXtn5xSQ17MBOWjb1BhQQNNmplv3oDAkV+LLYtBXMCNxTzCbjKfmKaTWKnt10PNB1VWOosCrxh995/2w7d3jF0qwf354ybAPIUYwdaEar53Lsud+TKQaevQjIG6w+dkefKQ3jWx7qGwK/n0ThHY532NZVLlEzPfHYHFA12fFmgtBsTlblukDXLwN1JBd702X6JWXHi41I8YeUqYinKs2dryPgqCNGyQs9LVLXzzkuCIXse1k+nzl0xLjiLNCVrv12tm2Dy+/yJRJtw5p4J3A7SatjYFz8W9gs5pT+LGZlSUKKabQpcSO19rlvqj1EV6ASCVvH4+Axk2QZ2tO/04rQy+l/x+K9TTWnerDJ1yrq6gEKKAYbsKd+Z27v+Zy1p3bz9yS/OEsDrDpSfEL+FskScNa1cHFG9qUtpnBV/e/Tr5kxlp9fbY8AC+ChjuEUGS1/etAoM8+/gx52cQfvjcdzvMsltliMNF19FDqCv+OieynA6syrfzUG198VPfW1hhN2C31gxZn95b8TtN0c9sqkiD7EfjWA3yDV5MlP3LYWo2RlEUT3D8V8IbGiGLabL+P1K4rQLST5jAtvjJ974Y7W6HJRMMaQ2rPJVIwO8DiFggpdcWqK07wWLm8HbexRuHn6EpbWMenmUTzs1+tOyJJnMU/pQN9hPqRW2hFZeQaMbahPDvUozItK0ixW5AW5igtiebiorhDFZypQNSFq7aHNPhkC7AUYL10+x6ulG0phb4W6ea8RzTLlIR/pN8lLbLVF9pHQOv9dQctIKvyiO/h9M88RL+C2Xzbcbc1nOLaKl256VCzPbu2rlXiNPP+CvADvzm65LwMKox2679HFL X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 98b06fae-76e6-4c90-91a4-08d898a11e7d X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:24.3210 (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: RFhM/Rr1ReK+DdQ02GeM6qB6vYY3F508jt4VV9vCcfnlFqcb/kLsMLzQzTDHTu7PJzJGLhnZXIzU5cOTtpYj4ELe6gAabz0Zu+zme+chtso= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.21.137; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_LOW=-0.7, 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" test_stream_parallel run parallel stream jobs, intersecting so that top of one is base of another. It's OK now, but it would be a problem if insert the filter, as one job will want to use another job's filter as above_base node. Correct thing to do is move to new interface: "bottom" argument instead of base. This guarantees that jobs don't intersect by their actions. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- tests/qemu-iotests/030 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030 index dcb4b5d6a6..bd8cf9cff7 100755 --- a/tests/qemu-iotests/030 +++ b/tests/qemu-iotests/030 @@ -245,7 +245,9 @@ class TestParallelOps(iotests.QMPTestCase): node_name = 'node%d' % i job_id = 'stream-%s' % node_name pending_jobs.append(job_id) - result = self.vm.qmp('block-stream', device=node_name, job_id=job_id, base=self.imgs[i-2], speed=1024) + result = self.vm.qmp('block-stream', device=node_name, + job_id=job_id, bottom=f'node{i-1}', + speed=1024) self.assert_qmp(result, 'return', {}) for job in pending_jobs: From patchwork Fri Dec 4 22:07:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411293 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=ET7dDtrP; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4CnnCz58vbz9sWP for ; Sat, 5 Dec 2020 09:18:39 +1100 (AEDT) Received: from localhost ([::1]:37814 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJPR-0003fg-93 for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:18:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39596) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFv-0003fa-Lo; Fri, 04 Dec 2020 17:08:47 -0500 Received: from mail-eopbgr10108.outbound.protection.outlook.com ([40.107.1.108]:31004 helo=EUR02-HE1-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 1klJFr-00024O-U9; Fri, 04 Dec 2020 17:08:47 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gW6jUysGkFgBBtRYlvB/Ik1iYz+6qmgH62owoOa+5ElxiQhgkJe29Xt8dtOgSCFIge/fl6sR5wNvT/KXsROgWMZWIaTyjIBGm1AJmXc+CUioo9ZN0++1ODhP4/Ei0wfCoTDgzBt94ohA8zLEsoixHxfnQD1daoXrzXCaK/S/qfr1RaLsYN1NW7yJWjhmPePJ2kX3C7f84VkLDjaJRFjmxGkzWSztq44EOvSEcguIkWkibqH6z4qrDsF5uhlpIswjBBGXlsIKiKYnGDm600c/gPN0JA/9Kp4Kbb1YR+6deNHM+9yHi41NOrL95ZkUnE3Xm5PlmWdB18ovSJbCBr07Jw== 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=35dbujSPCJ3TtkzoST0YH/FjsdamthGNlinRWLZiKYY=; b=CQvufDEspXfpCVm/Rvk284IeizYY5aWiwBUOtq7ULl9sE7wCc3zhOJPoNiuA+D9RuEhD6buCxw9OLpSA9B+9LgEL4L+RcAz4EzBRd1OFI0GzL1HrmHRRSiM34QL9kesmzcqaarXYEDb9Q/t8yG2FPp5evrS2yyigbXdv1joGl3sUakXYoH1HHMFEEuo3Q2ONqWF7umB+i+SgmmHtJnfbAQxB9hmrnNoEot6ncsVDRqPPflSykiA1EZT8bXrpDK3q9eBZ0nhyvZzdQchffQBe9NJKlpGbBQS5VtxofENaZypZWwnwe33xfDRgpswwfsrgWKQN4CblcfzgMxNBeIvWqA== 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=35dbujSPCJ3TtkzoST0YH/FjsdamthGNlinRWLZiKYY=; b=ET7dDtrPz2zVSZhE6Mj3xwBIppltrIf5Darl09yTSmY1dbMHpzwVhZu9j/tLJ/+QjbNh9YhnSlfa3hoOyEp0q7lAXH6tWhFp4/XZYXeWuI/xX+3Q1GmbZrsbjkjhbfCTNZjQ6hHCc9JMAbIldxyd2DVG8Nv5hUi1EZLxAwLlfoc= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:25 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:25 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 12/13] block/stream: add s->target_bs Date: Sat, 5 Dec 2020 01:07:57 +0300 Message-Id: <20201204220758.2879-13-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:24 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f37637a9-ae33-4f41-9090-08d898a11f0f X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:137; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oeAUssEEoU2cZYf/pRGYTC+PmpwCnS82o/G4bSgP2AIg8cEO4wDYcAxZXy7uYyNZi2SXB4M1/4v3Kl1qAPh7nA6HAudYCIjxZJ9iNKcxKDBQ4h5eq+3IiiVJiNldiVy9cZoS5EFOkMdjyOoSZ1K2FqUxnkIWqRf0zFpWs4+dEBi3bIYs49pAcvfDpD+27maa13xbGR3HDepdbelp+hj7xQktYwjYicutrfBbwyMsl/EhAbBUHQcK3LU+SLx9dsbFipJ0QvOAGsudS5NUwuEhihXsp2olpYpfRKAPQApcGPDIdHZ3WpyABr3HGKofeQK6NQSM0A748tO1aHC3dCRwwA== 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)(136003)(396003)(39840400004)(376002)(346002)(366004)(66946007)(66556008)(1076003)(5660300002)(956004)(107886003)(6666004)(16526019)(26005)(66476007)(4326008)(36756003)(186003)(86362001)(6506007)(8936002)(2906002)(6916009)(52116002)(478600001)(6512007)(316002)(83380400001)(8676002)(6486002)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: VztQcnctMKThgjlHr2rs8q1D3qIYOwX3qr1qGb+Gy5/5RsLqA8ya1kK67aEsomONBXoeqXHceWsMTI+ryIYL5zkkvuLa1dzqFsnpl/sYEBw8+qbvJkf8c538tDfhNEiI8fkZ3CY9XaLIonmXvHSEP40GCfquuk6gMLlVKwRlTWDIVZk71DPFPBlaMQXt889MDa6GOeZwnFUSNNcLJgeeH88zp9KM4u7jX6nnpkHW5GSlSYRKXc90tnNXtBJ12gE7BvAlCRJaMS9SQtbe2Ymp41jFONgbKfpLuxAUhHJGOyD/bDordOKXhp8ICg1a8qeqnuaGrt+uQ9L0wKzSGqVvfpQtpCKjs+za7z/jozOmu+y0CUX/WESKznSJ9JTNVw1FoNebw2I+1/Cz3ArcvMVqsHMyPwcoEFneTaQodVW6yl9Ks7vOsHDCfL+VpXv88mWJhgODoRNOO3rNMf0s8YHcWT2ytcpGPmAXvGmYk9sAi5O9cdWakoUOFJgaRnIMZZp9H4lud/fNCF1LKCZP2I2qr2gm9wMmHCOZ0KUz10xaJrBG4DV/uHdSOceJ/hgkJGCtCnQHtL/YWXhvCDVuX2cqeU4VhUOFn0S1S92Lnv2EJl9Y4AI3h2P3JY3ZxyZJHoEtQ/MvSbpfytT29HgKMVFXjT+BCqgRholiFsZW/++brpPuD20TAB1H3i7liGN0s2AfD/PA6xCaSziCPK4JtYg/vgWiRdsIYr5woL8nInBP8oAgD+bAYkY3gIJ2Alq4sO8y8HuqkrxwnDrbe7a+03xfPOa3nEICuD7g6LBhW2ed7+0Fjxx7HCwDNRJYpE890QnMvgpx8y27SJgfG1WgxxqZBTLHSyda1N3DIisUK6whOJkIbyMmyrr0MvEB1AMtboYg9/B4l69gXxyffj28hP2+n/ksm8ayPGBHQBrkNh3DZ5vcZurdDlCG6imdO/KC2EFXpru/wn5kJFGstsR2/1+5CTUoR93Yww2BRZ2NZFtf6ZXn/9F7o+PTJRdhJX2sR5yA X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f37637a9-ae33-4f41-9090-08d898a11f0f X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:25.2539 (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: PLv5rMdNwzFb4vHRsqZv6LdH2semZNPw8wgrIc4c3laIpgcuWRNY57yjz/qFMiwr+0IJlrlbxEY6meoB+pglw4ucNNrDGNw163L9oAPC8ZE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.1.108; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-HE1-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add a direct link to target bs for convenience and to simplify following commit which will insert COR filter above target bs. This is a part of original commit written by Andrey. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- block/stream.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/block/stream.c b/block/stream.c index a2744d07fe..a7fd8945ad 100644 --- a/block/stream.c +++ b/block/stream.c @@ -34,6 +34,7 @@ typedef struct StreamBlockJob { BlockJob common; BlockDriverState *base_overlay; /* COW overlay (stream from this) */ BlockDriverState *above_base; /* Node directly above the base */ + BlockDriverState *target_bs; BlockdevOnError on_error; char *backing_file_str; bool bs_read_only; @@ -54,24 +55,21 @@ static void stream_abort(Job *job) StreamBlockJob *s = container_of(job, StreamBlockJob, common.job); if (s->chain_frozen) { - BlockJob *bjob = &s->common; - bdrv_unfreeze_backing_chain(blk_bs(bjob->blk), s->above_base); + bdrv_unfreeze_backing_chain(s->target_bs, s->above_base); } } static int stream_prepare(Job *job) { StreamBlockJob *s = container_of(job, StreamBlockJob, common.job); - BlockJob *bjob = &s->common; - BlockDriverState *bs = blk_bs(bjob->blk); - BlockDriverState *unfiltered_bs = bdrv_skip_filters(bs); + BlockDriverState *unfiltered_bs = bdrv_skip_filters(s->target_bs); BlockDriverState *base = bdrv_filter_or_cow_bs(s->above_base); BlockDriverState *base_unfiltered; BlockDriverState *backing_bs; Error *local_err = NULL; int ret = 0; - bdrv_unfreeze_backing_chain(bs, s->above_base); + bdrv_unfreeze_backing_chain(s->target_bs, s->above_base); s->chain_frozen = false; if (bdrv_cow_child(unfiltered_bs)) { @@ -111,13 +109,12 @@ static void stream_clean(Job *job) { StreamBlockJob *s = container_of(job, StreamBlockJob, common.job); BlockJob *bjob = &s->common; - BlockDriverState *bs = blk_bs(bjob->blk); /* Reopen the image back in read-only mode if necessary */ if (s->bs_read_only) { /* Give up write permissions before making it read-only */ blk_set_perm(bjob->blk, 0, BLK_PERM_ALL, &error_abort); - bdrv_reopen_set_read_only(bs, true, NULL); + bdrv_reopen_set_read_only(s->target_bs, true, NULL); } g_free(s->backing_file_str); @@ -127,8 +124,7 @@ static int coroutine_fn stream_run(Job *job, Error **errp) { StreamBlockJob *s = container_of(job, StreamBlockJob, common.job); BlockBackend *blk = s->common.blk; - BlockDriverState *bs = blk_bs(blk); - BlockDriverState *unfiltered_bs = bdrv_skip_filters(bs); + BlockDriverState *unfiltered_bs = bdrv_skip_filters(s->target_bs); bool enable_cor = !bdrv_cow_child(s->base_overlay); int64_t len; int64_t offset = 0; @@ -141,7 +137,7 @@ static int coroutine_fn stream_run(Job *job, Error **errp) return 0; } - len = bdrv_getlength(bs); + len = bdrv_getlength(s->target_bs); if (len < 0) { return len; } @@ -153,7 +149,7 @@ static int coroutine_fn stream_run(Job *job, Error **errp) * account. */ if (enable_cor) { - bdrv_enable_copy_on_read(bs); + bdrv_enable_copy_on_read(s->target_bs); } for ( ; offset < len; offset += n) { @@ -215,7 +211,7 @@ static int coroutine_fn stream_run(Job *job, Error **errp) } if (enable_cor) { - bdrv_disable_copy_on_read(bs); + bdrv_disable_copy_on_read(s->target_bs); } /* Do not remove the backing file if an error was there but ignored. */ @@ -330,6 +326,7 @@ void stream_start(const char *job_id, BlockDriverState *bs, s->base_overlay = base_overlay; s->above_base = above_base; s->backing_file_str = g_strdup(backing_file_str); + s->target_bs = bs; s->bs_read_only = bs_read_only; s->chain_frozen = true; From patchwork Fri Dec 4 22:07:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Sementsov-Ogievskiy X-Patchwork-Id: 1411295 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=gSJt46mL; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4CnnMg0Gyzz9s0b for ; Sat, 5 Dec 2020 09:25:17 +1100 (AEDT) Received: from localhost ([::1]:52246 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1klJVq-0001dH-Gy for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2020 17:25:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39640) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klJFz-0003ji-PD; Fri, 04 Dec 2020 17:08:51 -0500 Received: from mail-vi1eur05on2136.outbound.protection.outlook.com ([40.107.21.136]:31968 helo=EUR05-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 1klJFw-00027F-UX; Fri, 04 Dec 2020 17:08:51 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OAdeda9ewKlDE86rHhb/QEF9LFIz3DWvmdLqEFs7/DK7zKJNFM0rMy/ndCW4OLLCXgCzl0Gt6coLVTdZYnqMPJroWyODWwRExcftUx0thNyTN6vDcYXhN5ITw+U7yKkTGPrwbnN3+SEbYKN1dDPxfPlW5bKNa0WwUwyicG4Nxq8QjmenHrDQ5gMEArSe8RqYKkKcRTJcMFtdLbzs9oecjh6C+Fv5EOIrMceUsUfxWpy0nzJX8sziRELEuVNzRxwG3O8V40kjI9qv05hkjffpqnhTXPMca8tskmh1ri5QYT0b92WeLdg1ktX7dD8IUstk7Yx/l6EOpDsJfQfew14fCA== 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=8CkpcqzYLk184LzGCIOAvBN9VxggUzkMGCT98MeowCo=; b=bm9gk4qhcep4xhNxRGG7FgUFo9cTqeA15rvoAvuRG8rh4MI5ADTCcw/7jcHrxXXnl4V/RDqrer22DOeqghvyU/rODlbg7stFyjMhwUuwge0J5cRJ26/4lnRh7eP5gZTLLdSxSytyuODf/JekWPeiEaUfIUukQcqucHGeYCCT5vhkZJkCNyvUFT3uv0hYqhi2ch7rfg/HyL5PaQb5AZz4ESLtnPxNsM+2xdK30ZfSWkSEC6xGOkCJ2lnnQXeA7F41LR5NGF0I8V7M4LOpEe/X3QDxEcKHhUd78xbTjPHlCEGstVFi/3hujHezFVPr50SQQn3E2qO/1szbWlsslJi3jQ== 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=8CkpcqzYLk184LzGCIOAvBN9VxggUzkMGCT98MeowCo=; b=gSJt46mLo7Ex0N/Yzc0JVNgezvJ7LAy8mS7SKSzJxTaIYsgxVErioI9K445lkpaI4XC+R5eIgkNVX1H7RgFs40YZWvIuLArgNHwKGfiaCD8tIeoc2O3p3p/fG/wy5e81/Z71gRvfLWELWi/8vc6NJuLI5N47LSjJk/wfc9uEsd8= 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 AM6PR08MB4072.eurprd08.prod.outlook.com (2603:10a6:20b:a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Fri, 4 Dec 2020 22:08:26 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::d585:99a4:d7a4:d478%4]) with mapi id 15.20.3632.021; Fri, 4 Dec 2020 22:08:26 +0000 From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com, jsnow@redhat.com, fam@euphon.net, stefanha@redhat.com, mreitz@redhat.com, kwolf@redhat.com, den@openvz.org, andrey.shinkevich@virtuozzo.com, vsementsov@virtuozzo.com Subject: [PATCH v14 13/13] block: apply COR-filter to block-stream jobs Date: Sat, 5 Dec 2020 01:07:58 +0300 Message-Id: <20201204220758.2879-14-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201204220758.2879-1-vsementsov@virtuozzo.com> References: <20201204220758.2879-1-vsementsov@virtuozzo.com> X-Originating-IP: [185.215.60.91] X-ClientProxiedBy: AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kvm.sw.ru (185.215.60.91) by AM4PR0701CA0003.eurprd07.prod.outlook.com (2603:10a6:200:42::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.7 via Frontend Transport; Fri, 4 Dec 2020 22:08:25 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ebeec4f2-720a-4075-9601-08d898a11f9f X-MS-TrafficTypeDiagnostic: AM6PR08MB4072: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PJYfPpfHWG5QdjaCYrBe6woSNjklDLy8UR1jqBgJIq7nSTxUSxISh8MMIFC0bh2iP90j8Usvteonbj9PLW1CzhnGmZVuMZFlV9+Hef2oYXJq865UM/D2e36WKwtwyHbFfS+bs8CEK2y+UuRvgyuZkwNrBbeNpXDgikLGtmLpIIsBspKmIMZEs+IObZ9k0S0CaKsWl/PAZaMosMBt48+CQipgLmlaqB9Dprv9iFH2jVqC7nO9uuxKcc0RalYVSUOnjljKukv8zUy5rI1EIOthiKbO29Ciss+GrXCaoG9rqXhVVSsRzS6v5TIjx/ngRFTI 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)(136003)(396003)(39840400004)(376002)(346002)(366004)(66946007)(66556008)(1076003)(5660300002)(956004)(107886003)(6666004)(16526019)(26005)(66476007)(4326008)(36756003)(186003)(86362001)(6506007)(8936002)(2906002)(6916009)(52116002)(30864003)(478600001)(6512007)(316002)(83380400001)(8676002)(6486002)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: YgRKaSlwCkuwkHF1ABgX3Bh/P4NjcKmF39PC93MICub7FMg0IAXmA1ydPI0YXkdQF46B0Epu9JjsiSMdeULZeI4WMgpElz0zdTezon6aDpK7wYVQd7HgmyLY7rBJ1P0qpT+BSSrnloWeUNhxYlKNxALoK7jCSiDJFw1jkeUeHqEI4Sn73hku4SLf9Di5FDJKf+1+c3yNAm48nuP7ZWSnCuw8YEPIJd2ZvFiTYdyx7HcGx8MtUjNtwSwIc/bKxcEugcwbcOgcmofdXZbSKTAfAoo1ByjNrqdhS/NsxvnTeMTOVhgiDivz7PuuyiUvDH2kG7B559/eiQsCiFYZx0PYGYw/bve4fRcSPj+8VBQP9LpinNvIRO1FSxRmDt7Twso/kuvUpZckUweq/y96Nv5qqQGn52ITzqfMkCBW1UL3bGJESADD9wUZRl0SHTb+yFOYR1S7fcyDL3LPJ6U/WjcSc+mG5bNkW4t7HHNFHhriyi6S1QhX5kXsx1Lqn+Frex4+iNQltQ/l6EwmYxM2IpZSl0+g/XhGm4TMoHGhZIH2XVrAvB8XWjH+7of8uIx/eBVFQLVGEyKyHqNtcHGXZJkSDdk4DqxRcB/a4D2gw5/k0zLAGcYKAPsU+E7V5TE4p0qXhOdgfBADou52qYr0RGfqHnA3T7J46BuROlq8y1V0oWBgT6BgjjCJY1EU10W49K7eLJGp6FagquDih0pwxfgckCnrGdqZHJ4jVLqLC2EyISJ5MUHJ0E3Fcj3Pgv98etCpdDPpFXGGlXfHS46cpAFugWHvkYYghOvCkO+KvTo8gJz/5EWewrg0JUJ9F2xw1h4597VhI6qyj/9bLC4QaL2kXG6gBgcphDVjY9BWEZBVTK0gdIYEyg2IpmfW8BKwf6QvWHKKbh3LXEzUKZrp1cNf9R7HOAm7MiAATNoQmoGGxTT4XPgKelL0sltGPpTGEdc/FGB8kTZdtPjUPuGbqzv/GBrS2p+EdTP4y40QiIF27FmhyfgUrRiHo5ZV9A6/6EvY X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ebeec4f2-720a-4075-9601-08d898a11f9f X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2020 22:08:26.3033 (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: jLTPptkrGmENlN0Ly5PvD3E98Qqkwu8hAg2TBCKbBS1wxSGCpDw7QAMV35UXyx9kymSANl8wfg/d6St/A2PAvtPD00xz0jzk7UIOUhR3lp8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4072 Received-SPF: pass client-ip=40.107.21.136; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Andrey Shinkevich This patch completes the series with the COR-filter applied to block-stream operations. Adding the filter makes it possible in future implement discarding copied regions in backing files during the block-stream job, to reduce the disk overuse (we need control on permissions). Also, the filter now is smart enough to do copy-on-read with specified base, so we have benefit on guest reads even when doing block-stream of the part of the backing chain. Several iotests are slightly modified due to filter insertion. Signed-off-by: Andrey Shinkevich Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz --- block/stream.c | 78 ++++++++++++++++++++++++++------------ tests/qemu-iotests/030 | 8 ++-- tests/qemu-iotests/141.out | 2 +- tests/qemu-iotests/245 | 20 ++++++---- 4 files changed, 72 insertions(+), 36 deletions(-) diff --git a/block/stream.c b/block/stream.c index a7fd8945ad..b92f7de55b 100644 --- a/block/stream.c +++ b/block/stream.c @@ -18,8 +18,10 @@ #include "qapi/error.h" #include "qapi/qmp/qerror.h" #include "qemu/error-report.h" +#include "qapi/qmp/qdict.h" #include "qemu/ratelimit.h" #include "sysemu/block-backend.h" +#include "block/copy-on-read.h" enum { /* @@ -34,6 +36,7 @@ typedef struct StreamBlockJob { BlockJob common; BlockDriverState *base_overlay; /* COW overlay (stream from this) */ BlockDriverState *above_base; /* Node directly above the base */ + BlockDriverState *cor_filter_bs; BlockDriverState *target_bs; BlockdevOnError on_error; char *backing_file_str; @@ -46,8 +49,7 @@ static int coroutine_fn stream_populate(BlockBackend *blk, { assert(bytes < SIZE_MAX); - return blk_co_preadv(blk, offset, bytes, NULL, - BDRV_REQ_COPY_ON_READ | BDRV_REQ_PREFETCH); + return blk_co_preadv(blk, offset, bytes, NULL, BDRV_REQ_PREFETCH); } static void stream_abort(Job *job) @@ -55,7 +57,7 @@ static void stream_abort(Job *job) StreamBlockJob *s = container_of(job, StreamBlockJob, common.job); if (s->chain_frozen) { - bdrv_unfreeze_backing_chain(s->target_bs, s->above_base); + bdrv_unfreeze_backing_chain(s->cor_filter_bs, s->above_base); } } @@ -69,7 +71,7 @@ static int stream_prepare(Job *job) Error *local_err = NULL; int ret = 0; - bdrv_unfreeze_backing_chain(s->target_bs, s->above_base); + bdrv_unfreeze_backing_chain(s->cor_filter_bs, s->above_base); s->chain_frozen = false; if (bdrv_cow_child(unfiltered_bs)) { @@ -117,6 +119,8 @@ static void stream_clean(Job *job) bdrv_reopen_set_read_only(s->target_bs, true, NULL); } + bdrv_cor_filter_drop(s->cor_filter_bs); + g_free(s->backing_file_str); } @@ -125,7 +129,6 @@ static int coroutine_fn stream_run(Job *job, Error **errp) StreamBlockJob *s = container_of(job, StreamBlockJob, common.job); BlockBackend *blk = s->common.blk; BlockDriverState *unfiltered_bs = bdrv_skip_filters(s->target_bs); - bool enable_cor = !bdrv_cow_child(s->base_overlay); int64_t len; int64_t offset = 0; uint64_t delay_ns = 0; @@ -143,15 +146,6 @@ static int coroutine_fn stream_run(Job *job, Error **errp) } job_progress_set_remaining(&s->common.job, len); - /* Turn on copy-on-read for the whole block device so that guest read - * requests help us make progress. Only do this when copying the entire - * backing chain since the copy-on-read operation does not take base into - * account. - */ - if (enable_cor) { - bdrv_enable_copy_on_read(s->target_bs); - } - for ( ; offset < len; offset += n) { bool copy; int ret; @@ -210,10 +204,6 @@ static int coroutine_fn stream_run(Job *job, Error **errp) } } - if (enable_cor) { - bdrv_disable_copy_on_read(s->target_bs); - } - /* Do not remove the backing file if an error was there but ignored. */ return error; } @@ -244,7 +234,9 @@ void stream_start(const char *job_id, BlockDriverState *bs, bool bs_read_only; int basic_flags = BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE_UNCHANGED; BlockDriverState *base_overlay; + BlockDriverState *cor_filter_bs = NULL; BlockDriverState *above_base; + QDict *opts; assert(!(base && bottom)); assert(!(backing_file_str && bottom)); @@ -295,17 +287,49 @@ void stream_start(const char *job_id, BlockDriverState *bs, } } - /* Prevent concurrent jobs trying to modify the graph structure here, we - * already have our own plans. Also don't allow resize as the image size is - * queried only at the job start and then cached. */ - s = block_job_create(job_id, &stream_job_driver, NULL, bs, - basic_flags | BLK_PERM_GRAPH_MOD, + opts = qdict_new(); + + qdict_put_str(opts, "driver", "copy-on-read"); + qdict_put_str(opts, "file", bdrv_get_node_name(bs)); + /* Pass the base_overlay node name as 'bottom' to COR driver */ + qdict_put_str(opts, "bottom", base_overlay->node_name); + if (filter_node_name) { + qdict_put_str(opts, "node-name", filter_node_name); + } + + cor_filter_bs = bdrv_insert_node(bs, opts, BDRV_O_RDWR, errp); + if (cor_filter_bs == NULL) { + goto fail; + } + + if (!filter_node_name) { + cor_filter_bs->implicit = true; + } + + if (bdrv_freeze_backing_chain(cor_filter_bs, bs, errp) < 0) { + bdrv_cor_filter_drop(cor_filter_bs); + cor_filter_bs = NULL; + goto fail; + } + + s = block_job_create(job_id, &stream_job_driver, NULL, cor_filter_bs, + BLK_PERM_CONSISTENT_READ, basic_flags | BLK_PERM_WRITE, speed, creation_flags, NULL, NULL, errp); if (!s) { goto fail; } + /* + * Prevent concurrent jobs trying to modify the graph structure here, we + * already have our own plans. Also don't allow resize as the image size is + * queried only at the job start and then cached. + */ + if (block_job_add_bdrv(&s->common, "active node", bs, 0, + basic_flags | BLK_PERM_WRITE, &error_abort)) { + goto fail; + } + /* Block all intermediate nodes between bs and base, because they will * disappear from the chain after this operation. The streaming job reads * every block only once, assuming that it doesn't change, so forbid writes @@ -326,6 +350,7 @@ void stream_start(const char *job_id, BlockDriverState *bs, s->base_overlay = base_overlay; s->above_base = above_base; s->backing_file_str = g_strdup(backing_file_str); + s->cor_filter_bs = cor_filter_bs; s->target_bs = bs; s->bs_read_only = bs_read_only; s->chain_frozen = true; @@ -339,5 +364,10 @@ fail: if (bs_read_only) { bdrv_reopen_set_read_only(bs, true, NULL); } - bdrv_unfreeze_backing_chain(bs, above_base); + if (cor_filter_bs) { + bdrv_unfreeze_backing_chain(cor_filter_bs, above_base); + bdrv_cor_filter_drop(cor_filter_bs); + } else { + bdrv_unfreeze_backing_chain(bs, above_base); + } } diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030 index bd8cf9cff7..c576d55d07 100755 --- a/tests/qemu-iotests/030 +++ b/tests/qemu-iotests/030 @@ -278,12 +278,14 @@ class TestParallelOps(iotests.QMPTestCase): self.assert_no_active_block_jobs() # Set a speed limit to make sure that this job blocks the rest - result = self.vm.qmp('block-stream', device='node4', job_id='stream-node4', base=self.imgs[1], speed=1024*1024) + result = self.vm.qmp('block-stream', device='node4', + job_id='stream-node4', base=self.imgs[1], + filter_node_name='stream-filter', speed=1024*1024) self.assert_qmp(result, 'return', {}) result = self.vm.qmp('block-stream', device='node5', job_id='stream-node5', base=self.imgs[2]) self.assert_qmp(result, 'error/desc', - "Node 'node4' is busy: block device is in use by block job: stream") + "Node 'stream-filter' is busy: block device is in use by block job: stream") result = self.vm.qmp('block-stream', device='node3', job_id='stream-node3', base=self.imgs[2]) self.assert_qmp(result, 'error/desc', @@ -296,7 +298,7 @@ class TestParallelOps(iotests.QMPTestCase): # block-commit should also fail if it touches nodes used by the stream job result = self.vm.qmp('block-commit', device='drive0', base=self.imgs[4], job_id='commit-node4') self.assert_qmp(result, 'error/desc', - "Node 'node4' is busy: block device is in use by block job: stream") + "Node 'stream-filter' is busy: block device is in use by block job: stream") result = self.vm.qmp('block-commit', device='drive0', base=self.imgs[1], top=self.imgs[3], job_id='commit-node1') self.assert_qmp(result, 'error/desc', diff --git a/tests/qemu-iotests/141.out b/tests/qemu-iotests/141.out index 08e0aecd65..028a16f365 100644 --- a/tests/qemu-iotests/141.out +++ b/tests/qemu-iotests/141.out @@ -99,7 +99,7 @@ wrote 1048576/1048576 bytes at offset 0 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "job0"}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "job0"}} {'execute': 'blockdev-del', 'arguments': {'node-name': 'drv0'}} -{"error": {"class": "GenericError", "desc": "Node drv0 is in use"}} +{"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is in use by block job: stream"}} {'execute': 'block-job-cancel', 'arguments': {'device': 'job0'}} {"return": {}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "aborting", "id": "job0"}} diff --git a/tests/qemu-iotests/245 b/tests/qemu-iotests/245 index e60c8326d3..432e837e6c 100755 --- a/tests/qemu-iotests/245 +++ b/tests/qemu-iotests/245 @@ -892,20 +892,24 @@ class TestBlockdevReopen(iotests.QMPTestCase): # hd1 <- hd0 result = self.vm.qmp('block-stream', conv_keys = True, job_id = 'stream0', - device = 'hd1', auto_finalize = False) + device = 'hd1', filter_node_name='cor', + auto_finalize = False) self.assert_qmp(result, 'return', {}) - # We can't reopen with the original options because that would - # make hd1 read-only and block-stream requires it to be read-write - # (Which error message appears depends on whether the stream job is - # already done with copying at this point.) + # We can't reopen with the original options because there is a filter + # inserted by stream job above hd1. self.reopen(opts, {}, - ["Can't set node 'hd1' to r/o with copy-on-read enabled", - "Cannot make block node read-only, there is a writer on it"]) + "Cannot change the option 'backing.backing.file.node-name'") + + # We can't reopen hd1 to read-only, as block-stream requires it to be + # read-write + self.reopen(opts['backing'], {'read-only': True}, + "Cannot make block node read-only, there is a writer on it") # We can't remove hd2 while the stream job is ongoing opts['backing']['backing'] = None - self.reopen(opts, {'backing.read-only': False}, "Cannot change 'backing' link from 'hd1' to 'hd2'") + self.reopen(opts['backing'], {'read-only': False}, + "Cannot change 'backing' link from 'hd1' to 'hd2'") # We can detach hd1 from hd0 because it doesn't affect the stream job opts['backing'] = None