]> xenbits.xensource.com Git - libvirt.git/commitdiff
openvz: support file system quota reporting
authorGuido Günther <agx@sigxcpu.org>
Tue, 24 Apr 2012 06:39:01 +0000 (08:39 +0200)
committerGuido Günther <agx@sigxcpu.org>
Thu, 24 May 2012 09:35:02 +0000 (11:35 +0200)
src/openvz/openvz_conf.c
tests/domainschemadata/domain-openvz-simple.xml

index 5f107edce000c69562d65a0cf880b680ed692379..72cd1e64cf91128daab11694c7adb60dc8950123 100644 (file)
@@ -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(VIR_ERR_OVERFLOW,
+                                     _("%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;
 
index a121d39dd995a19dad188a746d153220aa022df5..949e96dbed56f9ab3e09aa48329caa1769a61068 100644 (file)
@@ -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>