[libvirt] [PATCHv3 3/4] openvz: support file system quota reporting

Guido Günther agx at sigxcpu.org
Wed May 23 15:10:25 UTC 2012


---
 src/conf/domain_conf.c                          |    4 ++--
 src/openvz/openvz_conf.c                        |   24 +++++++++++++++++++++++
 tests/domainschemadata/domain-openvz-simple.xml |    2 ++
 3 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index a75e7e8..357929b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11337,10 +11337,10 @@ virDomainFSDefFormat(virBufferPtr buf,
 
 
     if (def->space_hard_limit)
-        virBufferAsprintf(buf, "      <space_hard_limit unit='B'>"
+        virBufferAsprintf(buf, "      <space_hard_limit unit='bytes'>"
                           "%llu</space_hard_limit>\n", def->space_hard_limit);
     if (def->space_soft_limit) {
-        virBufferAsprintf(buf, "      <space_soft_limit unit='B'>"
+        virBufferAsprintf(buf, "      <space_soft_limit unit='bytes'>"
                           "%llu</space_soft_limit>\n", def->space_soft_limit);
     }
     virBufferAddLit(buf, "    </filesystem>\n");
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 5f107ed..363cd1e 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -407,6 +407,8 @@ openvzReadFSConf(virDomainDefPtr def,
     virDomainFSDefPtr fs = NULL;
     char *veid_str = NULL;
     char *temp = NULL;
+    const char *param;
+    unsigned long long barrier, limit;
 
     ret = openvzReadVPSConfigParam(veid, "OSTEMPLATE", &temp);
     if (ret < 0) {
@@ -444,6 +446,28 @@ openvzReadFSConf(virDomainDefPtr def,
 
     fs->dst = strdup("/");
 
+    param = "DISKSPACE";
+    ret = openvzReadVPSConfigParam(veid, param, &temp);
+    if (ret > 0) {
+        if (openvzParseBarrierLimit(temp, &barrier, &limit)) {
+            openvzError(VIR_ERR_INTERNAL_ERROR,
+                        _("Could not read '%s' from config for container %d"),
+                        param, veid);
+            goto error;
+        } else {
+            /* Ensure that we can multiply by 1024 without overflowing. */
+            if (barrier > ULONG_LONG_MAX / 1024 ||
+                limit > ULONG_LONG_MAX / 1024 ) {
+                virReportSystemError(EINVAL,
+                                     _("%s"),
+                                     "Unable to parse quota");
+                goto error;
+            }
+            fs->space_soft_limit = barrier * 1024; /* unit is bytes */
+            fs->space_hard_limit = limit * 1024;   /* unit is bytes */
+        }
+    }
+
     if (fs->src == NULL || fs->dst == NULL)
         goto no_memory;
 
diff --git a/tests/domainschemadata/domain-openvz-simple.xml b/tests/domainschemadata/domain-openvz-simple.xml
index a121d39..949e96d 100644
--- a/tests/domainschemadata/domain-openvz-simple.xml
+++ b/tests/domainschemadata/domain-openvz-simple.xml
@@ -21,6 +21,8 @@
     <filesystem type='template' accessmode='passthrough'>
       <source name='debian'/>
       <target dir='/'/>
+      <space_hard_limit>1153024</space_hard_limit>
+      <space_soft_limit>1048576</space_soft_limit>
     </filesystem>
   </devices>
 </domain>
-- 
1.7.10




More information about the libvir-list mailing list