From nobody Sat Nov 23 05:16:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=quarantine dis=quarantine) header.from=dupond.be ARC-Seal: i=1; a=rsa-sha256; t=1686046211; cv=none; d=zohomail.com; s=zohoarc; b=jd7LOWQC4wuaS/D4EKLliCGqIwQGPqLFS9BFHajC+pfXFVaAkbNEQO8OYkXgqE4t040fONl+jZvJWYRoLASPsEic3+Ddokfk3eb5BCFjM27BzhSn/oglR2qJ7uOe0yvNatpbZinDozSNXyDnzx+r3RTZdkWT89fdFT5PHWKCaW0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686046211; 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=mzSreMe/cQgvG30U8wRHfIk8pNpb+wrDWHO+Z5Gg9M8=; b=b/hwP7J2H/WPPARfTQc9eVxCBzFOOE+v9MHzjl4bG+dvEFHTrm5kDNS1b6A8UUVARWOTpe1TCci3cfYm3Q3VchZ5b86al3Jx3hS6Fux8wfUQ6VJNZZw+299cZ50EIqU11n2jk7ZUO7LS1SsUjxdSCSz2CGtdH9HW6QREKSrcDIA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=quarantine dis=quarantine) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1686046211162526.9205611836381; Tue, 6 Jun 2023 03:10:11 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-473-_wmnjlEVNbyDtLqjGdu3dg-1; Tue, 06 Jun 2023 06:10:08 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3A2BE811E94; Tue, 6 Jun 2023 10:10:05 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 244B5C154D1; Tue, 6 Jun 2023 10:10:05 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 9A08119452C3; Tue, 6 Jun 2023 10:09:48 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 9EFC519465BA for ; Tue, 6 Jun 2023 10:08:00 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 8E1C940218C; Tue, 6 Jun 2023 10:08:00 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast10.extmail.prod.ext.rdu2.redhat.com [10.11.55.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 868FC492B00 for ; Tue, 6 Jun 2023 10:08:00 +0000 (UTC) Received: from us-smtp-inbound-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5F1B11C01E8D for ; Tue, 6 Jun 2023 10:08:00 +0000 (UTC) Received: from apollo.dupie.be (apollo.dupie.be [51.159.20.238]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-448-xCBAtp7bMZqxkHoFEGSVZQ-1; Tue, 06 Jun 2023 06:07:58 -0400 Received: from localhost.localdomain (unknown [IPv6:2a02:a03f:eaf7:ff01:cc6b:6666:e19c:b63f]) by apollo.dupie.be (Postfix) with ESMTPSA id 2603C1520F2A; Tue, 6 Jun 2023 11:59:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1686046210; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=mzSreMe/cQgvG30U8wRHfIk8pNpb+wrDWHO+Z5Gg9M8=; b=F7Ulqh9kGnaIO5UAGbv8vjwgiZ1kY2RZvEwWaRnimPFznhUp1lc1yRTXvN00+VVndleAzG gTlhLknMDuh5/FZ9disVQYe4XyxtVoMb3HDdKcPCWhGKFZ9fd0jdP3qoxfxPOQb3AwyFyg lY2FT7C/XFlDgmhgiYfz9O5FxWz05Wc= X-MC-Unique: _wmnjlEVNbyDtLqjGdu3dg-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: xCBAtp7bMZqxkHoFEGSVZQ-1 From: Jean-Louis Dupond To: libvir-list@redhat.com Subject: [PATCH 1/2] Add discard_no_unref option for qcow2 images Date: Tue, 6 Jun 2023 11:54:40 +0200 Message-ID: <20230606095741.246246-2-jean-louis@dupond.be> In-Reply-To: <20230606095741.246246-1-jean-louis@dupond.be> References: <20230606095741.246246-1-jean-louis@dupond.be> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mailman-Approved-At: Tue, 06 Jun 2023 10:09:34 +0000 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jean-Louis Dupond Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: dupond.be Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1686046213225100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Qemu 8.1.0 will add discard_no_unref option for qcow2 images. When this option is enabled (default=3Dfalse), then it will no longer unreference clusters when guest does a discard, but it will just free the blocks (useful for incremental backups for example) and pass the discard to the lower layer. This was implemented to avoid fragmentation within the qcow2 image. Signed-off-by: Jean-Louis Dupond --- docs/formatdomain.rst | 6 +++ src/conf/domain_conf.c | 8 +++ src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 15 ++++++ src/conf/schemas/domaincommon.rng | 8 +++ src/conf/storage_source_conf.c | 1 + src/conf/storage_source_conf.h | 1 + src/qemu/qemu_block.c | 11 ++--- src/qemu/qemu_domain.c | 1 + src/qemu/qemu_driver.c | 4 +- src/vz/vz_utils.c | 6 +++ tests/qemusecuritytest.c | 1 + .../disk-discard_no_unref.x86_64-latest.args | 39 +++++++++++++++ .../disk-discard_no_unref.xml | 39 +++++++++++++++ tests/qemuxml2argvtest.c | 1 + .../disk-discard_no_unref.x86_64-latest.xml | 49 +++++++++++++++++++ tests/qemuxml2xmltest.c | 1 + 17 files changed, 185 insertions(+), 7 deletions(-) create mode 100644 tests/qemuxml2argvdata/disk-discard_no_unref.x86_64-lat= est.args create mode 100644 tests/qemuxml2argvdata/disk-discard_no_unref.xml create mode 100644 tests/qemuxml2xmloutdata/disk-discard_no_unref.x86_64-l= atest.xml diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index c3526439bf..6e89f8e01f 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -3284,6 +3284,12 @@ paravirtualized driver is specified via the ``disk``= element. format driver of the ``qemu`` hypervisor can be controlled via the ``max_size`` subelement (see example below). =20 + The optional ``discard_no_unref`` attribute can be set to control th= e way + the ``qemu`` hypervisor handles guest discard commands inside the qc= ow2 + image. When enabled, a discard from within the guest will not cause = the + qcow2 image to remove the cluster references, but will still send the + discard command to its lower layer. :since:`Since 9.5.0` + In the majority of cases the default configuration used by the hyper= visor is sufficient so modifying this setting should not be necessary. For specifics on how the metadata cache of ``qcow2`` in ``qemu`` behaves= refer diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0edb1bda9d..f28cb64eb5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7826,6 +7826,10 @@ virDomainDiskDefDriverParseXML(virDomainDiskDef *def, if (virXMLPropUInt(cur, "queue_size", 10, VIR_XML_PROP_NONE, &def->que= ue_size) < 0) return -1; =20 + if (virXMLPropTristateSwitch(cur, "discard_no_unref", VIR_XML_PROP_NON= E, + &def->discard_no_unref) < 0) + return -1; + return 0; } =20 @@ -22501,6 +22505,10 @@ virDomainDiskDefFormatDriver(virBuffer *buf, virBufferAsprintf(&attrBuf, " detect_zeroes=3D'%s'", virDomainDiskDetectZeroesTypeToString(disk->dete= ct_zeroes)); =20 + if (disk->discard_no_unref) + virBufferAsprintf(&attrBuf, " discard_no_unref=3D'%s'", + virTristateSwitchTypeToString(disk->discard_no_u= nref)); + if (disk->queues) virBufferAsprintf(&attrBuf, " queues=3D'%u'", disk->queues); =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 629e32c39f..cddaa3824d 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -606,6 +606,7 @@ struct _virDomainDiskDef { virDomainDiskDiscard discard; unsigned int iothread; /* unused =3D 0, > 0 specific thread # */ virDomainDiskDetectZeroes detect_zeroes; + virTristateSwitch discard_no_unref; char *domain_name; /* backend domain name */ unsigned int queues; unsigned int queue_size; diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 80d6a2ffd9..34508b1474 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -379,6 +379,12 @@ virDomainDiskVhostUserValidate(const virDomainDiskDef = *disk) return -1; } =20 + if (disk->discard_no_unref) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("discard_no_unref is not supported with vhostuser= disk")); + return -1; + } + /* Unsupported driver elements */ =20 if (disk->src->metadataCacheMaxSize > 0) { @@ -921,6 +927,15 @@ virDomainDiskDefValidate(const virDomainDef *def, return -1; } =20 + if (disk->discard_no_unref =3D=3D VIR_TRISTATE_SWITCH_ON) { + if (disk->src->readonly) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("discard_no_unref is not compatible with read= -only disk '%1$s'"), + disk->dst); + return -1; + } + } + return 0; } =20 diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index c1725bb511..0b49fbcfeb 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -2514,6 +2514,9 @@ + + + @@ -2629,6 +2632,11 @@ + + + + + diff --git a/src/conf/storage_source_conf.c b/src/conf/storage_source_conf.c index 99061e4df7..dcac3a8ff6 100644 --- a/src/conf/storage_source_conf.c +++ b/src/conf/storage_source_conf.c @@ -809,6 +809,7 @@ virStorageSourceCopy(const virStorageSource *src, def->cachemode =3D src->cachemode; def->discard =3D src->discard; def->detect_zeroes =3D src->detect_zeroes; + def->discard_no_unref =3D src->discard_no_unref; def->sslverify =3D src->sslverify; def->readahead =3D src->readahead; def->timeout =3D src->timeout; diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h index c6187dda59..f13e7c756a 100644 --- a/src/conf/storage_source_conf.h +++ b/src/conf/storage_source_conf.h @@ -399,6 +399,7 @@ struct _virStorageSource { int cachemode; /* enum virDomainDiskCache */ int discard; /* enum virDomainDiskDiscard */ int detect_zeroes; /* enum virDomainDiskDetectZeroes */ + virTristateSwitch discard_no_unref; =20 bool floppyimg; /* set to true if the storage source is going to be us= ed as a source for floppy drive */ diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 8b2159f845..dcdf883926 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -1117,12 +1117,11 @@ qemuBlockStorageSourceGetFormatQcow2Props(virStorag= eSource *src, * see: qemu.git/docs/qcow2-cache.txt * https://git.qemu.org/?p=3Dqemu.git;a=3Dblob;f=3Ddocs/qcow2-cache.txt */ - if (src->metadataCacheMaxSize > 0) { - if (virJSONValueObjectAdd(&props, - "U:cache-size", src->metadataCacheMaxSiz= e, - NULL) < 0) - return -1; - } + if (virJSONValueObjectAdd(&props, + "P:cache-size", src->metadataCacheMaxSize, + "T:discard-no-unref", src->discard_no_unref, + NULL) < 0) + return -1; =20 return 0; } diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 8f77e8fc58..a22dac9884 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -11022,6 +11022,7 @@ qemuDomainPrepareDiskSourceData(virDomainDiskDef *d= isk, src->iomode =3D disk->iomode; src->cachemode =3D disk->cachemode; src->discard =3D disk->discard; + src->discard_no_unref =3D disk->discard_no_unref; =20 if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY) src->floppyimg =3D true; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 56f4cd6197..f4aaa28ba3 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -14225,8 +14225,10 @@ qemuDomainBlockCopyCommon(virDomainObj *vm, * into the topmost virStorage source of the disk chain. * Since 'mirror' has the ambition to replace it we need to propagate * it into the mirror too. We do it directly as otherwise we'd need - * to modify all callers of 'qemuDomainPrepareStorageSourceBlockdev' */ + * to modify all callers of 'qemuDomainPrepareStorageSourceBlockdev' + * Same for discard_no_unref */ mirror->detect_zeroes =3D disk->detect_zeroes; + mirror->discard_no_unref =3D disk->discard_no_unref; =20 /* If reusing an external image that includes a backing file but the u= ser * did not enumerate the chain in the XML we need to detect the chain = */ diff --git a/src/vz/vz_utils.c b/src/vz/vz_utils.c index 2db1146149..7db7dbd419 100644 --- a/src/vz/vz_utils.c +++ b/src/vz/vz_utils.c @@ -347,6 +347,12 @@ vzCheckDiskUnsupportedParams(virDomainDiskDef *disk) return -1; } =20 + if (disk->discard_no_unref) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Disk discard_no_unref is not supported by vz dri= ver.")); + return -1; + } + if (disk->startupPolicy !=3D VIR_DOMAIN_STARTUP_POLICY_DEFAULT) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Setting up disk startup policy is not " diff --git a/tests/qemusecuritytest.c b/tests/qemusecuritytest.c index e2989c05aa..51c309cc57 100644 --- a/tests/qemusecuritytest.c +++ b/tests/qemusecuritytest.c @@ -212,6 +212,7 @@ mymain(void) DO_TEST_DOMAIN("disk-cdrom-tray"); DO_TEST_DOMAIN("disk-copy_on_read"); DO_TEST_DOMAIN("disk-detect-zeroes"); + DO_TEST_DOMAIN("disk-discard_no_unref"); DO_TEST_DOMAIN("disk-error-policy"); DO_TEST_DOMAIN("disk-floppy"); DO_TEST_DOMAIN("disk-floppy-q35"); diff --git a/tests/qemuxml2argvdata/disk-discard_no_unref.x86_64-latest.arg= s b/tests/qemuxml2argvdata/disk-discard_no_unref.x86_64-latest.args new file mode 100644 index 0000000000..4c493c2660 --- /dev/null +++ b/tests/qemuxml2argvdata/disk-discard_no_unref.x86_64-latest.args @@ -0,0 +1,39 @@ +LC_ALL=3DC \ +PATH=3D/bin \ +HOME=3D/var/lib/libvirt/qemu/domain--1-test \ +USER=3Dtest \ +LOGNAME=3Dtest \ +XDG_DATA_HOME=3D/var/lib/libvirt/qemu/domain--1-test/.local/share \ +XDG_CACHE_HOME=3D/var/lib/libvirt/qemu/domain--1-test/.cache \ +XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-test/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=3Dtest,debug-threads=3Don \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/va= r/lib/libvirt/qemu/domain--1-test/master-key.aes"}' \ +-machine pc,usb=3Doff,dump-guest-core=3Doff,memory-backend=3Dpc.ram,acpi= =3Doff \ +-accel tcg \ +-cpu qemu64 \ +-m 1024 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}= ' \ +-overcommit mem-lock=3Doff \ +-smp 1,sockets=3D1,cores=3D1,threads=3D1 \ +-uuid 92d7a226-cfae-425b-a6d3-00bbf9ec5c9e \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=3Dcharmonitor,fd=3D1729,server=3Don,wait=3Doff \ +-mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ +-rtc base=3Dutc \ +-no-shutdown \ +-boot menu=3Don,strict=3Don \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0= x2"}' \ +-blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/f14.img","= node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-2-format","read-only":false,"discard":"un= map","driver":"qcow2","discard-no-unref":true,"file":"libvirt-2-storage"}' \ +-device '{"driver":"virtio-blk-pci","bus":"pci.0","addr":"0x4","drive":"li= bvirt-2-format","id":"virtio-disk0","bootindex":2}' \ +-blockdev '{"driver":"file","filename":"/var/lib/libvirt/Fedora-14-x86_64-= Live-KDE.iso","node-name":"libvirt-1-storage","auto-read-only":true,"discar= d":"unmap"}' \ +-blockdev '{"node-name":"libvirt-1-format","read-only":true,"discard":"ign= ore","driver":"raw","file":"libvirt-1-storage"}' \ +-device '{"driver":"ide-cd","bus":"ide.1","unit":0,"drive":"libvirt-1-form= at","id":"ide0-1-0","bootindex":1}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","add= r":"0x2"}' \ +-sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ +-msg timestamp=3Don diff --git a/tests/qemuxml2argvdata/disk-discard_no_unref.xml b/tests/qemux= ml2argvdata/disk-discard_no_unref.xml new file mode 100644 index 0000000000..34d61b9879 --- /dev/null +++ b/tests/qemuxml2argvdata/disk-discard_no_unref.xml @@ -0,0 +1,39 @@ + + test + 92d7a226-cfae-425b-a6d3-00bbf9ec5c9e + 1048576 + 1048576 + 1 + + hvm + + + + + + destroy + restart + restart + + /usr/bin/qemu-system-x86_64 + + +
+ + + + + + + + + +
+ + + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index d914d8cbea..2dda9c4501 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1245,6 +1245,7 @@ mymain(void) DO_TEST_CAPS_LATEST("disk-copy_on_read"); DO_TEST_CAPS_LATEST("disk-discard"); DO_TEST_CAPS_LATEST("disk-detect-zeroes"); + DO_TEST_CAPS_LATEST("disk-discard_no_unref"); DO_TEST_CAPS_LATEST("disk-snapshot"); DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-same-targets"); DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-missing-target-invalid"); diff --git a/tests/qemuxml2xmloutdata/disk-discard_no_unref.x86_64-latest.x= ml b/tests/qemuxml2xmloutdata/disk-discard_no_unref.x86_64-latest.xml new file mode 100644 index 0000000000..c2b49d4785 --- /dev/null +++ b/tests/qemuxml2xmloutdata/disk-discard_no_unref.x86_64-latest.xml @@ -0,0 +1,49 @@ + + test + 92d7a226-cfae-425b-a6d3-00bbf9ec5c9e + 1048576 + 1048576 + 1 + + hvm + + + + + + qemu64 + + + destroy + restart + restart + + /usr/bin/qemu-system-x86_64 + + + + +
+ + + + + + +
+ + +
+ + +
+ + + + +