From patchwork Tue Nov 15 06:36:59 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Butsykin X-Patchwork-Id: 694978 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3tJ4Zl2bjqz9t1H for ; Tue, 15 Nov 2016 22:16:15 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="XOxauyxe"; dkim-atps=neutral Received: from localhost ([::1]:45581 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c6bim-0007OJ-DT for incoming@patchwork.ozlabs.org; Tue, 15 Nov 2016 06:16:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46034) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c6bdl-0002wZ-06 for qemu-devel@nongnu.org; Tue, 15 Nov 2016 06:11:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c6bdg-00010H-46 for qemu-devel@nongnu.org; Tue, 15 Nov 2016 06:11:00 -0500 Received: from mail-db5eur01on0090.outbound.protection.outlook.com ([104.47.2.90]:56288 helo=EUR01-DB5-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 1c6bdf-0000zj-Py; Tue, 15 Nov 2016 06:10:56 -0500 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=gXVn0FGvfJlkJH778zHiJ3ysCZId3fzyXiN20c82ySc=; b=XOxauyxebZdCJuMudEn/sYRM0gyeGnL2xr8PS8N9AefxhNkvREpQZ3mOV3eF6Z5WYnu5LcwGhdHS2+MG/r5klGoojl1WbroI7g6fhVLrcnQu53eJfPAfKye/bZguX8Yd9919DzJfvTJJ1Ykt5kOVdKqrGjL9YOUF8cx72LsCT3U= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=pbutsykin@virtuozzo.com; Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.10) by VI1PR0802MB2558.eurprd08.prod.outlook.com (10.172.255.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.721.10; Tue, 15 Nov 2016 06:38:12 +0000 From: Pavel Butsykin To: , Date: Tue, 15 Nov 2016 09:36:59 +0300 Message-ID: <20161115063715.12561-3-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20161115063715.12561-1-pbutsykin@virtuozzo.com> References: <20161115063715.12561-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AM5PR0101CA0010.eurprd01.prod.exchangelabs.com (10.169.240.20) To VI1PR0802MB2558.eurprd08.prod.outlook.com (10.172.255.136) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2558; 2:l51QrHWE2WmcftYmUJwIa1//lwmGVDcLPx6IA0yYVc0q5OlU3CMWP35VrosV/E/Hy7+HlGgi6MMP/txnkMCDtttCNNPky54BQ/8f4zrzIJ6UqlGe1HPUmcb4RL+Ofve5UEVX0TDyRFEM+eTd7QhJPlk97w4gS4Qbsu3u4sXsuV8=; 3:LkjgLtVm7FWsye6H+xF1I76gWK9VZfBggRa58LtWFXZIxNRBWsMlC7lyq7xbMNM4tQRIG5Drn2V+cC7pdqbXYQd9IuHe8iYQDFSRjGIuYIHArIYBfHZ6zX5qDQMnc/qtrykjyjn1kHNWNgCO6XbWzedFPALXAQHQhOArA/BOWpY=; 25:Je5f1eK2FMWl7yQia7EXzfdNBaZassFL+4/Cx3V9rgnuzfX1fwIv7FxN/NecxG0jtKELmsK0R5rF7fzOc4MKiYUQVOaST8CJXLX9cXa23Z9hC/qzF0ynNfj55gsuD++xV4RoSIQyvzHJYV3/10HpAkrDQiYUmuQPBBWbw7JoXbFfE1x+Huo+xIiwP76ZEalfLiK4rWxljjimc2Ruh038RCUsCmr64za6DCbTjoDCjofdsOKfGQhn2+bagM+YgPaI7vntJSg1BqsdUCO7Aaky401PgCSAXkdjmhrkqfCJqMWIYjigh0F1MzZd13xc+xN1TZRywZagG+gr8KaQo7Tz+cldIK8Lp54h72QXoyt5doW8wXZYc6PJAXR2Su5LUmqeDIqHqHSVsYYWInT83ItQ4h+BaCmJqWAwtn8H4a6f6GVvXYtL8XwW4Kq78m3rceLm X-MS-Office365-Filtering-Correlation-Id: 90b02942-78bf-452a-fc1c-08d40d21f949 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:VI1PR0802MB2558; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2558; 31:vpB+6wJSLATXo/cVRYdnayz5f3WssIsw2VYjVTPhFe1Mp461yFmnEF0TIEyos3mQX4GTxXsedbq3DE5oPjAbVswMvA5tKUJ0NZKv3+9cw2/boRyCevCR2RB8qP5sx8NxNyCiwmFyr0AsJdO2uWsvKj1DqTnEo7hv+5ch9LjpGMxrs2JhEM7ZQioD5b/BmMZVKzJ/0OCaG3CfsCpQTpXIKKlG/swKiHfjHUR4YTWDlg4PI+4XoKngsXxKLcRoA67poiqr9Mxt3aCJLDaGMBWLuQ==; 20:0oioc0VB8Zc7LO5L6SsKdAF/Ux4CSdJHfHTSpvwNMciApTTTr3Es39OeQtDV6QPm7DiIvmOLhC6TqkQgSNQxalkxEPLCQGjjpXhQ3IRQDRdGX+cQrfl495Dg2gtEz4WsQlMuQ2CNOhfwHx2i0hoSqW9DSb+9XkGuoclJ8vQ6F1g=; 4:fyfCDIZsTq4+Qs1IZg2nw2T76euCvExN+m6tUA5fBIvIVZi37SnIV5hY2Gb7Nky/4qy2N/kQ03s1i2gKYoIIruC+N3XZgP/SoiesHFqfox0kGOMwd+V+gmFgIbDz0uKMN7uAjZv69il0Vx2Vn4MjzB69TspfxjnO/s+NOILl/wmXA7ByA9FPPauZLYQlQJfysJ6VRIgrnDNNIG1Zx2OBV/gvfUcn9kkqUYB1ZDEIIX6ThoB72fgwEtH0H0rWjldYAAJIOVQJTh39uwgTwg2ekxRwwM1cddhX/JcDGIwfVwKiUUAnteV+sP/psWcHK07PaA8t2HZ3T6oJi4fPIIVcXXZXqeJb1x3PXOtlaQ9OWtiHIeWiGipm4zeC96eoTa2y1NFGpv3mVCPv9e8EKaiKkTgewwOV7sMP6F1NVJ8Q1Fr9cXCfBs5QAzMK0CEbQmSy X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6060326)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6061324)(6043046); SRVR:VI1PR0802MB2558; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0802MB2558; X-Forefront-PRVS: 012792EC17 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(47776003)(105586002)(101416001)(1076002)(68736007)(106356001)(6666003)(76176999)(305945005)(4326007)(97736004)(66066001)(53416004)(189998001)(42186005)(69596002)(2906002)(7736002)(5001770100001)(7846002)(86362001)(48376002)(50226002)(2950100002)(50466002)(50986999)(5003940100001)(33646002)(77096005)(81156014)(8676002)(92566002)(81166006)(3846002)(36756003)(6116002)(5660300001); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0802MB2558; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2558; 23:M/RQXhPOBoTuF3811/rj1m8Ay1+1BdaBVSvRBjA?= =?us-ascii?Q?U5zXRoeGNyQZyKSFI0ePKeB25AxLTPhwRkSn4O71XDh69b1g/4yR39KqhCqR?= =?us-ascii?Q?XRLhye+9BscvzHQ3rZkYcaM1rSW8vcIDlwQmlMiT4u79OjQ+PmCJv6SVZ86f?= =?us-ascii?Q?qfCb3GtFk/m5so0m8BOnDSlBmFbRqEeKBwnrf3c+fHPiUmpkGZzn+f8r7Tsf?= =?us-ascii?Q?0WusmmOwoKb1q1yhPixoMCK0W1xXXCZs0TKGeACjxjjNxfiLo/fFfVKT8C/N?= =?us-ascii?Q?aRL0rLfxjnbXR538PVO9uL2h7KHdl5UVkCpi3QbBteaWR0f6KplnrDsQf+9V?= =?us-ascii?Q?7HMtykxiuDIxd/CpDnv+5CYKTJ/V5lQfK1wJIBrSVCnPDkv1jP6pgueJEtGs?= =?us-ascii?Q?Zn1+RkN+z7as41M+Yu6ygdEGBRwnJVr8C3JDU2qCt2Avd1GQ2qi3Ph9tYj7+?= =?us-ascii?Q?/wBU2a9Un825KXSEUapEBTMy5/Onp8nBtCwnQP0AbBsp+0Z+SqcRXKi+ITcc?= =?us-ascii?Q?1RzQmLEY8RMmall+6UhQmnfH7bC1kpotIOS4UfrvU/DMBTXeZfrMjen3aEKA?= =?us-ascii?Q?b4S6iFTV6xNqSc/DZK5b3Quxtr8L61/tdtCCihchnmmJLwKHhdeKZYKprzvi?= =?us-ascii?Q?SfsbAQbytOfWnzfe6yrJMQS+ItBiY+z3bvq5GPMs4/eQHsoEa8LWwXK2ZU+S?= =?us-ascii?Q?QQZjnhfX//aF58r5fKpnFJI8sH/0h37L/sdxhxqultOxgVbpxXSRq1rDxbgp?= =?us-ascii?Q?xw36lhZrPVGk/bh705Zd4U4+samDsp6RLPs3FFHASJLbhqd0Dmw5kqnEw16Y?= =?us-ascii?Q?v379tWSQEc3RrTW7DI81SSOeYj2WYVQUCsj0kXNlNP6eBOdS1L/68Owg2EPj?= =?us-ascii?Q?C+rna0aaJ1k7fpjYWufTLm6w3WAE71wQOqxtiuKnRv2SPl7wMrMkQQHlaNi3?= =?us-ascii?Q?ITUsGUXtBvKGPezngf66BpnayEdERPQJhQyZKB3ksRuTNLZ2gNNeKgd/Mh/0?= =?us-ascii?Q?I43TZ/xWoax5xCzyZbKsQqwpSaE9puqU8a6tYUwGuM945y+Vf+msMazwjikL?= =?us-ascii?Q?uUWtPR1oxzmRKQo9CQSeRUsASkEsp?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2558; 6:511lzo2nOUD0TkrvQOjELqlcPL7GeW1eg1Bq4kXtuHCMKQbJm0E6vDfPwkBQrcTH0SVpmjPQYeWWLtvv14TH5O0ePLFfAF8YB4YDYdy0qLTiVBWVJMALFMJ+cyJNOF02cvGBYSAcXeDwTowUPNKxkivrcFXrXZTkp5e/uGwmW4mbkfaswj/Z9uHwMOJAOSYMEdcWnwvDHSuUoCuBxiPgFO4KLMOtf0sJ+o2brTsG+D2hgGIw7LT39MC6Q5tv9mLwJkmIpfQ3KDVw4dH56XkopxgqCvN/g6m4s3qDj7HDxUN4KkrZXtYuh5xRNOxeflwdZ5prxQRT3abVSfE0afYgpgespE8GfCcyPWjKrhRODjxeH/YwjQOyCOYN6TJFtX5I; 5:/DfiN+fozvglBhYeebfuWAqdqpiHBoy7mwU9GyiRQXD/SJfhLL0R1n/WWT7Y24+lJ4dRPKjW+bTVBOLXM4lWJXzfI8M9RvIvv1vXhLjW29OJ9QCJ172+mVq0OHr7Fw69YQ2XxdPuj1spPi1cyASt//rpdU6+OxvX+1lIsk0u99A=; 24:0fN9J5oVvlqLHig64Da4x22prDH6o48h9kmBSVL9+XysiyR7NNPmoxUZfhSNM5hRe+XtFM0irEwJ52Kr9Jdf2KtNsmQLrrA15TQWdK33Rx8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2558; 7:nX9HtCn82RCqPNS6YCdVamlQInhxbqbquWl09zo5qvRw4s32Zftn4tQzWfjY0uWcOQDgs5JBcJ4axQm6EGfKT4RsBA+EHG8WosGwCxDLW89IAUxiElP9fDXE3ykdqI0EK2/7x4QbSLuEZLXok224upGqQsALKhgRAZUwwQ15pelf34GMWz5I810M7hJQfTywevU/lVeaoFIQifFtaoTRPZB+Im47QYjr9blTtZQmepFowS4gH0cBXbwq7Bxro/0i6DNlC7Ge1zcG0s+INEV3Y0gawnvZL+7tH2V1afd2dUeoM+fpCpZgWUrVPD/l3hCqod2dkIGZDCZWUt+IT7nUdCo0xOgPfEbhB0Qc8VmnWDM=; 20:uKa4Ny1vCiHELPFX1aIwRjR6j1r4OyyoDpSiK3yMSBes+Jb/K784FyFXj4pKl8WFVOBQgaGcvoodqbtRaFDAc60QgmVJZka3+HTtNNbebAUfYr4VZcxT4/KeNderG7rbTNmmKeD66cipHLOFY9i8Z6ZDIcxVu/VCZAQ2DB+AChw= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Nov 2016 06:38:12.6604 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2558 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.90 Subject: [Qemu-devel] [PATCH v1 02/18] block/pcache: empty pcache driver filter 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, famz@redhat.com, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" The basic version of pcache driver for easy preparation of a patch set. Signed-off-by: Pavel Butsykin --- block/Makefile.objs | 1 + block/pcache.c | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 block/pcache.c diff --git a/block/Makefile.objs b/block/Makefile.objs index 7d4031d..c60f680 100644 --- a/block/Makefile.objs +++ b/block/Makefile.objs @@ -4,6 +4,7 @@ block-obj-y += qed.o qed-gencb.o qed-l2-cache.o qed-table.o qed-cluster.o block-obj-y += qed-check.o block-obj-y += vhdx.o vhdx-endian.o vhdx-log.o block-obj-y += quorum.o +block-obj-y += pcache.o block-obj-y += parallels.o blkdebug.o blkverify.o blkreplay.o block-obj-y += block-backend.o snapshot.o qapi.o block-obj-$(CONFIG_WIN32) += raw-win32.o win32-aio.o diff --git a/block/pcache.c b/block/pcache.c new file mode 100644 index 0000000..59461df --- /dev/null +++ b/block/pcache.c @@ -0,0 +1,144 @@ +/* + * Prefetch cache driver filter + * + * Copyright (C) 2015-2016 Parallels IP Holdings GmbH. All rights reserved. + * + * Author: Pavel Butsykin + * + * This work is licensed under the terms of the GNU GPL, version 2 or + * later. See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "block/block_int.h" +#include "qapi/error.h" +#include "qapi/qmp/qstring.h" + + +static QemuOptsList runtime_opts = { + .name = "pcache", + .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), + .desc = { + { + .name = "x-image", + .type = QEMU_OPT_STRING, + .help = "[internal use only, will be removed]", + }, + { /* end of list */ } + }, +}; + +typedef struct PCacheAIOCB { + Coroutine *co; + int ret; +} PCacheAIOCB; + +static void pcache_aio_cb(void *opaque, int ret) +{ + PCacheAIOCB *acb = opaque; + + acb->ret = ret; + qemu_coroutine_enter(acb->co); +} + +static coroutine_fn int pcache_co_preadv(BlockDriverState *bs, uint64_t offset, + uint64_t bytes, QEMUIOVector *qiov, + int flags) +{ + PCacheAIOCB acb = { + .co = qemu_coroutine_self(), + }; + + bdrv_aio_preadv(bs->file, offset, qiov, bytes, pcache_aio_cb, &acb); + + qemu_coroutine_yield(); + + return acb.ret; +} + +static coroutine_fn int pcache_co_pwritev(BlockDriverState *bs, uint64_t offset, + uint64_t bytes, QEMUIOVector *qiov, + int flags) +{ + PCacheAIOCB acb = { + .co = qemu_coroutine_self(), + }; + + bdrv_aio_pwritev(bs->file, offset, qiov, bytes, pcache_aio_cb, &acb); + + qemu_coroutine_yield(); + + return acb.ret; +} + +static int pcache_file_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) +{ + QemuOpts *opts; + Error *local_err = NULL; + int ret = 0; + + opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort); + qemu_opts_absorb_qdict(opts, options, &local_err); + if (local_err) { + error_propagate(errp, local_err); + ret = -EINVAL; + goto fail; + } + + assert(bs->file == NULL); + bs->file = bdrv_open_child(qemu_opt_get(opts, "x-image"), options, + "image", bs, &child_format, false, &local_err); + if (local_err) { + ret = -EINVAL; + error_propagate(errp, local_err); + } +fail: + qemu_opts_del(opts); + return ret; +} + +static void pcache_close(BlockDriverState *bs) +{ +} + +static void pcache_parse_filename(const char *filename, QDict *options, + Error **errp) +{ + qdict_put(options, "x-image", qstring_from_str(filename)); +} + +static int64_t pcache_getlength(BlockDriverState *bs) +{ + return bdrv_getlength(bs->file->bs); +} + +static bool pcache_recurse_is_first_non_filter(BlockDriverState *bs, + BlockDriverState *candidate) +{ + return bdrv_recurse_is_first_non_filter(bs->file->bs, candidate); +} + +static BlockDriver bdrv_pcache = { + .format_name = "pcache", + .protocol_name = "pcache", + .instance_size = 0, + + .bdrv_parse_filename = pcache_parse_filename, + .bdrv_file_open = pcache_file_open, + .bdrv_close = pcache_close, + .bdrv_getlength = pcache_getlength, + + .bdrv_co_preadv = pcache_co_preadv, + .bdrv_co_pwritev = pcache_co_pwritev, + + .is_filter = true, + .bdrv_recurse_is_first_non_filter = pcache_recurse_is_first_non_filter, +}; + +static void bdrv_cache_init(void) +{ + bdrv_register(&bdrv_pcache); +} + +block_init(bdrv_cache_init);