From nobody Mon Feb 9 23:01:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1515606039900420.3396541906053; Wed, 10 Jan 2018 09:40:39 -0800 (PST) Received: from localhost ([::1]:56136 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZKMh-00025v-5j for importer@patchew.org; Wed, 10 Jan 2018 12:40:39 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50558) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZKJ4-0007uQ-Pa for qemu-devel@nongnu.org; Wed, 10 Jan 2018 12:36:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eZKJ3-0000r4-DF for qemu-devel@nongnu.org; Wed, 10 Jan 2018 12:36:54 -0500 Received: from mail-ve1eur01on0105.outbound.protection.outlook.com ([104.47.1.105]:55808 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eZKJ3-0000ku-2o; Wed, 10 Jan 2018 12:36:53 -0500 Received: from localhost.sw.ru (195.214.232.6) by AM5PR0801MB2066.eurprd08.prod.outlook.com (2603:10a6:203:4c::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Wed, 10 Jan 2018 17:36:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=GHQasZcaZYw5pcK4W6xZrF+vityi2QWqpao6du82gtQ=; b=g6yV6RhV5A5aM0M5Fo5ZlUwInCekGDELvv+rl+EGQS51LQ1VD92FVu8QtxNQcduoTTWDii47OfJV+yUqdBc/EPuEAO4QMvtgbFMmVmG8L3FUO54NWDCcq2y9JPw1PCaAFLKTzFgC66sRhhA+t7pDcUR71juYt1Ac92G9jLRx/EU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=klim.kireev@virtuozzo.com; From: Klim Kireev To: qemu-devel@nongnu.org Date: Wed, 10 Jan 2018 20:36:35 +0300 Message-Id: <20180110173635.28255-6-klim.kireev@virtuozzo.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180110173635.28255-1-klim.kireev@virtuozzo.com> References: <20180110173635.28255-1-klim.kireev@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB3PR0202CA0004.eurprd02.prod.outlook.com (2603:10a6:8:1::17) To AM5PR0801MB2066.eurprd08.prod.outlook.com (2603:10a6:203:4c::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 93cfa89b-0108-4ab5-460e-08d55850bb71 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:AM5PR0801MB2066; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0801MB2066; 3:+Gmbf3ojTlDlFbDAf5hx7Il6svllCuJIPRIKAsrpLKi1cG2uZeaOCJMfQHWPkPunqriOrkz0lTvVtlPI39SSHBCrvxlCRicO0Hd4MNSBYvCaiRVvYBTMTs31f5KngZKU+RSHroSJPYZVN+K8uOkbjx8Aedq1OpjNf8JRZOP+bYUCKggtAfWHemUY4U+Gi1uIJ9OLOTYIlDgvHqTYnODlEoFscZvnrvs5utJpoa4DkvNWCLK81eiJMHyCIrf34VGH; 25:afUM5qH2RL8B5eCZBjtlPwDuyFGx1znk73JPAbw4ZThVEXU7T1kwUQpcxvb/sWjCurczMWwI/PUhWx/iTWc6e9TdDV7VeBgeIwqK7HeHnBjzHmH6K8XxyQHcarJsdUQ9RmwPD2HHVLSde+WOOffdtRooz7lLi/wCJ1jHzDIOLKaeo9tQHzWrq0eBPX+BI7Yu8lMRFf8E3PT1mWSkk4ydqqkaqB1MsGE73EN6iXsRroEi1SqgtC3ikX7ZRJsiM2EfKXhLbbPh+26cYIKLgTrLahig3MI2Gcnwh3xoLPpwQun3+gKNFmu2ExKgiAXJz0yVsWTjOxhrN4IagdOd7/zOhg==; 31:Y25QaKx28DQceswjjpetZ9OhvMzAqCXb2mDuJOfu8imF05+i2OqBgqiG/8+NU2kjYEujDYUuDXSrW5wi3JNjYxjEploHLkg+GoNDQEbZKGDSZ2NMTTq3Ak+f+chyBKiXROaaAlCb6S/CdC0L24WlcswC1EL7uTDuBwBoOxDGpYrg4EkZkWxaWnthaVve0jkDlrVMluI+jtWmNhftbBK11vvQqgNby8HG3Q9HG4/5UU4= X-MS-TrafficTypeDiagnostic: AM5PR0801MB2066: X-Microsoft-Exchange-Diagnostics: 1; AM5PR0801MB2066; 20:Yy8QyqHjvx+ggRjl0lu0tMiRNxbsahorL7WqRDkI5X8SS8VxgBDdG6t/VWG4gELxVZiarttzpXrwsZtXVRtci8hhVvKY8yv09c23hWwZVNCubbQezSFuIeIDvQtCQViCd2Jtl+tOyiSAusv6A+6QUWetY2A8qow9PKOw7PY4HKU/IqCpbi9nHwcG9JOycYabqwk7HTIxCM0N/Cb+K3fAG8lpGqkaehqx6B4x4tN8A1qA/V141xd5DlVkZGTdIulSf+pDL7mus7kKEa+aXm/2+mffGoGxv+SrAEa/6nbrHea+tjbaB6yH60IGUhIp2N+llDcftA/LYjmtop4MabKhgQJowmCIKIX1p647EsLAS6qOlz3BHw3Qi42QlibmFMgIm5D05uSIdpPitZrRGSHBoFT/4VlWVRUc7d5itG88IYI=; 4:Z9n1gItrheAyhyDLd6zrYVAU9U0msSSY0jnfBCldgR1Srt6Yg+XbcBoSaC3ddbr4QhNsP+frB33JhDVLMqIVy3khU1zAnikfzcRbY1nG6U2lrzR41PZ3lA3F6O7BdVrSuuW30fRhNu52An5xpJBMDOS1MRc7bHCg4m12XAjrdY3sOPq7SBH72GCNsvweJvXPQmhPa0IDq2PSsYuawoY0OKMhpb538Io3ueXc7akDBsc0UYiR0xN8zNkkcnXBtZ0orvJQUFMSMLNvqOfglq8MBg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(8121501046)(5005006)(3231023)(944501075)(3002001)(93006095)(93001095)(10201501046)(6041268)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123562045)(6072148)(201708071742011); SRVR:AM5PR0801MB2066; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM5PR0801MB2066; X-Forefront-PRVS: 0548586081 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6069001)(366004)(39850400004)(396003)(39380400002)(376002)(346002)(189003)(199004)(6506007)(1076002)(66066001)(6512007)(6666003)(6916009)(386003)(50226002)(47776003)(3846002)(2950100002)(51416003)(6116002)(55236004)(52116002)(76176011)(478600001)(53416004)(6486002)(76506005)(16526018)(86362001)(50466002)(5660300001)(81166006)(36756003)(25786009)(48376002)(16586007)(106356001)(305945005)(53936002)(105586002)(81156014)(2361001)(2351001)(69596002)(316002)(2906002)(8936002)(7736002)(97736004)(68736007)(4326008)(8676002); DIR:OUT; SFP:1102; SCL:1; SRVR:AM5PR0801MB2066; H:localhost.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0801MB2066; 23:cjH6oZbX3JHP+JMm16+5deb9NLccbUOGZvZURLB?= =?us-ascii?Q?i1fb5d7/O6FIbgtcYkOegwRdHzS3ZVvN6CNU9XuqfZXawDhg/IwFWtRXVDp0?= =?us-ascii?Q?eEmTSE/vwJPuiWDX6/4Rv70f2TiG4wHKsBzWY7JOpM41sk/WXKcvMVYSlOdE?= =?us-ascii?Q?MDH6HeA1MyjeINifPDyLgjCKlZo1INQ5dxrvzyEs7Q36fdMMICI25nNoascS?= =?us-ascii?Q?Ln+u9le5OVnQwAHVk4WUH4pQmMBa8e+Pna32VAjRBdbaKNrkHi/A0F/wcHAs?= =?us-ascii?Q?T6341TA07Fb26wd8FRUhl+PzZVr13pDwh3S8XI1hl3oP8DMnqd/CwgOtZ0pR?= =?us-ascii?Q?4YWwNN2KGFv1jWqBZJ6m4lPaPlKnBKB1my93/k8pSjl+LNPao6bZqqZzbqHi?= =?us-ascii?Q?eUMWJvTG7JFNJ3E4iTz9Pr/U54vn5zB0VymUm6Gxike2id2t8SnqprcdOxx5?= =?us-ascii?Q?DzbQzaQVD0nky/RHR3Lvf6kwi4B46sp+s9WxL+9Lrl7duRXbRUynFds3n8bb?= =?us-ascii?Q?scHaMMzuuxjSWR3Tk5fvr2x5S1FG+T28tjjQ5iRop2RrIg/s33bCNmx5xQOr?= =?us-ascii?Q?qtpploM72zdxu373O2XDZLTAxhBfv3Ck2OY+XDsZB/qL+halfRa9f3gapZ82?= =?us-ascii?Q?xLfs0A/ImYTR0ftJMYCVIu2QjsZgDorJZtjqeoQvRXItDGUeNHu/Ui3YXhLu?= =?us-ascii?Q?uDCa43OiTcV3zpFSwla4azPj6+ajNdij3rXVj9KVHFcqD4AM7ezBolTvEbPv?= =?us-ascii?Q?8E2f5k1Pp4w0/FY7s005OflDBtuz/suuwrCXA0Ikg4wuiTFEzQrbIZoO14qr?= =?us-ascii?Q?k6MkvPW5b/IyUmRZtCjsLJiwa7v4T2UWsCja5HBI0q5+l6Y1yAmPawTQGMVu?= =?us-ascii?Q?AcdSyJlJJ8S0MYA1quELs5Go5BRu4/n5DwSzWV858jCBZhe9X6TY+dd8/9w5?= =?us-ascii?Q?tpdRkWYmyVJNlSHv+V7WiBtxPe0iQ0TxEiLnTog2QDwmbyEgc+sesdt7FfyX?= =?us-ascii?Q?Z1TNGPokUHnG2fHAyz6UBOhjlrAWrDSePRTABzySJwVUbTZ93E2adoZQPFTa?= =?us-ascii?Q?12Kg7dPLJ3Ha6w+v1GaFlHVskzCnCVIN9kUAFiHAdz4/sJtTbwALy5nBBbcS?= =?us-ascii?Q?B/5AZqqtJDBV+MJgpUq+g1w6ybJ2Ou/frOkDGmfMRd57xtUv9goceqDnZnmv?= =?us-ascii?Q?uZk9Kv73aou/yu9EUwhDE4OQJvJNjKW3NcDVlZCIHVMHchQk2OE/EeB5UAg?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0801MB2066; 6:GzCNIcNwOklQxhpGttHxvX552fTRjNCMHYpgjBRtskyUOWz9bE/23OE6tZ7qjcuF/JVs/u0AZWHKxNwUp/99OhgaRiOfQUNSn+io550qN1SxxOfx2+CENHlqZcPX+3sgcgt+Q+9gW4nM66xeN/ZkRn2WEy/YkpirUbh9vojQ4U/ypNIrftBUjIfd8T3xelZrkIG7QGxg7wqfkjZPv7faAanj19B581c4cv3JprObpfPpsvUH3+NZM+MaoduJT5cIj4EwVcF0hH5SDfmIWcustCxJ/zwIKYwfFwBcVc3GuhDLHVqt98WKLUN8QW9hwtcnBtcwvQhvmdqCHCEV3yyKm168U76kAwh6icNtoKbswQg=; 5:JbR7SASPwW1jgmZuo9D3tvKR5J/90VogCN4jqnY/Rz+4KFNyn760qiroBh9G4JA/i0FhiN0FUr4/j27T/a3rDNAuKNG64KBR8yQxxcOd7jKuYF4lcsuOTGxO3HColNr5+GjCqTjAQmkt+L5+EajaUc+LYulUPdNH8k5c7yVWZJA=; 24:XHvwNC/kNvn2U6FOwhI77c4kBq0JTrdPole50xjrSnistgs2cHdDK2a4qD00e4CfmQd2d2m186R8uvaQ/yI0UWgdnkP2b1iRmNkwUBeVw50=; 7:GFQNUcuc+/4khS9b6DUM/Snv+ksZYh0upT0RL+RG1xtHiLoITxpdYvrtblfH99QoVMf73Nfr+2vtPV+dWqG2d1uZHQh73OtVf/WnRV4xNMt+4mG4fjnHXHhGIo0q0Dj+cbDdPB4DRH3RHuSkMyj11kC9BBh23uANpkpiNqJMCxYVs88qMA4w2KjJCJBJsP/yLuW+JAX+ItZkwWA8h8QOiSLrXQFnYL6NvHmbGcYZlRGYqM1AUu4dsvC0hPOX+xPn SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR0801MB2066; 20:Ba6dTIdwY75TXM55yG6E/fCYBcVzzXzPCx/cKWFh4Zg6mSin0w3w0ZOg1eAhdidqV6d+cTTUd2s+id3KKxcEkyascUchaYZuxGEOfQZNVTT+qIrUuI0JDkQhfhPNXqPASq6bhVdfjWejgJlLW56obAFHO+BsO6Ttsbu9bTFMay4= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2018 17:36:50.1465 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 93cfa89b-0108-4ab5-460e-08d55850bb71 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB2066 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.1.105 Subject: [Qemu-devel] [PATCH 5/5] block/parallels: add backing support to readv/writev X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, den@openvz.org, qemu-block@nongnu.org, stefanha@redhat.com, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Edgar Kaziakhmedov Since parallels format supports backing files, refine readv/writev (allocate_clusters) to redirect read/write requests to a backing file (if cluster is not available in the current bs). Signed-off-by: Edgar Kaziakhmedov Signed-off-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Denis V. Lunev CC: Stefan Hajnoczi --- block/parallels.c | 50 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/block/parallels.c b/block/parallels.c index 7a8e8b05a9..d3802085e3 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -142,6 +142,7 @@ static int64_t block_status(BDRVParallelsState *s, int6= 4_t sector_num, static int64_t allocate_clusters(BlockDriverState *bs, int64_t sector_num, int nb_sectors, int *pnum) { + int ret; BDRVParallelsState *s =3D bs->opaque; int64_t pos, space, idx, to_allocate, i, len; =20 @@ -170,7 +171,6 @@ static int64_t allocate_clusters(BlockDriverState *bs, = int64_t sector_num, return len; } if (s->data_end + space > (len >> BDRV_SECTOR_BITS)) { - int ret; space +=3D s->prealloc_size; if (s->prealloc_mode =3D=3D PRL_PREALLOC_MODE_FALLOCATE) { ret =3D bdrv_pwrite_zeroes(bs->file, @@ -186,6 +186,37 @@ static int64_t allocate_clusters(BlockDriverState *bs,= int64_t sector_num, } } =20 + /* Try to read from backing to fill empty clusters + * FIXME: 1. previous write_zeroes may be redundant + * 2. most of data we read from backing will be rewritten by + * parallels_co_writev. On aligned-to-cluster write we do no= t need + * this read at all. + * 3. it would be good to combine write of data from backing an= d new + * data into one write call */ + if (bs->backing) { + int64_t nb_cow_sectors =3D to_allocate * s->tracks; + int64_t nb_cow_bytes =3D nb_cow_sectors << BDRV_SECTOR_BITS; + QEMUIOVector qiov; + struct iovec iov =3D { + .iov_len =3D nb_cow_bytes, + .iov_base =3D qemu_blockalign(bs, nb_cow_bytes) + }; + qemu_iovec_init_external(&qiov, &iov, 1); + + ret =3D bdrv_co_readv(bs->backing, idx * s->tracks, nb_cow_sectors, + &qiov); + if (ret < 0) { + qemu_vfree(iov.iov_base); + return ret; + } + + ret =3D bdrv_co_writev(bs->file, s->data_end, nb_cow_sectors, &qio= v); + qemu_vfree(iov.iov_base); + if (ret < 0) { + return ret; + } + } + for (i =3D 0; i < to_allocate; i++) { s->bat_bitmap[idx + i] =3D cpu_to_le32(s->data_end / s->off_multip= lier); s->data_end +=3D s->tracks; @@ -309,12 +340,19 @@ static coroutine_fn int parallels_co_readv(BlockDrive= rState *bs, =20 nbytes =3D n << BDRV_SECTOR_BITS; =20 + qemu_iovec_reset(&hd_qiov); + qemu_iovec_concat(&hd_qiov, qiov, bytes_done, nbytes); + if (position < 0) { - qemu_iovec_memset(qiov, bytes_done, 0, nbytes); + if (bs->backing) { + ret =3D bdrv_co_readv(bs->backing, sector_num, n, &hd_qiov= ); + if (ret < 0) { + break; + } + } else { + qemu_iovec_memset(&hd_qiov, 0, 0, nbytes); + } } else { - qemu_iovec_reset(&hd_qiov); - qemu_iovec_concat(&hd_qiov, qiov, bytes_done, nbytes); - ret =3D bdrv_co_readv(bs->file, position, n, &hd_qiov); if (ret < 0) { break; @@ -748,7 +786,7 @@ static BlockDriver bdrv_parallels =3D { .bdrv_co_flush_to_os =3D parallels_co_flush_to_os, .bdrv_co_readv =3D parallels_co_readv, .bdrv_co_writev =3D parallels_co_writev, - + .supports_backing =3D true, .bdrv_create =3D parallels_create, .bdrv_check =3D parallels_check, .create_opts =3D ¶llels_create_opts, --=20 2.14.3