[virt-tools-list] [PATCH] virtinst: Add support for fs write policy

Deepak C Shetty deepakcs at linux.vnet.ibm.com
Wed Jan 18 18:51:51 UTC 2012


This introduces new attribute wrpolicy with only supported
value as immediate. This helps specify whether to skip the
host page cache.

When wrpolicy is specified, meaning when wrpolicy=immediate
a writeback is explicitly initiated for the dirty pages in
the host page cache as part of the guest file write operation.

Signed-off-by: Deepak C Shetty <deepakcs at linux.vnet.ibm.com>
---

 tests/xmlparse-xml/change-filesystems-in.xml  |    5 +++++
 tests/xmlparse-xml/change-filesystems-out.xml |    6 ++++++
 tests/xmlparse.py                             |   10 ++++++++++
 virtinst/VirtualFilesystem.py                 |   25 ++++++++++++++++++++++++-
 4 files changed, 45 insertions(+), 1 deletions(-)

diff --git a/tests/xmlparse-xml/change-filesystems-in.xml b/tests/xmlparse-xml/change-filesystems-in.xml
index 2f95068..f0d5a1a 100644
--- a/tests/xmlparse-xml/change-filesystems-in.xml
+++ b/tests/xmlparse-xml/change-filesystems-in.xml
@@ -33,6 +33,11 @@
       <target dir='/bar/baz'/>
     </filesystem>
     <filesystem type='mount' accessmode='squash'>
+      <driver type='path' wrpolicy='immediate'/>
+      <source dir='/foo/bar'/>
+      <target dir='/bar/baz'/>
+    </filesystem>
+    <filesystem type='mount' accessmode='mapped'>
       <driver type='path'/>
       <source dir='/foo/bar'/>
       <target dir='/bar/baz'/>
diff --git a/tests/xmlparse-xml/change-filesystems-out.xml b/tests/xmlparse-xml/change-filesystems-out.xml
index c952c4b..6d0c00c 100644
--- a/tests/xmlparse-xml/change-filesystems-out.xml
+++ b/tests/xmlparse-xml/change-filesystems-out.xml
@@ -37,5 +37,11 @@
       <target dir="/bar/baz"/>
       <readonly/>
     </filesystem>
+    <filesystem>
+      <driver type="handle" wrpolicy="immediate"/>
+      <source dir="/foo/bar"/>
+      <target dir="/bar/baz"/>
+      <readonly/>
+    </filesystem>
   </devices>
 </domain>
diff --git a/tests/xmlparse.py b/tests/xmlparse.py
index 927861c..b27e8d2 100644
--- a/tests/xmlparse.py
+++ b/tests/xmlparse.py
@@ -577,11 +577,13 @@ class XMLParseTest(unittest.TestCase):
         dev1 = guest.get_devices(devtype)[0]
         dev2 = guest.get_devices(devtype)[1]
         dev3 = guest.get_devices(devtype)[2]
+        dev4 = guest.get_devices(devtype)[3]
 
         check = self._make_checker(dev1)
         check("type", None, "mount")
         check("mode", None, "passthrough")
         check("driver", "handle", None)
+        check("wrpolicy", None, None)
         check("source", "/foo/bar", "/new/path")
         check("target", "/bar/baz", "/new/target")
 
@@ -595,6 +597,14 @@ class XMLParseTest(unittest.TestCase):
         check("type", "mount", None)
         check("mode", "squash", None)
         check("driver", "path", "handle")
+        check("wrpolicy", "immediate", None)
+        check("readonly", False, True)
+
+        check = self._make_checker(dev4)
+        check("type", "mount", None)
+        check("mode", "mapped", None)
+        check("driver", "path", "handle")
+        check("wrpolicy", None, "immediate")
         check("readonly", False, True)
 
         self._alter_compare(guest.get_config_xml(), outfile)
diff --git a/virtinst/VirtualFilesystem.py b/virtinst/VirtualFilesystem.py
index b1cf71d..dfd3a6a 100644
--- a/virtinst/VirtualFilesystem.py
+++ b/virtinst/VirtualFilesystem.py
@@ -42,6 +42,10 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice):
     MODE_DEFAULT = "default"
     MOUNT_MODES = [MODE_PASSTHROUGH, MODE_MAPPED, MODE_SQUASH, MODE_DEFAULT]
 
+    WRPOLICY_IMM = "immediate"
+    WRPOLICY_DEFAULT = "default"
+    WRPOLICIES = [WRPOLICY_IMM, WRPOLICY_DEFAULT]
+
     DRIVER_PATH = "path"
     DRIVER_HANDLE = "handle"
     DRIVER_DEFAULT = "default"
@@ -75,6 +79,7 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice):
         self._target = None
         self._source = None
         self._readonly = None
+        self._wrpolicy = None
 
         if self._is_parse():
             return
@@ -82,6 +87,7 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice):
         self.mode = self.MODE_DEFAULT
         self.type = self.TYPE_DEFAULT
         self.driver = self.DRIVER_DEFAULT
+        self.wrpolicy = self.WRPOLICY_DEFAULT
 
     def _get_type(self):
         return self._type
@@ -99,6 +105,14 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice):
         self._mode = val
     mode = _xml_property(_get_mode, _set_mode, xpath="./@accessmode")
 
+    def _get_wrpolicy(self):
+        return self._wrpolicy
+    def _set_wrpolicy(self, val):
+        if val is not None and not self.WRPOLICIES.count(val):
+            raise ValueError(_("Unsupported filesystem write policy '%s'" % val))
+        self._wrpolicy = val
+    wrpolicy = _xml_property(_get_wrpolicy, _set_wrpolicy, xpath="./driver/@wrpolicy")
+
     def _get_readonly(self):
         return self._readonly
     def _set_readonly(self, val):
@@ -162,6 +176,7 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice):
         source = self.source
         target = self.target
         readonly = self.readonly
+        wrpolicy = self.wrpolicy
 
         if mode == self.MODE_DEFAULT:
             mode = None
@@ -169,6 +184,9 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice):
             ftype = None
         if driver == self.DRIVER_DEFAULT:
             driver = None
+            wrpolicy = None
+        if wrpolicy == self.WRPOLICY_DEFAULT:
+            wrpolicy = None
 
         if not source or not target:
             raise ValueError(
@@ -182,7 +200,12 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice):
         fsxml += ">\n"
 
         if driver:
-            fsxml += "      <driver type='%s'/>\n" % driver
+            if not wrpolicy:
+                fsxml += "      <driver type='%s'/>\n" % driver
+            else:
+                fsxml += "      <driver type='%s' wrpolicy='%s' />\n" % (
+                                                                    driver,
+                                                                    wrpolicy)
 
         fsxml += "      <source %s='%s'/>\n" % (
                                             self.type_to_source_prop(ftype),




More information about the virt-tools-list mailing list