From nobody Sat May 4 00:50:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1605272556; cv=pass; d=zohomail.com; s=zohoarc; b=JQbT+yzm2qmQ67U5dp2fPLbowbm0LeMOQGR0yRpv4CZYf6D5i/ADMaKrE0eDpt3v2kYGiy+8YJ8noy4alez/M7ZEp/ig1rZBHIiXCNTW2Ig8yLwTdHLcmssl7p3dGVYwQ7SqMFXHKneEvVRhdLTeDCm4hjfLT0nYgTo0ByCscJk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605272556; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ADlE8/px6cBT4XRKDs2ClbGzDrRuSQn80zvDsvZcYgs=; b=IIXmR/aml9nzYMCxNePI9dzhz37Ryonoh/VoN25nbtjFpHUUnbDTfdOc0ffqYD6AWC9VuL3kFdVgT6Q4VvdLRhXIB4EXZHaGYgPXjUAUknr56ogXyGPmFsQL+eO9AdPTjVv1Cljcd7726d7+cu6PmMHCM5RCuCT3P6m9txjCojM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1605272555748398.83607305816463; Fri, 13 Nov 2020 05:02:35 -0800 (PST) Received: from localhost ([::1]:60942 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdYin-0007dw-Ux for importer@patchew.org; Fri, 13 Nov 2020 08:02:33 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44662) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdYfe-0005t9-FJ; Fri, 13 Nov 2020 07:59:18 -0500 Received: from mail-eopbgr30096.outbound.protection.outlook.com ([40.107.3.96]:46759 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdYfa-0004BU-TS; Fri, 13 Nov 2020 07:59:17 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5877.eurprd08.prod.outlook.com (2603:10a6:20b:291::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21; Fri, 13 Nov 2020 12:59:04 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3499.032; Fri, 13 Nov 2020 12:59:04 +0000 Received: from kvm.sw.ru (185.215.60.71) by AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21 via Frontend Transport; Fri, 13 Nov 2020 12:59:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ygbxmty3psZgzC6UpAHhQZ8lJL4lUpOEM7+uWx/AWSduUG43UcfrXiG+lOeZE6KpmZmQuRZZrOS9VgMmRXZ37lZy9WBQrBRQUN9TIkNrn4Tlu5zqEBr90H6BJg6I0mJUGsyATfyq/l9DHa16CETZfpKgNGhB81Ln0v6w+PgTgcbsEX+IW6yxNYJ55Dv6hAZOtz2ogwSYzYnsRIW3juImUZ8N8MCnsD3P+QlUvoqPSd41Z4qLJDnVJlUPY2Q8axPM8FXXcJYzFeJXSm0CAUmnD4x17i9H/2sYhprTFJwyLorsiDEhW0rnB+7uYB9eSOUR0AbqZjR1qy3rOKqp/GT3Gw== 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=ADlE8/px6cBT4XRKDs2ClbGzDrRuSQn80zvDsvZcYgs=; b=dEM8nlFOpZHBmNdLsPMyp3hW8H62JWkDj5Ma6N92sums909hC2NbJ/AbI86N3ozm2wl8/KSTzPs4No9jOEAsOwDDQXPAcmNS3ESQ8SEcf+bJI3tB+K7zL9AaDyU5KqejZUlOnDO18om377LZPIweyxFXkkO9LskC1yK4TjYw2SM1DhNCRQP0Idpc5KP/2UAZWujW73o28U8FTLp1fAj1qO9bHypcQjLFwK7yFzS7Z5uqRpiKjByxUgbrRzr82YwNKITXZXwC3JpKcsV3jFSK2bWnGS9pCXfcWBS1zYVYWLHHX+mcd2YB6/Fuli6bVzbdjTY0n5Yg1QkqhXVo04huEg== 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=ADlE8/px6cBT4XRKDs2ClbGzDrRuSQn80zvDsvZcYgs=; b=gsX0gH+tggtXfzy9UjACeYT+4/54qb5BSNsHQ4d5URM1sczxDy7HotZArXNh1/rlW3vbW/hK7+QqaLSLPlC4M3f8Ic124Z+5UMO7k1VGD/vMgN6smCjhO08liLDkyBGhlOatSceU1cNj6Js8xtnsHmMDHPJ7PzjKXDCNQVq8FlY= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@openvz.org, vsementsov@virtuozzo.com, dautovri@hpcdlab.com Subject: [PATCH 1/5] block/prl-xml: add Parallels xml BlockDriver Date: Fri, 13 Nov 2020 15:58:44 +0300 Message-Id: <20201113125848.20498-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201113125848.20498-1-vsementsov@virtuozzo.com> References: <20201113125848.20498-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.71] X-ClientProxiedBy: AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f8c0b31a-7b59-4f06-3231-08d887d3e63a X-MS-TrafficTypeDiagnostic: AS8PR08MB5877: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1388; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: C9gbJM1MERNz0p9NSObEbF8zieVA2UYrDDpgbWBl7KLM+9iz9SNLb1EaZExt00BrdBItgTzzzAJpeZc0Vprsw/Oe5vOK4yZl5dmdrqX8KfI5JaflgVU7/4TB9CQHBrwjE0KBayCcEdkId7LLdrV6XPtOmA+6s9gbzqgc+HfIAa0s5X8w9GvQZb+aZvbhBQ7LZn5r0bk2YsYGxXqXMJj2OFOsSF6FBgtSOTruE9vVpQ2sgeruHNlRBcnnQnGVc4Uz/WYmmZQbbg0HJUYaEpyA0LVCh+Sb8N7jP9t7kt/4COux+L0knxED+498N0ER17bNaiWuzSi1D7YSt8y+09Xmlbwe8fDIaUxIZ4ig3Of77rtVaaesUF9Z+VwYCM2y1UdaVrLeMyrw3tPQKvgbjtkkCQ== 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)(39840400004)(346002)(396003)(366004)(376002)(66476007)(6916009)(26005)(83380400001)(30864003)(8676002)(478600001)(52116002)(6506007)(86362001)(956004)(2616005)(66556008)(8936002)(1076003)(5660300002)(316002)(66946007)(16526019)(2906002)(186003)(6666004)(4326008)(6486002)(966005)(36756003)(6512007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: gbaEg5bSb8FGTNuVOpfrNwDdaA2tidkPpGCtF/BzeloWLiGFa48q8NqT6cgrbGL+rJVxZiIZ70qqLIHV2Rf/H1XgLqehKmhvBQGdDtiD29zALnVVK17SsyTYUM9QF5jsML/DDJQylUvagUME6CXMrP9hdEBPyh0Wtu+9Bf4IPG9/Qhiy6ApL77iWLG1UKFXEcHkM919JkSKhklic4QMKvyd5XQh9/DEjqG0hfwq8Pfbl8KPd48qtInwdDdVFLG2hjdtA+WgP+q4jiAfGZzE+NPcCXjOdch6MMEIOAsMm3xatIaECWBzf/k1zzKVH8MF/IDpe1HkEOfABKTZE1lWw3gZfG2SO/4M5D45kkq35biC7CpPkrk23WZVS4MJOqnoW3KJa5O8GrVkBd8bSR81ejEp+xVCbINBki9JaVBucsbPZ9+AcmMOp+oXkXmrNVniWgFFdfEsPGXur+xpqJ/WKZuOFD2diALNVx1zVYIbKUU68KpkTtG75jUBFp5WtKNv0lQdDjcybXet0LVjZEpakqBujSipXOcpWOiTtsh89zjdUxy5QcYfJIOcxpHfE3ALbnlHuxb1rzf5GnOKpEzJEHfbBxDf5CubUy+c8wjOGJvFhhOOIuhmRJkotRo9JKOssd93JACMht2gI2+r/gIcDWg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f8c0b31a-7b59-4f06-3231-08d887d3e63a X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2020 12:59:04.5707 (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: Dxs+2IKmmzsJPb+ieXNJ9o2Y/Yfiaf4SN4B7ESc5CFOyWtXmxoy2K8eCki7p4atdQ2alG9hnp5qy6DF7CU/o4hoT8NdTmInsx43ois9Fr3c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5877 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.3.96; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/13 07:59:13 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Klim Kireev This patch introduces new BlockDriver: prl-xml. It adds opening and closing capabilities. All operations are performed using libxml2. Signed-off-by: Klim Kireev --- block/prl-xml.c | 492 ++++++++++++++++++++++++++++++++++++++++++++ block/Makefile.objs | 5 +- 2 files changed, 495 insertions(+), 2 deletions(-) create mode 100644 block/prl-xml.c diff --git a/block/prl-xml.c b/block/prl-xml.c new file mode 100644 index 0000000000..fa9c4fd5fa --- /dev/null +++ b/block/prl-xml.c @@ -0,0 +1,492 @@ +/* +* Block driver for Parallels disk image format +* Copyright (c) 2015-2017, Virtuozzo, Inc. +* Authors: +* 2016-2017 Klim S. Kireev +* 2015 Denis V. Lunev +* +* This code was originally based on comparing different disk images created +* by Parallels. Currently it is based on opened OpenVZ sources +* available at +* https://github.com/OpenVZ/ploop +* +* Permission is hereby granted, free of charge, to any person obtaining a = copy +* of this software and associated documentation files (the "Software"), to= deal +* in the Software without restriction, including without limitation the ri= ghts +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included = in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS = OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTH= ER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING = FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +* THE SOFTWARE. +*/ +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "block/block_int.h" +#include "qemu/uuid.h" +#include "qemu/cutils.h" +#include "qemu/option.h" +#include "qapi/qmp/qdict.h" + +#include + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#include /* For basename */ + +#define DEF_TOP_SNAPSHOT "5fbaabe3-6958-40ff-92a7-860e329aab41" +#define GUID_LEN strlen(DEF_TOP_SNAPSHOT) +#define PRL_XML_FILENAME "DiskDescriptor.xml" + +typedef struct BDRVPrlXmlState { + xmlDoc *xml; + BdrvChild *image; +} BDRVPrlXmlState; + +enum TopSnapMode { + ERROR_MODE =3D -1, + NODE_MODE, + GUID_MODE +}; + +static QemuOptsList prl_xml_create_opts =3D { + .name =3D "prl-xml-create-opts", + .head =3D QTAILQ_HEAD_INITIALIZER(prl_xml_create_opts.head), + .desc =3D { + { + .name =3D BLOCK_OPT_SIZE, + .type =3D QEMU_OPT_SIZE, + .help =3D "Virtual disk size", + }, + { + .name =3D BLOCK_OPT_CLUSTER_SIZE, + .type =3D QEMU_OPT_SIZE, + .help =3D "Parallels XML back image cluster size", + .def_value_str =3D stringify(DEFAULT_CLUSTER_SIZE), + }, + { /* end of list */ } + } +}; + +static xmlNodePtr xml_find_element_child(xmlNodePtr node, const char *elem) +{ + xmlNodePtr child; + + for (child =3D node->xmlChildrenNode; child !=3D NULL; child =3D child= ->next) { + if (child->type =3D=3D XML_ELEMENT_NODE && + !xmlStrcmp(child->name, (const xmlChar *)elem)) + { + return child; + } + } + return NULL; +} + +static xmlNodePtr xml_seek_va(xmlNodePtr root, va_list args) +{ + const char *elem; + + while ((elem =3D va_arg(args, const char *)) !=3D NULL) { + root =3D xml_find_element_child(root, elem); + if (root =3D=3D NULL) { + return NULL; + } + } + return root; +} + +static xmlNodePtr xml_seek(xmlNodePtr root, ...) +{ + va_list args; + va_start(args, root); + root =3D xml_seek_va(root, args); + va_end(args); + return root; +} + +static const char *xml_get_text(xmlNodePtr node, ...) +{ + xmlNodePtr child; + va_list args; + + if (node =3D=3D NULL) { + return NULL; + } + + va_start(args, node); + node =3D xml_seek_va(node, args); + va_end(args); + + if (node =3D=3D NULL) { + return NULL; + } + + for (child =3D node->xmlChildrenNode; child; child =3D child->next) { + if (child->type =3D=3D XML_TEXT_NODE) { + return (const char *)child->content; + } + } + return NULL; +} + +static inline int get_addr_mode(xmlDocPtr doc) +{ + xmlNodePtr root =3D xmlDocGetRootElement(doc); + if (root =3D=3D NULL) { + return ERROR_MODE; + } + + xmlNodePtr cur =3D xml_seek(root, "Snapshots", "TopGUID", NULL); + if (cur =3D=3D NULL) { + return GUID_MODE; + } else { + return NODE_MODE; + } +}; + +static int xml_check(xmlNodePtr root, Error **errp) +{ + xmlNodePtr image; + const char *data; + + data =3D (const char *)xmlGetProp(root, (const xmlChar *)"Version"); + if (data =3D=3D NULL) { + error_setg(errp, "There is no version attribute in xml root"); + return -EINVAL; + } + + if (strcmp(data, "1.0") !=3D 0) { + error_setg(errp, "Format versions differing from 1.0 are unsupport= ed"); + return -ENOTSUP; + } + + image =3D xml_seek(root, "StorageData", "Storage", "Image", NULL); + if (image =3D=3D NULL) { + error_setg(errp, "There is no image nodes in xml"); + return -EINVAL; + } + while (image !=3D NULL) { + data =3D ""; /* make gcc happy */ + if (image->type !=3D XML_ELEMENT_NODE) { + image =3D image->next; + continue; + } + + data =3D xml_get_text(image, "Type", NULL); + if (data =3D=3D NULL) { + error_setg(errp, "There is no type node in xml"); + return -EINVAL; + } + + if (strcmp(data, "Plain") =3D=3D 0) { + error_setg(errp, "Plain Parallels images are unsupported"); + return -ENOTSUP; + } + + if (strcmp(data, "Compressed") !=3D 0) { + error_setg(errp, "Invalid value of type node: %s", data); + return -EINVAL; + } + + data =3D xml_get_text(image, "File", NULL); + if (data =3D=3D NULL) { + error_setg(errp, "Invalid image xml node"); + return -EINVAL; + } + image =3D image->next; + } + + image =3D xml_seek(root, "Snapshots", "Shot", NULL); + if (image =3D=3D NULL) { + error_setg(errp, "There is no snapshots in xml"); + return -EINVAL; + } + while (image !=3D NULL) { + data =3D ""; /* make gcc happy */ + if (image->type !=3D XML_ELEMENT_NODE) { + image =3D image->next; + continue; + } + + data =3D xml_get_text(image, "ParentGUID", NULL); + if (data =3D=3D NULL) { + error_setg(errp, "There is no ParentGUID node in Snapshot"); + return -EINVAL; + } + + data =3D xml_get_text(image, "GUID", NULL); + if (data =3D=3D NULL) { + error_setg(errp, "There is no GUID node in Snapshot"); + return -EINVAL; + } + + image =3D image->next; + } + + return 0; +} + +static xmlNodePtr uuid_seek(xmlNodePtr node, const char *uuid) +{ + while (node !=3D NULL) { + const char *cur_uuid; + if (node->type !=3D XML_ELEMENT_NODE) { + node =3D node->next; + continue; + } + cur_uuid =3D xml_get_text(node, "GUID", NULL); + if (cur_uuid =3D=3D NULL) { + return NULL; + } + if (strcmp(uuid, cur_uuid) =3D=3D 0) { + return node; + } + node =3D node->next; + } + + return NULL; +} + +static xmlNodePtr uuid_image_seek(xmlNodePtr root, const char *uuid) +{ + if (uuid =3D=3D NULL) { + return NULL; + } + + xmlNodePtr image =3D xml_seek(root, "StorageData", "Storage", "Image",= NULL); + + return uuid_seek(image, uuid); +} + +static xmlNodePtr uuid_snap_seek(xmlNodePtr root, const char *uuid) +{ + if (uuid =3D=3D NULL) { + return NULL; + } + + xmlNodePtr snap =3D xml_seek(root, "Snapshots", "Shot", NULL); + + return uuid_seek(snap, uuid); +} + +static inline xmlNodePtr get_parent_snap(xmlNodePtr root, xmlNodePtr snap) +{ + const char *uuid =3D xml_get_text(snap, "ParentGUID", NULL); + if (uuid && strcmp(uuid, "{"UUID_NONE"}") =3D=3D 0) { + return NULL; + } + + return uuid_snap_seek(root, uuid); +} + +static inline xmlNodePtr snap2image(xmlNodePtr root, xmlNodePtr snap) +{ + const char *uuid =3D xml_get_text(snap, "GUID", NULL); + return uuid_image_seek(root, uuid); +} + +static inline xmlNodePtr image2snap(xmlNodePtr root, xmlNodePtr image) +{ + const char *uuid =3D xml_get_text(image, "GUID", NULL); + return uuid_snap_seek(root, uuid); +} + +static int snap_open_xml(BlockDriverState *bs, xmlNodePtr snap, + QDict *opts, Error **errp) +{ + BDRVPrlXmlState *s =3D bs->opaque; + BlockDriverState *last_bs =3D s->image->bs; + int ret =3D 0; + const char *filename =3D NULL; + size_t len =3D 0; + xmlNodePtr root =3D xmlDocGetRootElement(s->xml); + xmlNodePtr image =3D snap2image(root, snap); + + if (image =3D=3D NULL) { + error_setg(errp, "Incorrent xml"); + return -EINVAL; + } + filename =3D xml_get_text(image, "File", NULL); + if (filename =3D=3D NULL) { + error_setg(errp, "Incorrent xml"); + return -EINVAL; + } + + while (last_bs->backing !=3D NULL) { + last_bs =3D last_bs->backing->bs; + } + + len =3D strlen(filename); + if (len > sizeof(last_bs->backing_file)) { + error_setg(errp, "Incorrent filename %s", filename); + return -EINVAL; + } + pstrcpy(last_bs->backing_file, sizeof(last_bs->backing_file), + filename); + + assert(strlen("parallels") < sizeof(last_bs->backing_format)); + pstrcpy(last_bs->backing_format, sizeof(last_bs->backing_format), + "parallels"); + ret =3D bdrv_open_backing_file(last_bs, NULL, "backing", errp); + return ret; +} + +static int first_open_xml(BlockDriverState *bs, xmlNodePtr snap, + QDict *opts, Error **errp) +{ + char image_path[PATH_MAX] =3D {}; + BDRVPrlXmlState *s =3D bs->opaque; + xmlNodePtr root =3D xmlDocGetRootElement(s->xml); + xmlNodePtr image =3D snap2image(root, snap); + if (image =3D=3D NULL) { + error_setg(errp, "Incorrent xml"); + return -EINVAL; + } + const char *filename =3D xml_get_text(image, "File", NULL); + if (s->image !=3D NULL) { + return -EINVAL; + } + path_combine(image_path, sizeof(image_path), + bs->filename, filename); + qdict_del(opts, "file"); + s->image =3D bdrv_open_child(image_path, opts, "image", bs, + &child_format, false, errp); + if (s->image =3D=3D NULL) { + return -EINVAL; + } + return 0; +} + +static int64_t prl_xml_get_length(xmlNodePtr root) +{ + const char *data; + int64_t ret; + + data =3D xml_get_text(root, "Disk_Parameters", "Disk_size", NULL); + if (data =3D=3D NULL) { + return -EINVAL; + } else { + const char *endptr; + qemu_strtoi64(data, &endptr, 0, &ret); + if (*endptr !=3D '\0') { + return -EINVAL; + } + } + + return ret; +} + +static int prl_open_xml(BlockDriverState *bs, QDict *opts, int flags, + Error **errp) +{ + int ret =3D -EINVAL, snap_mode; + xmlDoc *doc =3D NULL; + xmlNodePtr root; + xmlNodePtr snap; + BDRVPrlXmlState *s =3D bs->opaque; + + if (strcmp(basename(bs->filename), PRL_XML_FILENAME) !=3D 0) { + error_setg(errp, "Invalid xml name"); + goto fail; + } + + doc =3D xmlReadFile(bs->filename, NULL, XML_PARSE_NOERROR | + XML_PARSE_NOWARNING); + + if (doc =3D=3D NULL) { + error_setg(errp, "Can't open xml"); + goto fail; + } + + s->xml =3D doc; + root =3D xmlDocGetRootElement(doc); + if (root =3D=3D NULL) { + ret =3D -EINVAL; + error_setg(errp, "Invalid xml"); + goto fail; + } + + ret =3D xml_check(root, errp); + if (ret < 0) { + goto fail; + } + + bs->total_sectors =3D prl_xml_get_length(root); + if (bs->total_sectors < 0) { + ret =3D -EINVAL; + error_setg(errp, "Invalid xml"); + goto fail; + } + + snap_mode =3D get_addr_mode(doc); + if (snap_mode =3D=3D ERROR_MODE) { + ret =3D -EINVAL; + error_setg(errp, "Can't determine an address mode"); + goto fail; + } + if (snap_mode =3D=3D NODE_MODE) { + ret =3D -ENOTSUP; + error_setg(errp, "The node addressing mode is unsupported now"); + goto fail; + } + + snap =3D uuid_snap_seek(root, "{"DEF_TOP_SNAPSHOT"}"); + if (snap =3D=3D NULL) { + ret =3D -EINVAL; + error_setg(errp, "Can't find top image"); + goto fail; + } + ret =3D first_open_xml(bs, snap, opts, errp); + if (ret < 0) { + error_append_hint(errp, "Can't open top image\n"); + goto fail; + } + + snap =3D get_parent_snap(root, snap); + while (snap !=3D NULL) { + ret =3D snap_open_xml(bs, snap, opts, errp); + if (ret < 0) { + error_append_hint(errp, "Can't open image\n"); + goto fail; + } + snap =3D get_parent_snap(root, snap); + } + + return 0; +fail: + xmlFreeDoc(doc); + return ret; +} + +static void prl_close_xml(BlockDriverState *bs) +{ + BDRVPrlXmlState *s =3D bs->opaque; + bdrv_unref_child(bs, s->image); + xmlFreeDoc(s->xml); +} + +static BlockDriver bdrv_prl_xml =3D { + .format_name =3D "prl-xml", + .instance_size =3D sizeof(BDRVPrlXmlState), + .bdrv_open =3D prl_open_xml, + .bdrv_close =3D prl_close_xml, + .create_opts =3D &prl_xml_create_opts, + .bdrv_child_perm =3D bdrv_filter_default_perms, + .is_filter =3D true +}; + +static void bdrv_prl_init_xml(void) +{ + bdrv_register(&bdrv_prl_xml); +} + +block_init(bdrv_prl_init_xml); diff --git a/block/Makefile.objs b/block/Makefile.objs index d644bac60a..df146c77fa 100644 --- a/block/Makefile.objs +++ b/block/Makefile.objs @@ -6,6 +6,7 @@ block-obj-y +=3D vhdx.o vhdx-endian.o vhdx-log.o block-obj-y +=3D quorum.o block-obj-y +=3D parallels.o blkdebug.o blkverify.o blkreplay.o block-obj-y +=3D block-backend.o snapshot.o qapi.o +block-obj-$(CONFIG_LIBXML2) +=3D prl-xml.o block-obj-$(CONFIG_WIN32) +=3D file-win32.o win32-aio.o block-obj-$(CONFIG_POSIX) +=3D file-posix.o block-obj-$(CONFIG_LINUX_AIO) +=3D linux-aio.o @@ -48,5 +49,5 @@ block-obj-$(if $(CONFIG_BZIP2),m,n) +=3D dmg-bz2.o dmg-bz2.o-libs :=3D $(BZIP2_LIBS) qcow.o-libs :=3D -lz linux-aio.o-libs :=3D -laio -parallels.o-cflags :=3D $(LIBXML2_CFLAGS) -parallels.o-libs :=3D $(LIBXML2_LIBS) +prl-xml.o-cflags :=3D $(LIBXML2_CFLAGS) +prl-xml.o-libs :=3D $(LIBXML2_LIBS) --=20 2.21.3 From nobody Sat May 4 00:50:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1605272556; cv=pass; d=zohomail.com; s=zohoarc; b=bt8gc9yfzgFMkUxGHZakaz7NffcslVNWXeTlaWuIyMBgp/1jpjdqvHT7DRzi/4dups8gGT4EWnm9zmDh5NelthSCFnpagS6nKswuNP5HKpTZTpqSF8fTKmO32Nd2+bp5G0p1AnyiSWRPyNUBPkCJx3ZfcslVClU0Xi8KJw9brks= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605272556; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=zrMPuj88x0lQyJrHFLnx6CExp05zu9SZOd6PJgS1V0Y=; b=MSooV7/Vl7+Zw7oh5LoJ8CAV/XR0RzagKIoRcXIrEfDzo7cFm1skT9erFK8KnyDM6oilcrJZCSqyWlw0DePr2NxpS74fiN7UGFQxghdwyyil16umEAzfCAIZdc+oASZRvrD/4PX0XIY7dGBT0CAsIW7LYJtLyMD9tUTonZkfxUk= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1605272555656971.7870409714553; Fri, 13 Nov 2020 05:02:35 -0800 (PST) Received: from localhost ([::1]:60994 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdYio-0007fH-BD for importer@patchew.org; Fri, 13 Nov 2020 08:02:34 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44674) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdYfg-0005vO-Gj; Fri, 13 Nov 2020 07:59:20 -0500 Received: from mail-eopbgr30096.outbound.protection.outlook.com ([40.107.3.96]:46759 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdYfe-0004BU-RK; Fri, 13 Nov 2020 07:59:20 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5877.eurprd08.prod.outlook.com (2603:10a6:20b:291::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21; Fri, 13 Nov 2020 12:59:05 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3499.032; Fri, 13 Nov 2020 12:59:05 +0000 Received: from kvm.sw.ru (185.215.60.71) by AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21 via Frontend Transport; Fri, 13 Nov 2020 12:59:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N2Hgyd0yu3og2yWs7HVzum22roJc5itiW/0ovRox34G1PyPdNqZe1t6tCDkGqIELUXZrYRfbNKPC3y0hWoItvH90wYoiU6ORdToDUfTLurLfITDZ58hLQEfwmC4ArGj+Ao2R8hgwx1jFVpr+luPcwMAPNwzhTjX7Az/SnDed0mbe+ivSdtODwXoksTuM2ASHJwnRyDVmdGdKCpuWbhTN+/PpjA/WMNlNAd2cMQak0LmECc5HIPg5ibFIhz5hz7AxgLm6RzBXftQN49p9cV47SxvKo0KAQCHaHClj0dXKzjkmTCTXMdvgCL3XZQ4KEeqmBcvQkq1voaGXAjEJVcO+kA== 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=zrMPuj88x0lQyJrHFLnx6CExp05zu9SZOd6PJgS1V0Y=; b=E28vjjVPzR0iPGX5O4J3cFvIrOaLGBNIBploTsVz53VYZAsyp3Rdp80pQR5CRtTx6vn6lSSMLeFtAnBWtZPZB2Tm1JFzR1j6n14lNS1ncsPvx67i4TM+W7ByrQ2ER4BqLK0x6UuaYk8ODSBy2iiQ1/1CEHIFJU/HvtbU36AgbCVu4gsoCLS7iwddjoErnFM+/hgwzbDwn6MNYK9NlEItnA9NBNPqcBKMxutEO4kh68ZuwpBvKEBXeVU4yyy2IZ0tfJoO1V/UnSfu4+dhjQ13f8150vvQc5L7GnSVMkhKaZ5Ot9oIGYBWNTqx76oRn/Qldnq35wSAWFA6A5qfkGfWMg== 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=zrMPuj88x0lQyJrHFLnx6CExp05zu9SZOd6PJgS1V0Y=; b=UCNe/g0gDuw+45x47pp0ZHQVd9JehbqrJjBRyviwtej+iz9N8c5visPT/GSBpexS9VbKEp5tT/vfknHU61ibSzw87xPxlbQuWdaP5IEBCCevISDbcgD49ZibZ94M+1+FxdgMkPuiUcNI7Jjak89J0zy/UT2Z6H2kWdWdsRER0t8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@openvz.org, vsementsov@virtuozzo.com, dautovri@hpcdlab.com Subject: [PATCH 2/5] block/prl-xml: add bdrv_co_readv/writev and flush Date: Fri, 13 Nov 2020 15:58:45 +0300 Message-Id: <20201113125848.20498-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201113125848.20498-1-vsementsov@virtuozzo.com> References: <20201113125848.20498-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.71] X-ClientProxiedBy: AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e8b741cf-4d5c-47c4-cb83-08d887d3e6a8 X-MS-TrafficTypeDiagnostic: AS8PR08MB5877: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:25; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Jn3o3lno1aRoHkj49FdEEvy2IDdQhX2JjHWb8DUzzvmj7fCFdcRBiXf0N7w7yJVliY5v/qt6muTeWqOQZMoWlhQ8FjHqUiom0Ev4oMdbNy7Ij5WgglzirsKKppTutUYD1pPBEPCuhFR7OVsmBPG+bP0E30yShYuQS9JBxTFfE0QpHs2+p3bjrOD+nyRwgfzaeKXVVjKwyKtAMa8fWhpztUVOGrNpI+x59153dn9s4YpnqasdeSrognBlgYGDcv4QQdvcWcyegSgD+QL4/LOtotNFuOYAT+RAxAMGYcwT6OnF7+mzYcWFI2ZlKHlPcShmNj0q+f1xBfZ1qqD8m7/zwA== 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)(39840400004)(346002)(396003)(366004)(376002)(66476007)(6916009)(26005)(83380400001)(8676002)(478600001)(52116002)(6506007)(86362001)(956004)(2616005)(66556008)(8936002)(1076003)(5660300002)(316002)(66946007)(16526019)(2906002)(186003)(6666004)(4326008)(6486002)(36756003)(6512007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 2Tr2cjL8U7ghHIoW+ScQiKXKhEAng3QeVslNbvR3cAMONuuqYsI1CALQRN6WaXqSNYjz3k7UZkh0BCY4EPw+tsRjG+gkx77f7abkjlPsGLOETo/B2CezbXlblUvUVjdFJjLch8A3KTsmb/kY9AAPlEU/HHaRGgmkQmUxtCs6JD+KjzCAzrRtxWPvKARMLtV93XCn2fD2dOmXlFJPuBIfcHOAxrWkD6QYURz9KPP5/37gdWWKivAE8q3bFFqSEGqLnk9RAqdZTPASS6MKyevBe6jvDBJHhr/UKtCD2FZZnbwp2TNrLU/iCebEUb8sC4i/5xmjtjVxVIoMTe0/fIPyLpmwBJqap2DnBcTa398trafMz+BwTAnSXB/JbBs2V/0XNJ/ek13McRyih4tJ2DICTMa975DhtQlScgcSzw8LFpM4sMUysereJIn2myhJYKF6yDWxY2ycQtz6jKZgy+CtDgIh+aXbndMJwaTv1nih8u+WU7Bku7yJYt04K+IstHIxcDWuXXTAmm51ONtbnLLy0NpED03whS+Iw0+3o6c46ghOeLUtpm+sgpG0cLjiGPRfQfzFqpn4lukTexYjfXb7dp+r/g5d9XQkmLTne+F+YIHvsXMA3r3yXyTKa9GPhSibxnxEt/XCeUemGwBWGxR5nw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: e8b741cf-4d5c-47c4-cb83-08d887d3e6a8 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2020 12:59:05.2049 (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: HHNA5PUgGtCSgueOkK/xAsQamwzaO2bBD7zYnC95W1ZSNvIhCLR3sadkLLP5c91EL+DttpqosJT0S1yhEsbGUR6Qb2aS0QcVJrGnCNnYojc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5877 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.3.96; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/13 07:59:13 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Klim Kireev This commit adds bdrv_co_readv, bdrv_co_writev, and bdrv_co_flush_to_os implementation. It merely passes these functions down to top BlockDriverState in the snapshot chain. Signed-off-by: Klim Kireev Signed-off-by: Edgar Kaziakhmedov Reviewed-by: Vladimir Sementsov-Ogievskiy --- block/prl-xml.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/block/prl-xml.c b/block/prl-xml.c index fa9c4fd5fa..5ab32bb6ab 100644 --- a/block/prl-xml.c +++ b/block/prl-xml.c @@ -467,6 +467,22 @@ fail: return ret; } =20 +static coroutine_fn int +prl_co_readv(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *qiov) +{ + BDRVPrlXmlState *s =3D bs->opaque; + return bdrv_co_readv(s->image, sector_num, nb_sectors, qiov); +} + +static coroutine_fn int +prl_co_writev(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *qiov) +{ + BDRVPrlXmlState *s =3D bs->opaque; + return bdrv_co_writev(s->image, sector_num, nb_sectors, qiov); +} + static void prl_close_xml(BlockDriverState *bs) { BDRVPrlXmlState *s =3D bs->opaque; @@ -474,11 +490,20 @@ static void prl_close_xml(BlockDriverState *bs) xmlFreeDoc(s->xml); } =20 +static coroutine_fn int prl_co_flush_to_os(BlockDriverState *bs) +{ + BDRVPrlXmlState *s =3D bs->opaque; + return bdrv_co_flush(s->image->bs); +} + static BlockDriver bdrv_prl_xml =3D { .format_name =3D "prl-xml", .instance_size =3D sizeof(BDRVPrlXmlState), .bdrv_open =3D prl_open_xml, + .bdrv_co_readv =3D prl_co_readv, + .bdrv_co_writev =3D prl_co_writev, .bdrv_close =3D prl_close_xml, + .bdrv_co_flush_to_os =3D prl_co_flush_to_os, .create_opts =3D &prl_xml_create_opts, .bdrv_child_perm =3D bdrv_filter_default_perms, .is_filter =3D true --=20 2.21.3 From nobody Sat May 4 00:50:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1605272559; cv=pass; d=zohomail.com; s=zohoarc; b=lgvRsutAI1cv1AqTjn0ff5Vjs+TNoFcniczMMIP4aiStIpiGrCzJm8UTwhqwacEMK/TRKMTdnd9kGtpRSz4uqaxZ1M5jedKTfIOJsRAwic9qD3cZFsotImp263LTlOC3Xt3ZlA90R68/eAKtoM/w4f1eGhkmHLwffOlHgsgvSgQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605272559; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=DST90u0lTqp4qz6Wxepgl5RFrbR61QPt1qCO+KBYsxI=; b=IC6YAJiwtVL8EEd0lKSSbzmBlsOaq1zTENvJQjy/JsdkrHfl4W9MF/t0vI1xY89ipgsQw7quKrijl6NsrUd6rJ76QMcZyuwm+UnNgQi4/Y2uhhmS3H5vBktsQ+jNCxYzbpShw23yTTAPriq/jUbD18sSbSEENU9xqIh5fS/HRGI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1605272558628696.8633647063624; Fri, 13 Nov 2020 05:02:38 -0800 (PST) Received: from localhost ([::1]:32962 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdYir-0007kD-F2 for importer@patchew.org; Fri, 13 Nov 2020 08:02:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44690) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdYfi-0005zM-Ou; Fri, 13 Nov 2020 07:59:22 -0500 Received: from mail-eopbgr30096.outbound.protection.outlook.com ([40.107.3.96]:46759 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdYfh-0004BU-3z; Fri, 13 Nov 2020 07:59:22 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5877.eurprd08.prod.outlook.com (2603:10a6:20b:291::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21; Fri, 13 Nov 2020 12:59:05 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3499.032; Fri, 13 Nov 2020 12:59:05 +0000 Received: from kvm.sw.ru (185.215.60.71) by AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21 via Frontend Transport; Fri, 13 Nov 2020 12:59:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lONjRf3bKieQ5Z1ZMEYWJIz2JOTcWOZi7f+K0dmlhKYD8gU3F6nfC9EPiSfx1G6EjQSK73UXWbEuSmPeYv/gJmDnd46B/uK1h9EQSrcVsLdaw8IE7DCpsmfB1n52piHEYFdRcnwNJ9O139aw8o4pPa8rk2jxQQPKqATkcFjPYxyb0vedjbGniwplgSYfC+C6TdGUqlNpnnWKx4mlCteAAx83BkVMwoL3ivBPAM1tHMhsXg3uhEMJZwWMmS3SQUTStLu5uuvxjayzMggrp9r75dXojWUwKQ9khT+RHOcACWg5EjsjiLUO+7O9IKC00W+oSgiVF8Hj5A5qMANs1RzofA== 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=DST90u0lTqp4qz6Wxepgl5RFrbR61QPt1qCO+KBYsxI=; b=DTDOun424d4mbXm+1iXLJccU0E1I2CoWF6GwGZ8P3TP+Lc+GUBqu8LJwtecv1q6ohnrU5lVaH8HlvMBurPm7/ph07JfQIUKj0WwGhInT8FEKRB+seQ/w7XTPzWt3A8wzPg9nRyeOMu+whOMIfNyvCfv4zxYqxrIR/nCVXkMVFaTuaxRGXqK8E1GQ0ZK+jd6CJ/SEXrnOhAHxzhm6f6LQVjVDY+mGo3JFdJNxG5hm+zJJ7ORnPNDrdPjSWsgXnhVyDRXMVReDJHh8JoJOBzicUfbNLE1Hrcfg6jaTUCvtkuSvr+N/e1U1yrZyoomOf0I1eDLzFsz9iQxoNNPEb9kE/g== 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=DST90u0lTqp4qz6Wxepgl5RFrbR61QPt1qCO+KBYsxI=; b=m7g/N+G+M/0AT9lxAWAvFal5mk3cIAKZ0bK69miTAD2gir2RmQr+Et32YgV/l4vPkc0p3/m02C+SEo2c8YD0XGv4VqFX59Yw4tYsnZp2t/PTYaW/ydqmImad7UmNwW6XW9F3oLfR7e3iarmSd42EXOvgazh2WnYhPO2XP7LqWMY= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@openvz.org, vsementsov@virtuozzo.com, dautovri@hpcdlab.com Subject: [PATCH 3/5] block/prl-xml: add bdrv_probe Date: Fri, 13 Nov 2020 15:58:46 +0300 Message-Id: <20201113125848.20498-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201113125848.20498-1-vsementsov@virtuozzo.com> References: <20201113125848.20498-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.71] X-ClientProxiedBy: AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8fff273b-f96f-471e-c8d1-08d887d3e70a X-MS-TrafficTypeDiagnostic: AS8PR08MB5877: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:167; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: E7/9kv0pX5q4QOgWB2DwsQ7yDmKcc0GZQQp+LCF9UsKlj06hFhw52iaDcmgWkyFXTRHckr8pSDIN43D9AsdUe/GTIYUWmq+MK2hn8z5abu2CUyXom5dDQsbf2mZndOQXLiCvSDOWCU0bMhlmVdsyQV12LtBlM6mDDSo/imKrdAcIzgPDbntYgoTperrve8MdJue3E3AhgyPkDIL33LkDaKCBV7WkT6R7vqpBPzQmVmQgtTS1UpyPbyOn92ReVcXNIs7H7RBac5FV3bhzJb9MpaAXF70NjtLUtDKkebdjB2qIEibXKqjLPMmfi2AshArBDq9wteoaUhUYrgvSb5GLsQ== 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)(39840400004)(346002)(396003)(366004)(376002)(66476007)(6916009)(26005)(83380400001)(8676002)(478600001)(52116002)(6506007)(86362001)(956004)(2616005)(66556008)(8936002)(1076003)(5660300002)(316002)(66946007)(16526019)(2906002)(186003)(6666004)(4326008)(6486002)(36756003)(6512007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: TM+OWTTMEEsTXAKMc0JweBLqabFnTDSbXelhoY+yMruO5wn1RwL0PtcwivdFHSW2i9D62gGukXeGfrwwqlMcExckeUFwC8HGR2krWsfOITzuVrRODC8NdZipQjax9BWGSom+KCBn084SuOlTOzTdlF6Ft2RIvzseOoXC4eLoKsluCTdSfXuA8jLojL/CSJG6MaZtqRK1rhGRJ0f+6wmSU0EzhQffHVyhupicij8oYJaTzpYg9oCzzYpd1yhGQeLpt2K0pd8butwoaC0/dUY7BmiMM4TjqnzlsB0dUweR0oFQE4sConpEfWbf2yXaMTzXa0pWU7fluN2tB4aZ9cGSCnV5DxoeNFdSP/YIPbEv7vC/G7oxPhZRKfBVfkDNAhmQ/wRpk4luBqTSR56N3XbmzkY+p2loKRbsBTACrv7Fjul9FFPPnm1WN0AJUjbi8/zWYuk0FkGVwfiVgWNIwq1YKay4KsnmlkeWbL/vdRw/+9ur7kmRafhTEyUiNxKZ8p4mjAO8gEOwlcwOTSJe/6ZvK2e+taUlR1zxsN0dcHm8IJ8J3ZMHW7r7QpO+C1IMdWqAszquy8WgF9EoWjWeXJjM383uu++7EgKks5jjHZGPL9uxHQM0OAeCd7DkvtyANvsVzzL0PI0QAU2VkjtXPBWPNw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8fff273b-f96f-471e-c8d1-08d887d3e70a X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2020 12:59:05.8541 (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: CN1ufO9Ah0TkzkIWkmDylcpRqzfGTpFVmD57Z/oco7uxNVRP1SN8Mnmn4v3xP7u+8ModTugha+XetJ6sgGevgWz6ZQWuDljCDXgZflEgTZg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5877 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.3.96; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/13 07:59:13 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Klim Kireev This commit adds bdrv_probe implementation. It checks the filename (it must be DiskDescriptor.xml). Then it checks correctness of the xml file using libxml2. Signed-off-by: Klim Kireev --- block/prl-xml.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/block/prl-xml.c b/block/prl-xml.c index 5ab32bb6ab..023651342c 100644 --- a/block/prl-xml.c +++ b/block/prl-xml.c @@ -467,6 +467,30 @@ fail: return ret; } =20 +static int prl_probe_xml(const uint8_t *data, int buf_size, + const char *filename) +{ + xmlDoc *doc =3D NULL; + xmlNodePtr root; + + if (strcmp(basename(filename), PRL_XML_FILENAME) !=3D 0) { + return 0; + } + + doc =3D xmlReadFile(filename, NULL, XML_PARSE_NOERROR | XML_PARSE_NOWA= RNING); + if (doc =3D=3D NULL) { + return 0; + } + + root =3D xmlDocGetRootElement(doc); + if (root =3D=3D NULL) { + return 0; + } + + xmlFreeDoc(doc); + return 100; +} + static coroutine_fn int prl_co_readv(BlockDriverState *bs, int64_t sector_num, int nb_sectors, QEMUIOVector *qiov) @@ -499,6 +523,7 @@ static coroutine_fn int prl_co_flush_to_os(BlockDriverS= tate *bs) static BlockDriver bdrv_prl_xml =3D { .format_name =3D "prl-xml", .instance_size =3D sizeof(BDRVPrlXmlState), + .bdrv_probe =3D prl_probe_xml, .bdrv_open =3D prl_open_xml, .bdrv_co_readv =3D prl_co_readv, .bdrv_co_writev =3D prl_co_writev, --=20 2.21.3 From nobody Sat May 4 00:50:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1605272770; cv=pass; d=zohomail.com; s=zohoarc; b=EmWqtNSu1RVPEfmcr7oQ5wMMR2G3t7eC1aZOmF1Eio29pRyOQLa9t/b1B/qwDRjilDGsFARB55ZRwOxEJ3DeF6tI0XPok3kDIvV7p4WV6vu3xAyh3z/SHexcjs6ARHjskBus1winCtSth0Hg7KF6aiYHbJZYHK3Cl0pXpiVRnyo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605272770; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=4v51cCkMPs4a8QvrTMHuAFIwHrB5tdwfkBQarhSyMSo=; b=E719IP5V61fShW+TO7Xe2vybBjLbBg7g1dyNv0TkdSuUoEVIpvBloXenc4ZSl3ot4Dl/m92ZK0VDQ7HEi4CXXohygczjk8kxbuqGYQfdmBWi6OYI+u3O6mG9Qu35AP/h/b/DPlkl+9GGZh5X8wY+1FKm1cKMJGXmc6hSfYgExhs= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1605272770905687.0673792431323; Fri, 13 Nov 2020 05:06:10 -0800 (PST) Received: from localhost ([::1]:40690 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdYmH-0002d6-J4 for importer@patchew.org; Fri, 13 Nov 2020 08:06:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44852) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdYgJ-0006b5-MJ; Fri, 13 Nov 2020 08:00:01 -0500 Received: from mail-eopbgr60133.outbound.protection.outlook.com ([40.107.6.133]:5175 helo=EUR04-DB3-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 1kdYgG-0004NL-Sx; Fri, 13 Nov 2020 07:59:59 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5877.eurprd08.prod.outlook.com (2603:10a6:20b:291::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21; Fri, 13 Nov 2020 12:59:06 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3499.032; Fri, 13 Nov 2020 12:59:06 +0000 Received: from kvm.sw.ru (185.215.60.71) by AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21 via Frontend Transport; Fri, 13 Nov 2020 12:59:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nnmyfR0/gfoj8dZc1+N2/eqgtYe5mwenHF+FLyg6snd38CyOPrYG0amKS9hI8BkHDbwz6mR0BgHZ35XfeOexlhg7KurR/SNDYmR+ejkKDyi/44Iu85AJDoqJRDtVf9C0oLsgZorwB5BYdLvB2krRKbVYcNPEyZx91vPfvcO76nOxEFRIuuaNiPF6OLqm0ZFNcRxIr9Vv5mo1F0PJWcfDaE89kRtdT571+b+8NwXpZFYfZfyyfOhh8o7yvXZMujU0FWOj8j4HxANJ0uH5K12lPwJ6YtZj2YQxVF34ReRUMdejOgtfFWBFcusqmJZnr9GYGemg71r899xNt0uHLeNX/Q== 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=4v51cCkMPs4a8QvrTMHuAFIwHrB5tdwfkBQarhSyMSo=; b=CKgBnTirbqrWqhUNJmggFasVFPUkOYrb3hLDqAglUGizuYOF9lRRfQ5ijXZrPGX42IhAzz2OqMrMJdIW05lpteyRAGKU4RcWFUVUry1Um0mdYDhdUxmXD5XjlpFcpnEH9N6KO6zVud2oZNwnXfbfvtp/J83uOE5XUxzjaftBYbCy/ZjDkK/fUfYdZJPT8TeAskFsoGym2LQfSrJDics1ydOMMjypQfIqpXyhmymOBSPeFfQaee+QFlMlrNOxfi+J7QhXRXcdN8CXwb3VXq4wIRiaVlVbPN6XAj5ENm/zHzAzT4kHqW7qKt8H7kMrjphrqW8O61CGPSFXmG9eqWXI3Q== 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=4v51cCkMPs4a8QvrTMHuAFIwHrB5tdwfkBQarhSyMSo=; b=ddpuxZcjrvxw80CjbrQJJRsOm/WZ+CaeXDuBAfQZDwu3wakTbeHTIDvktESaPZFnomotWzyYlpTRHKkzsCMUUxGnNazu8T3dnC92a4eNHM0BqrQRM5e8eGdaKsEfxO0dCzpYw714wVyMxPVbSVbQ2ZYBNoxGNxbr33UXKaRY6MU= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@openvz.org, vsementsov@virtuozzo.com, dautovri@hpcdlab.com Subject: [PATCH 4/5] block/prl-xml: add bdrv_check Date: Fri, 13 Nov 2020 15:58:47 +0300 Message-Id: <20201113125848.20498-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201113125848.20498-1-vsementsov@virtuozzo.com> References: <20201113125848.20498-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.71] X-ClientProxiedBy: AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5abbcadd-63d0-4a5e-b281-08d887d3e766 X-MS-TrafficTypeDiagnostic: AS8PR08MB5877: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:40; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: H+vEOphr6ffTX/5Btjt8QqetIqs3cQAhl2+a+u44IlmpAJK5nYjH6ANIXqFDGccwnbCiHYU5EI3N2vmC4Y5zDcfYgHJyUkzmj32ZHWpHNusyX134WM5yf0H/zOTmZKdRlV8vnhLDKHC8FrfbN2gCYQEsZ4lqwZd4yHyxOZ2jevK2kRBKRH7SUgez/WJmlWc1S54rIV7HlJNLWwOSbfijj3o3g+/kfgpnbsHb7M+MYWi3cMqaT2FYHtpQrsJGq9q8RnxYn/MQN54QkTYpX+viqwWx7aoFfm6UQ08Wj7M9uZtgPx6KyWut2nWooyNFn5jeW618y882kGk28e3kT86syg== 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)(39840400004)(346002)(396003)(366004)(376002)(66476007)(6916009)(26005)(83380400001)(8676002)(478600001)(52116002)(6506007)(86362001)(956004)(2616005)(66556008)(8936002)(1076003)(5660300002)(316002)(66946007)(16526019)(2906002)(186003)(6666004)(4326008)(6486002)(36756003)(6512007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: ME9sxnXVA0+qnYHSnth56NUztoqDdJ/MZHqSiE0p95vJPXj4Wh0u7Nxe2tbMCexFjfFB2xDFYp8NgrmcuviX/eSy+O51XcPHvxPx76dqjlYOWnhPCx7MmBV4vj0/BkEEne10mETqFD3eZfiz0ZqsaDIvGQjtmD369YxoH7i6CbvoLBpagy6DyM/h2gX3oDrHqFdTleGXBBrGazx8mwGfIlz2x4AHXCPnEbfWvPilwz8IK/CyGxGhNJyovOG/7OBmd8O6yrY1M2uUXjgvuxBf9SL2ADnbfyFOo4t4GbPk5tLRrHGMO5U/OyjHphaZb06/FE3uNLLZQwUs/ZA32Zno7EhJsp0VtgraISRgToQ7ix5dl1qqoe9PIjGF6SiUSTSlOgpycObLdbw6YibpswcnUP0FagJLrF9/OefuYAhhgtUNBl95It94wQ+A8SIZQU3jONhWhQs+XSZyfXbbOL0lkf6IXvKLok5SBAbCwiIuXZj9tLdOqMvYljgxjx+3SeWUdF6cq/CZjGBM/gRIKBfktdGbwevNUfYre1c3IB11H9QTOmEy6+y6N5ouxU8VfYCtxSLJO1pgsaKXf+JOgd+37B8fRbbDja6y7lCMOtijzoMUeqQAkkUmlijH2WT9Y3DbZsgxqLzNDmXVbYFMdspARA== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5abbcadd-63d0-4a5e-b281-08d887d3e766 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2020 12:59:06.4564 (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: KtxK/5Q2L9LdaH+XyiMt7fMTUNc0BXmt4azz2nqUh3lAZV/hP6sk2SCyvY+AvGKq1mZGIR8IS8Bny/uZjG6hDAqAnfLVIfghwUGgo+rHnAM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5877 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.6.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-DB3-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/13 07:59:54 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Klim Kireev Add bdrv_check, which just checks child image and all backings. Signed-off-by: Klim Kireev --- block/prl-xml.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/block/prl-xml.c b/block/prl-xml.c index 023651342c..736cd98469 100644 --- a/block/prl-xml.c +++ b/block/prl-xml.c @@ -520,6 +520,23 @@ static coroutine_fn int prl_co_flush_to_os(BlockDriver= State *bs) return bdrv_co_flush(s->image->bs); } =20 +static coroutine_fn int prl_co_check_xml(BlockDriverState *bs,=20 + BdrvCheckResult *result, + BdrvCheckMode fix) { + BDRVPrlXmlState *s =3D bs->opaque; + BdrvChild *cur =3D s->image; + int ret =3D 0; + + while (cur !=3D NULL && ret >=3D 0) { + if (cur->bs->drv->bdrv_co_check !=3D NULL) { + ret =3D bdrv_check(cur->bs, result, fix); + } + cur =3D cur->bs->backing; + } + + return ret; +} + static BlockDriver bdrv_prl_xml =3D { .format_name =3D "prl-xml", .instance_size =3D sizeof(BDRVPrlXmlState), @@ -529,6 +546,7 @@ static BlockDriver bdrv_prl_xml =3D { .bdrv_co_writev =3D prl_co_writev, .bdrv_close =3D prl_close_xml, .bdrv_co_flush_to_os =3D prl_co_flush_to_os, + .bdrv_co_check =3D prl_co_check_xml, .create_opts =3D &prl_xml_create_opts, .bdrv_child_perm =3D bdrv_filter_default_perms, .is_filter =3D true --=20 2.21.3 From nobody Sat May 4 00:50:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1605272778; cv=pass; d=zohomail.com; s=zohoarc; b=eDuFdpXYWEwyeji25CfubwYnpsRJ8JBdAGEXBdx9677DUIFVLw0vuQcmifdtzWxYLqrdxtkvynqykO+uoNR9CxaywD3YdyDLEkF20naahKQEt+a+2ZNfeaZuYb+HpLRa7MBX28jnmIIR+s8xt9/UA7z9+dnsCx/wFSTQNECeVFI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605272778; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8gf1noyfbEi9Ep3nQc5Mo6S3uJTqsBrknytwfEZPFJU=; b=SwdvC7jIbKXNKamobDiSsj79u7pMASnhrf2sdLTwb19Tlqq8C7HleRG/Kan0ksZwY9yhT0UJyKBqwBoq69rBnNlEHMjEjyVVvuK2fV2H2uZoA2ulTAK9oZBJ9volsExatv4ITLE7+BP67FUlENslL163XlUJ0bRrSvGnV7xIe34= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1605272778799158.09547911650407; Fri, 13 Nov 2020 05:06:18 -0800 (PST) Received: from localhost ([::1]:41468 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdYmP-0002zX-GW for importer@patchew.org; Fri, 13 Nov 2020 08:06:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdYgN-0006en-MO; Fri, 13 Nov 2020 08:00:03 -0500 Received: from mail-eopbgr60133.outbound.protection.outlook.com ([40.107.6.133]:5175 helo=EUR04-DB3-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 1kdYgK-0004NL-Q0; Fri, 13 Nov 2020 08:00:03 -0500 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB5877.eurprd08.prod.outlook.com (2603:10a6:20b:291::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21; Fri, 13 Nov 2020 12:59:07 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::fd02:1330:f620:1243%9]) with mapi id 15.20.3499.032; Fri, 13 Nov 2020 12:59:07 +0000 Received: from kvm.sw.ru (185.215.60.71) by AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21 via Frontend Transport; Fri, 13 Nov 2020 12:59:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Fmf3E0dsHtgFQlO+U9BPdNr+M1/dQX2GOSrsFOZyI+bU6oucnLUihcWvHaKRkx9cMkDFAW+u5DLl92Nkoxy1WcP2TR0mZYM4RD9vSzWOOR6aYO4swDYxi6ec9HQKkNOZcGeyeqmGP4cZ5bRGYI9L3RiruSTErR7is62tIbQHfxHtT5RxltukHFqAWhKAaK8Gr+adsPkn2+cyt5fOw29u9w+kVHBqFFeMQPM6Ex2YqBIK7rOQuZVp/4vFFfLRh2RHF+38N6OC3y8hliGc544ZqBfOEo0weoQsQPyS1RMXQqyAolZUqoTplYZNO1yCO6X1Rt9V7xg4wrCrLz01rWB/Sg== 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=8gf1noyfbEi9Ep3nQc5Mo6S3uJTqsBrknytwfEZPFJU=; b=ZTCCk3v/cnEmLgsUv2SN8i2VUGftvUVXf1BpXaok1Ut5JC2//XbX4YN4g6wCqt5J882+JyodOl33CrB7KlZbqYuywvPSygguBPkdOVc1uLuHvxq6AvF0BrhMtklzL7NKiMw+JwI5YSl6mZQIxbSLMwMZCbyKgmsZSgsskNG04s+HzcG0jer4UiS1G/U+7uYHq93M16CxG4USB8jYylQaQbGwU8X28sFhUSdz3UH9XZqx9sPq9NDCUhGOLCEgh3btW9KjQFOhM+4q3A9NRlpMSK7wT8bVOXBWL9uys+D4+x2TBEsuMYvPaBtYWZsaZ6KlyZ4532jTfbmfCFYIVdenzQ== 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=8gf1noyfbEi9Ep3nQc5Mo6S3uJTqsBrknytwfEZPFJU=; b=XsLBh5HhPhZDop9k3mL2Sy03peyBpLXRVivshll/UOhr8x708fMoQ5WsLnEctOqUquxJPYLy8lD0fnsUSJcoPzWnoWLMqs7w/A0FkSaTFUoZxHS0v7iaf9QHNg0Sp3aaMc7vp2bgNk3LKCqhNvLAYODLkM2/r2q1OLv0evAxJCQ= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@openvz.org, vsementsov@virtuozzo.com, dautovri@hpcdlab.com Subject: [PATCH 5/5] iotests: add test for prl-xml format Date: Fri, 13 Nov 2020 15:58:48 +0300 Message-Id: <20201113125848.20498-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20201113125848.20498-1-vsementsov@virtuozzo.com> References: <20201113125848.20498-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.71] X-ClientProxiedBy: AM4PR0902CA0003.eurprd09.prod.outlook.com (2603:10a6:200:9b::13) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8bcbc170-efbd-4f11-9927-08d887d3e7c9 X-MS-TrafficTypeDiagnostic: AS8PR08MB5877: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: V4qAZcwel2PLMHbR/Vdph0QwZFp5PYVx04mPOJCwNLtBlG7irURmi2ZSW3nEv/xLCY/5yXOjAki/LIsVcxmwUcupVGalyAUxhVeaGT/eDMtfZvEDpGx2JlE7kRJl7sCuWzHrKwTnbiXAgRow9D0UK4EX1g8is6tb2+C0YFEEHApdNbTDS6v0t8+e02Ze/xwQVaz8yfHhGVfTovxEoiVoDHBcPsMO+z524nx5hyppEdennogfMFf610m/vy+5W00MalbIL8reXF6WbIun9GU3h4kY7x5OjsKhIS8NMbeDooS4+Vc/kT5EEoH0KNLTw2a3eo2pUy1oGd5Me4PVw18NuCaoE5i3KiftaErExmBNUUeZpnyHDslLZE9521o4hbv/7LS0bciHfh6m0Vky2IpS1zuHNQNVum/NSlyT59b16Mj9LHtZhU65hAwM0ZLWzQmLul5Zd0C+/MATwAh6t/3fcTW0pftMXkF9jP6My188cTw= 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)(39840400004)(346002)(396003)(366004)(376002)(66476007)(6916009)(26005)(83380400001)(30864003)(8676002)(478600001)(52116002)(6506007)(86362001)(956004)(2616005)(66556008)(8936002)(1076003)(5660300002)(316002)(66946007)(16526019)(2906002)(186003)(6666004)(4326008)(6486002)(19627235002)(36756003)(6512007)(2004002)(21314003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: Y2zGmGBEGNrPTufEhvRPr+hgDBz/ApasquKmnt40TJNP0y6nmULsXeyavEd6ZshCzE5WfeT0w/Mmz2SafV3Rh1iLXvGb/6+94THzY/4jHPDIma2jxv0h65OLfz8KV/F0kl3hyLSCDs03aMtNs8QnUccq0awxRRNHy6NVhd0MSE3/bZ4CevVxtOMI8XHEQekBCSOgvosyJqdQ5KagbZTrwBXMfUPD0oVQQDWL1FdBOHsbbeCE7UivPXJ3QoiKxpyqchiwOfJnyKXjR8rWStXb/C00YbU417ZhwPbyQ4w00ed0QaSl8sReNye3dNfN+VJl5BsJJALsFLAjJ9xg+avSm68RqCvq/5ja7cvfDX7kjTYGDyL5sQUK4eOd+nqoR/kkizxSaAhauMVvDBykNoTUL2IKkhJJLYcCouXkTBnGl95sPXa5QlSwhXRMxYxPVvZ2J31Zd5iBQnzcGv3oV0hUk08EkpD+8M5m5DmX1GdP1sTR+xo97ZiMUWtfqPSBk271gMpyWpmoBd/R0X+WhjXoWFHNEFV2pQGMGYc7bjykt+fRQ7/MdKgvuQrANg/v6VdOct/s2vWUSv0EghaM7cFjNpnupQ+Phxjf5Qhqd6gMGzH6ElsNStHlXvUwUcFWA2Gg+LBBaltuDIA0fAxdHk2CQQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8bcbc170-efbd-4f11-9927-08d887d3e7c9 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2020 12:59:07.1514 (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: AnpmS0Dtd++emswUZlILLQ8epXfKtExIljuyBcYmdsWKJc5ZrYTMRl0xSiBvw+QGCKHXnKoYC0oFVqWlV12gTtzErF7zYsXEkuPaiiL6hT8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5877 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.6.133; envelope-from=vsementsov@virtuozzo.com; helo=EUR04-DB3-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/13 07:59:54 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Edgar Kaziakhmedov Signed-off-by: Edgar Kaziakhmedov Reviewed-by: Vladimir Sementsov-Ogievskiy --- tests/qemu-iotests/164 | 98 ++++++++++++++++++ tests/qemu-iotests/164.out | 54 ++++++++++ tests/qemu-iotests/check | 7 ++ tests/qemu-iotests/group | 1 + .../prl-xml/DiskDescriptor.xml.bz2 | Bin 0 -> 457 bytes .../sample_images/prl-xml/Snapshots.xml.bz2 | Bin 0 -> 307 bytes ...aabe3-6958-40ff-92a7-860e329aab41}.hds.bz2 | Bin 0 -> 93 bytes ...476cf-d62e-45d1-b355-86feca91376e}.hds.bz2 | Bin 0 -> 93 bytes 8 files changed, 160 insertions(+) create mode 100755 tests/qemu-iotests/164 create mode 100644 tests/qemu-iotests/164.out create mode 100644 tests/qemu-iotests/sample_images/prl-xml/DiskDescriptor= .xml.bz2 create mode 100644 tests/qemu-iotests/sample_images/prl-xml/Snapshots.xml.= bz2 create mode 100644 tests/qemu-iotests/sample_images/prl-xml/parallels.{5fb= aabe3-6958-40ff-92a7-860e329aab41}.hds.bz2 create mode 100644 tests/qemu-iotests/sample_images/prl-xml/parallels.{986= 476cf-d62e-45d1-b355-86feca91376e}.hds.bz2 diff --git a/tests/qemu-iotests/164 b/tests/qemu-iotests/164 new file mode 100755 index 0000000000..a55ab5d7d8 --- /dev/null +++ b/tests/qemu-iotests/164 @@ -0,0 +1,98 @@ +#!/bin/bash +# +# prl-xml format validation test +# +# Copyright (C) 2017 Edgar Kaziakhmedov +# +# 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 . +# + +# creator +owner=3Dedgar.kaziakhmedov@virtuozzo.com + +seq=3D`basename $0` +echo "QA output created by $seq" + +here=3D`pwd` +status=3D1 # failure is the default! + +_cleanup() +{ + _rm_test_img "$TEST_DIR/$PRL_XML_DIR/$CUR_IMAGE" + _rm_test_img "$TEST_DIR/$PRL_XML_DIR/$BACK_IMAGE" + _rm_test_img "$TEST_DIR/$PRL_XML_DIR/$SNAP_LIST" + _cleanup_test_img + rmdir "$TEST_DIR/$PRL_XML_DIR" +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt prl-xml +_supported_proto file +_supported_os Linux + +inuse_offset=3D$((0x2c)) + +PRL_XML_DIR=3D"prl-xml" +mkdir "$TEST_DIR/$PRL_XML_DIR" +CUR_IMAGE=3D"parallels.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds" +BACK_IMAGE=3D"parallels.{986476cf-d62e-45d1-b355-86feca91376e}.hds" +SNAP_LIST=3D"Snapshots.xml" +XML_IMG=3D"DiskDescriptor.xml" +size=3D128M +CLUSTER_SIZE=3D64k +IMGFMT=3Dprl-xml +_use_sample_img "$PRL_XML_DIR/$CUR_IMAGE.bz2" +_use_sample_img "$PRL_XML_DIR/$BACK_IMAGE.bz2" +_use_sample_img "$PRL_XML_DIR/$SNAP_LIST.bz2" +_use_sample_img "$PRL_XML_DIR/$XML_IMG.bz2" + +echo =3D=3D read empty image =3D=3D +{ $QEMU_IO -c "read -P 0 32k 64k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | = _filter_testdir +echo =3D=3D write more than 1 block in a row =3D=3D +{ $QEMU_IO -c "write -P 0x11 32k 128k" "$TEST_IMG"; } 2>&1 | _filter_qemu_= io | _filter_testdir +echo =3D=3D read less than block =3D=3D +{ $QEMU_IO -c "read -P 0x69 32k 32k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io= | _filter_testdir +echo =3D=3D read exactly 1 block =3D=3D +{ $QEMU_IO -c "read -P 0x69 64k 64k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io= | _filter_testdir +echo =3D=3D read more than 1 block =3D=3D +{ $QEMU_IO -c "read -P 0x69 32k 128k" "$TEST_IMG"; } 2>&1 | _filter_qemu_i= o | _filter_testdir +echo =3D=3D check that there is no trash after written =3D=3D +{ $QEMU_IO -c "read -P 0 160k 32k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io |= _filter_testdir +echo =3D=3D check that there is no trash before written =3D=3D +{ $QEMU_IO -c "read -P 0 0 32k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _f= ilter_testdir +echo =3D=3D write the whole disk =3D=3D +{ $QEMU_IO -c "write -P 0x45 0 2M" "$TEST_IMG"; } 2>&1 | _filter_qemu_io |= _filter_testdir +echo =3D=3D read the whole disk =3D=3D +{ $QEMU_IO -c "read -P 0x45 0 2M" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | = _filter_testdir +echo =3D=3D check that there is error while write out of range =3D=3D +{ $QEMU_IO -c "write -P 0 2M 32k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | = _filter_testdir +echo =3D=3D check that there is error while disk size is less than data wr= itten =3D=3D +{ $QEMU_IO -c "write -P 0x45 0 3M" "$TEST_IMG"; } 2>&1 | _filter_qemu_io |= _filter_testdir + +echo "=3D=3D Corrupt image =3D=3D" +poke_file "$TEST_DIR/$PRL_XML_DIR/$CUR_IMAGE" "$inuse_offset" "\x59\x6e\x6= f\x74" +{ $QEMU_IO -c "read -P 0x11 64k 64k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io= | _filter_testdir +# as it is a block filter, we change driver format +_check_test_img +_check_test_img -r all +{ $QEMU_IO -c "read -P 0x11 64k 64k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io= | _filter_testdir + +# success, all done +echo "*** done" +rm -f $seq.full +status=3D0 diff --git a/tests/qemu-iotests/164.out b/tests/qemu-iotests/164.out new file mode 100644 index 0000000000..777c0c2c1c --- /dev/null +++ b/tests/qemu-iotests/164.out @@ -0,0 +1,54 @@ +QA output created by 164 +=3D=3D read empty image =3D=3D +read 65536/65536 bytes at offset 32768 +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +=3D=3D write more than 1 block in a row =3D=3D +wrote 131072/131072 bytes at offset 32768 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +=3D=3D read less than block =3D=3D +Pattern verification failed at offset 32768, 32768 bytes +read 32768/32768 bytes at offset 32768 +32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +=3D=3D read exactly 1 block =3D=3D +Pattern verification failed at offset 65536, 65536 bytes +read 65536/65536 bytes at offset 65536 +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +=3D=3D read more than 1 block =3D=3D +Pattern verification failed at offset 32768, 131072 bytes +read 131072/131072 bytes at offset 32768 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +=3D=3D check that there is no trash after written =3D=3D +read 32768/32768 bytes at offset 163840 +32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +=3D=3D check that there is no trash before written =3D=3D +read 32768/32768 bytes at offset 0 +32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +=3D=3D write the whole disk =3D=3D +wrote 2097152/2097152 bytes at offset 0 +2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +=3D=3D read the whole disk =3D=3D +read 2097152/2097152 bytes at offset 0 +2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +=3D=3D check that there is error while write out of range =3D=3D +write failed: Input/output error +=3D=3D check that there is error while disk size is less than data written= =3D=3D +write failed: Input/output error +=3D=3D Corrupt image =3D=3D +can't open device TEST_DIR/prl-xml/DiskDescriptor.xml: parallels: Image wa= s not closed correctly; cannot be opened read/write +Can't open top image +ERROR image was not closed correctly + +1 errors were found on the image. +Data may be corrupted, or further writes to the image may corrupt it. +Repairing image was not closed correctly +The following inconsistencies were found and repaired: + + 0 leaked clusters + 1 corruptions + +Double checking the fixed image now... +No errors were found on the image. +Pattern verification failed at offset 65536, 65536 bytes +read 65536/65536 bytes at offset 65536 +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +*** done diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check index e6b6ff7a04..0a87c8d840 100755 --- a/tests/qemu-iotests/check +++ b/tests/qemu-iotests/check @@ -229,6 +229,7 @@ image format options -bochs test bochs -cloop test cloop -parallels test parallels + -prl-xml test prl-xml -qcow test qcow -qcow2 test qcow2 -qed test qed @@ -288,6 +289,12 @@ testlist options xpand=3Dfalse ;; =20 + -prl-xml) + IMGFMT=3Dprl-xml + IMGFMT_GENERIC=3Dfalse + xpand=3Dfalse + ;; + -qcow) IMGFMT=3Dqcow xpand=3Dfalse diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index a2dfe79d86..d22853fed6 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -168,6 +168,7 @@ 160 rw auto quick 162 auto quick 163 rw auto quick +164 rw auto quick 165 rw auto quick 170 rw auto quick 171 rw auto quick diff --git a/tests/qemu-iotests/sample_images/prl-xml/DiskDescriptor.xml.bz= 2 b/tests/qemu-iotests/sample_images/prl-xml/DiskDescriptor.xml.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..08dad3b4a9c980e931bc0b1d128= bf931754a0730 GIT binary patch literal 457 zcmV;)0XF_ZT4*^jL0KkKSrF;;(*OYXUw}kZPy_$xpWsgbzwh08Kmq%XS_EJK00000 z000500FhFe>Y92HlRY3t1k)x7iM22Qsv;FVpa3SCYG^bXG{_8| zrfN!{Cd7v_5J(9M0s}_dWC~Q2$^q`CQ9GkqB)PntA`y-oQij;)JNjE(B9Y*5aV@eZ zNm#hli#yE)7^1NyrcFiV@r278BPk{EYaYR2-xv$bF@i7>S(f6lk}@&{M@|-=3DEDInh z1TQdzVh>8Vid!*P!6c*$Ae_l29fvPb-K|eJV1RjPLW4O6g5X2eSUs4Sk}gILzRBoP zpHePXvokW4>Jvg~PXZ{SSoaK&ZH+Ou+Zm`9dCH>;i})omFSQhX*`7S5GZHtsEf=3D>w z1@YYz7*4~Ij?&_cOOoQ=3D{;YNEHAluO=3DlD$;(-cuvUM(k+scFz|XL9qg!Mwv9P4QDi zZfryL&S!Erw6rX7Q7R#ko6NZ8#&UYgdr7g++-G_%Jw_LzuB3a>_GL3NF_MS1iYl0^ z6I+QmlSNwC6>a&aGBB|%l=3DPU|mZaQ)`TG;NQwaRAwJ&DIPvBk26yZWZL#NYBA5X_~ literal 0 HcmV?d00001 diff --git a/tests/qemu-iotests/sample_images/prl-xml/Snapshots.xml.bz2 b/t= ests/qemu-iotests/sample_images/prl-xml/Snapshots.xml.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..b5d80ae94d4500b1b19f3439dc5= e953383797c6f GIT binary patch literal 307 zcmV-30nGkFT4*^jL0KkKSxpAo!2keSUw}kVa0CDMtRYMaKj+`dFaafl45Vb#^oG(j z!Ww#j1Juv}&}yEUO*J$z4FF*QqfCtlsip-~(t(pxG&KMKXlV5qfO$lMX&?jw2v8-q z1`8?>TaY|qfYis;LeUupdT2xBtur^&?vpdx7R17+oiv%}2wGIw-)zxJLr_^;oRJC4 z2#6Ap!Nu!vRP96>_M1>58rRKl2SU7pU?xx5wYliRwKUL%LTSn&49HEuR+X$}sk5@T z=3Dxr(7)RvMJ8`AEc%m$-oFQzoR=3DyQk}&wu2md@z{{n6N7=3Dp=3DAGC+I1H@3>iwz8Wyyr zWa1$U^GSrJhB+xNlJ>S-MI_qG1yW`~MP9ZklRCtzNpT7YFCZ1HaF+M+cO+AV2?Wq> FtPtE(2!JYJ)<6It00Emf9jW8MFZ406H$@ig2MJw+D1EabX`c literal 0 HcmV?d00001 diff --git a/tests/qemu-iotests/sample_images/prl-xml/parallels.{986476cf-d= 62e-45d1-b355-86feca91376e}.hds.bz2 b/tests/qemu-iotests/sample_images/prl-= xml/parallels.{986476cf-d62e-45d1-b355-86feca91376e}.hds.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..174c8ba055fc1a24b91f179670f= d15b53e00efdd GIT binary patch literal 93 zcmV-j0HXgwT4*^jL0KkKS=3D)oU7yuwJ=3DYr6{KmY>(2!JYJ)<6It00Emf9jW8MFZ406H$@ig2MJw+D1EabX`c literal 0 HcmV?d00001 --=20 2.21.3