[PATCH 3/5] conf: add support for max_unmap_size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Kristina Hanicova <khanicov@xxxxxxxxxx>
---
 docs/formatdomain.rst             | 10 ++++++++++
 src/conf/domain_conf.c            | 12 +++++++++++-
 src/conf/domain_conf.h            |  1 +
 src/conf/domain_validate.c        |  3 ++-
 src/conf/schemas/domaincommon.rng |  5 +++++
 5 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 0d0812f08c..1fe93066bd 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -2591,6 +2591,13 @@ paravirtualized driver is specified via the ``disk`` element.
        <blockio logical_block_size='512' physical_block_size='4096' discard_granularity='4096'/>
        <target dev='hdj' bus='ide'/>
      </disk>
+     <disk type='file' device='disk'>
+       <driver name='qemu' type='raw'/>
+       <source file='/var/lib/libvirt/images/rhelik.raw'/>
+       <target dev='sda' bus='scsi'/>
+       <address type='drive' controller='0' bus='0' target='4' unit='0'/>
+       <blockio max_unmap_size='1073741824'/>
+     </disk>
      <disk type='volume' device='disk'>
        <driver name='qemu' type='raw'/>
        <source pool='blk-pool0' volume='blk-pool0-vol0'/>
@@ -3439,6 +3446,9 @@ paravirtualized driver is specified via the ``disk`` element.
       The smallest amount of data that can be discarded in a single operation.
       It impacts the unmap operations and it must be a multiple of a
       ``logical_block_size``.
+   ``max_unmap_size``
+      The maximum size of an unmap operation that can be performed for scsi
+      disks.
 
 Filesystems
 ~~~~~~~~~~~
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 950c9049ba..59eb9fb0c0 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8059,6 +8059,10 @@ virDomainDiskDefParseXML(virDomainXMLOption *xmlopt,
         if (virXMLPropUInt(blockioNode, "discard_granularity", 10, VIR_XML_PROP_NONE,
                            &def->blockio.discard_granularity) < 0)
             return NULL;
+
+        if (virXMLPropUInt(blockioNode, "max_unmap_size", 10, VIR_XML_PROP_NONE,
+                           &def->blockio.max_unmap_size) < 0)
+            return NULL;
     }
 
     if ((driverNode = virXPathNode("./driver", ctxt))) {
@@ -22040,7 +22044,8 @@ virDomainDiskBlockIoDefFormat(virBuffer *buf,
 {
     if (def->blockio.logical_block_size > 0 ||
         def->blockio.physical_block_size > 0 ||
-        def->blockio.discard_granularity > 0) {
+        def->blockio.discard_granularity > 0 ||
+        def->blockio.max_unmap_size > 0) {
         virBufferAddLit(buf, "<blockio");
         if (def->blockio.logical_block_size > 0) {
             virBufferAsprintf(buf,
@@ -22057,6 +22062,11 @@ virDomainDiskBlockIoDefFormat(virBuffer *buf,
                               " discard_granularity='%u'",
                               def->blockio.discard_granularity);
         }
+        if (def->blockio.max_unmap_size > 0) {
+            virBufferAsprintf(buf,
+                              " max_unmap_size='%u'",
+                              def->blockio.max_unmap_size);
+        }
         virBufferAddLit(buf, "/>\n");
     }
 }
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 1621876a21..26f5fdbd92 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -580,6 +580,7 @@ struct _virDomainDiskDef {
         unsigned int logical_block_size;
         unsigned int physical_block_size;
         unsigned int discard_granularity;
+        unsigned int max_unmap_size;
     } blockio;
 
     virDomainBlockIoTuneInfo blkdeviotune;
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
index 7e00b6451a..db2dd01985 100644
--- a/src/conf/domain_validate.c
+++ b/src/conf/domain_validate.c
@@ -467,7 +467,8 @@ virDomainDiskVhostUserValidate(const virDomainDiskDef *disk)
 
     if (disk->blockio.logical_block_size > 0 ||
         disk->blockio.physical_block_size > 0 ||
-        disk->blockio.discard_granularity > 0) {
+        disk->blockio.discard_granularity > 0 ||
+        disk->blockio.max_unmap_size > 0) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("blockio is not supported with vhostuser disk"));
         return -1;
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index ee9c408a21..31897342f4 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -2481,6 +2481,11 @@
           <data type="integer"/>
         </attribute>
       </optional>
+      <optional>
+        <attribute name="max_unmap_size">
+          <data type="integer"/>
+        </attribute>
+      </optional>
     </element>
   </define>
   <!--
-- 
2.41.0




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux