[libvirt] [PATCH] macvtap: use embedded buffers for MAC address and UUID
by Stefan Berger
Use embedded buffers for the MAC addresses and the VM's UUID.
---
src/util/virnetdevmacvlan.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
Index: libvirt-acl/src/util/virnetdevmacvlan.c
===================================================================
--- libvirt-acl.orig/src/util/virnetdevmacvlan.c
+++ libvirt-acl/src/util/virnetdevmacvlan.c
@@ -435,10 +435,10 @@ static const uint32_t modeMap[VIR_NETDEV
struct virNetlinkCallbackData {
char *cr_ifname;
virNetDevVPortProfilePtr virtPortProfile;
- unsigned char *macaddress;
+ unsigned char macaddress[VIR_UUID_BUFLEN];
char *linkdev;
int vf;
- unsigned char *vmuuid;
+ unsigned char vmuuid[VIR_UUID_BUFLEN];
enum virNetDevVPortProfileOp vmOp;
unsigned int linkState;
};
@@ -728,9 +728,7 @@ virNetlinkCallbackDataFree(virNetlinkCal
if (calld) {
VIR_FREE(calld->cr_ifname);
VIR_FREE(calld->virtPortProfile);
- VIR_FREE(calld->macaddress);
VIR_FREE(calld->linkdev);
- VIR_FREE(calld->vmuuid);
}
VIR_FREE(calld);
}
@@ -772,14 +770,10 @@ virNetDevMacVLanVPortProfileRegisterCall
if (VIR_ALLOC(calld->virtPortProfile) < 0)
goto memory_error;
memcpy(calld->virtPortProfile, virtPortProfile,
sizeof(*virtPortProfile));
- if (VIR_ALLOC_N(calld->macaddress, VIR_MAC_BUFLEN) < 0)
- goto memory_error;
- memcpy(calld->macaddress, macaddress, VIR_MAC_BUFLEN);
+ memcpy(calld->macaddress, macaddress, sizeof(calld->macaddress));
if ((calld->linkdev = strdup(linkdev)) == NULL)
goto memory_error;
- if (VIR_ALLOC_N(calld->vmuuid, VIR_UUID_BUFLEN) < 0)
- goto memory_error;
- memcpy(calld->vmuuid, vmuuid, VIR_UUID_BUFLEN);
+ memcpy(calld->vmuuid, vmuuid, sizeof(calld->vmuuid));
calld->vmOp = vmOp;
12 years, 7 months
[libvirt] [test-API] add docs files TESTCASE.py and TESTCASES.conf
by Guannan Ren
*docs/TESTCASE.py: an template of testcase.py
*docs/TESTCASES.conf: an template of testcase config file with
simple explanation
---
docs/TESTCASE.py | 45 ++++++++++++++++++++++++++++++++
docs/TESTCASES.conf | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 115 insertions(+), 0 deletions(-)
create mode 100644 docs/TESTCASE.py
create mode 100644 docs/TESTCASES.conf
diff --git a/docs/TESTCASE.py b/docs/TESTCASE.py
new file mode 100644
index 0000000..48adb56
--- /dev/null
+++ b/docs/TESTCASE.py
@@ -0,0 +1,45 @@
+#! /usr/bin/env python
+# How to write a new testcase
+
+# If testcase wants to use the connection object offered
+# by the framework or share variables between testcases
+# import sharedmod module.
+import sharedmod
+
+# List parameters supported by the testcase in the two
+# global tuple variables with a ',' at the end of last element.
+# Both of them are mandatory.
+required_params = ('option1', 'option2',)
+optional_params = ()
+
+# The check function is optional. This is for some testcases that
+# need to check whether specific hardware is present on box or
+# testing environment is good before testing.
+# Return value 0 means check pass, 1 means to skip the
+# testcase during running.
+def TESTCASE_check(params):
+ logger = params['logger']
+ ...
+ return 0
+
+# This is the main testing function, The function name must be
+# the same as the file name of the testcase. params['logger'] is
+# provided by framework for logging.
+# Return value 0 means the success of testing, 1 means testing failure.
+# It is mandatory.
+def TESTCASE(params):
+ logger = params['logger']
+ ...
+ return 0
+
+# The clean function is optional. This is for testcases that dirtied
+# testing environment after executed. If keyword 'clean' is set
+# just below the testcase in testcase config file, the clean function
+# defined in the testcase.py will be invoked by framework to do the
+# cleaning job.
+# Return value is optional too, 1 means clean failure, but will not
+# stop the run of testing.
+def TESTCASE_clean(params):
+ logger = params['logger']
+ ...
+ return 0
diff --git a/docs/TESTCASES.conf b/docs/TESTCASES.conf
new file mode 100644
index 0000000..1ca351b
--- /dev/null
+++ b/docs/TESTCASES.conf
@@ -0,0 +1,70 @@
+# single line comments looks like this
+
+/*
+ Multiline comments look like this.
+ The lines enclosed by the C style comments will
+ be skipped by parser.py
+*/
+
+###############################################################
+# Indentation:
+# An indent level is four spaces, do not use tabs to indent.
+#
+
+# .----------- testcase: The first line contains the module name and the test case name separated by a colon and is not indented.
+# |
+domain:undefine
+
+# .-------- options: Indent options by an indent level(four spaces)
+# |
+ guestname
+
+# .---- value: Indent Values by two indent levels(eight spaces)
+# |
+ fedoraVM
+
+################################################################
+#
+# Keywords: 'clean', 'times', 'sleep', '{start_loop, end_loop}'
+#
+
+# 'clean': invoke the clean function in previous testcase
+clean
+
+# 'times': repeat testcase 'repos/domain/install_linux_cdrom.py' N times
+domain:install_linux_cdrom times 2
+ guestname
+ fedoraVM
+ memory
+ 1024
+ vcpu
+ 1
+
+# 'sleep 5': pause the run of testing for N seconds.
+sleep 5
+
+# The pair of 'start_loop' and 'end_loop' will
+# run the testcases between them N loops
+domain:start start_loop
+ guestname
+ fedoraVM
+
+domain:destroy end_loop 3
+ guestname
+ fedoraVM
+
+################################################################
+#
+# Options: 'times', 'cleanup'
+# always be the last line of testcase config file
+#
+
+# .---------------------- repeat the above testcases n more times.
+# | .-------------- invoke the clean function in all of above testcases
+# | |
+options times=2 cleanup=enable
+
+# python libvirt-test-api.py -t repos/domain/undefine.py repos/domain/install_linux_cdrom.py \
+# repos/domain/start.py repos/domain/destroy.py
+#
+# The command generates a template of tescase file like above
--
1.7.7.5
12 years, 7 months
[libvirt] [test-API PATCH] use global variable domain_cache_folder to as cache folder for guest install
by Guannan Ren
---
global.cfg | 15 +++++++++------
repos/domain/install_linux_cdrom.py | 22 ++++++++++------------
2 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/global.cfg b/global.cfg
index 6cfdcac..7b7b7cb 100644
--- a/global.cfg
+++ b/global.cfg
@@ -142,6 +143,8 @@ defaultnic = virtio
static_uuid = 05867c1a-afeb-300e-e55e-2673391ae080
# path to a disk image containing a preinstalled guest for testing
testfullimagepath = /var/lib/libvirt/images/f14.img
+# path to store temporary iso and kickstart file
+domain_cache_folder = /var/cache/libvirt-test-api
################################################################
#
diff --git a/repos/domain/install_linux_cdrom.py b/repos/domain/install_linux_cdrom.py
index 60d12a7..f70ebc3 100644
--- a/repos/domain/install_linux_cdrom.py
+++ b/repos/domain/install_linux_cdrom.py
@@ -36,18 +36,16 @@ VM_STAT = "virsh --quiet list --all| grep \"\\b%s\\b\"|grep off"
VM_DESTROY = "virsh destroy %s"
VM_UNDEFINE = "virsh undefine %s"
-BOOT_DIR = "/var/lib/libvirt/boot/"
HOME_PATH = os.getcwd()
-def prepare_cdrom(*args):
+def prepare_cdrom(ostree, ks, guestname, cache_folder, logger):
""" to customize boot.iso file to add kickstart
file into it for automatic guest installation
"""
- ostree, ks, guestname, logger = args
ks_name = os.path.basename(ks)
- new_dir = os.path.join(HOME_PATH, guestname)
- logger.info("creating a new folder for customizing custom.iso file in it")
+ new_dir = os.path.join(cache_folder, guestname)
+ logger.info("creating a workshop folder for customizing custom.iso file")
if os.path.exists(new_dir):
logger.info("the folder exists, remove it")
@@ -68,7 +66,7 @@ def prepare_cdrom(*args):
shutil.copy('utils/ksiso.sh', new_dir)
src_path = os.getcwd()
- logger.info("enter into the workshop folder: %s" % new_dir)
+ logger.debug("enter folder: %s" % new_dir)
os.chdir(new_dir)
shell_cmd = 'sh ksiso.sh %s' % ks_name
@@ -76,8 +74,8 @@ def prepare_cdrom(*args):
(status, text) = commands.getstatusoutput(shell_cmd)
logger.debug(text)
- logger.info("make custom.iso file, change to original directory: %s" %
- src_path)
+
+ logger.debug("go back to original directory: %s" % src_path)
os.chdir(src_path)
def prepare_boot_guest(domobj, xmlstr, guestname, installtype, logger):
@@ -194,13 +192,13 @@ def install_linux_cdrom(params):
logger.debug('kisckstart file: \n %s' % ks)
logger.info('prepare installation...')
+ cache_folder = envparser.get_value("variables", "domain_cache_folder")
- bootcd = '%s/custom.iso' % \
- (os.path.join(HOME_PATH, guestname))
- logger.debug("the bootcd path is %s" % bootcd)
logger.info("begin to customize the custom.iso file")
- prepare_cdrom(ostree, ks, guestname, logger)
+ prepare_cdrom(ostree, ks, guestname, cache_folder, logger)
+ bootcd = '%s/custom.iso' % \
+ (os.path.join(cache_folder, guestname))
xmlstr = xmlstr.replace('CUSTOMISO', bootcd)
logger.debug('dump installation guest xml:\n%s' % xmlstr)
--
1.7.7.5
12 years, 7 months
[libvirt] [test-API PATCH 0/4] problems fixed during testcase run
by Guannan Ren
I ran a loop of existing testcases to ensure the cleanup that we did
these days is neat and successful. The four patches is the final update.
first, update testcase config files in cases folder to use new params of
testcases.
second, Fix a framework bug.
third, add missing modules.
fourth, final testcases cleanup.
12 years, 7 months
[libvirt] [test-API PATCH] move log.py and format.py into src, cleanup module import code
by Guannan Ren
---
libvirt-test-api | 2 +-
src/casecfgcheck.py | 2 --
src/env_clear.py | 4 ++--
src/env_inspect.py | 2 +-
src/env_parser.py | 6 +-----
src/exception.py | 2 --
{utils => src}/format.py | 0
src/generator.py | 12 ++++++------
{utils => src}/log.py | 0
src/log.xsl | 2 +-
src/log_generator.py | 2 +-
src/parser.py | 4 ++--
src/proxy.py | 2 +-
13 files changed, 16 insertions(+), 24 deletions(-)
rename {utils => src}/format.py (100%)
rename {utils => src}/log.py (100%)
diff --git a/libvirt-test-api b/libvirt-test-api
index cec7679..4c8d515 100755
--- a/libvirt-test-api
+++ b/libvirt-test-api
@@ -27,7 +27,7 @@ from src import proxy
from src import generator
from src import env_clear
from src import process
-from utils import log
+from src import log
from src.log_generator import LogGenerator
from src.activityfilter import Filter
from src.casecfgcheck import CaseCfgCheck
diff --git a/src/casecfgcheck.py b/src/casecfgcheck.py
index 252f4a4..755b03f 100644
--- a/src/casecfgcheck.py
+++ b/src/casecfgcheck.py
@@ -15,8 +15,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from src import proxy
-
class CaseCfgCheck(object):
"""validate the options in testcase config file"""
def __init__(self, proxy_obj, activities_list):
diff --git a/src/env_clear.py b/src/env_clear.py
index a4a8a8e..fa3b62c 100644
--- a/src/env_clear.py
+++ b/src/env_clear.py
@@ -18,8 +18,8 @@
# This module matches the reference of clearing function from each testcase
# to the corresponding testcase's argument in the order of testcase running
-from src import mapper
-from utils import log
+import mapper
+import log
class EnvClear(object):
""" Generate a callable class of executing clearing function in
diff --git a/src/env_inspect.py b/src/env_inspect.py
index 4942b33..b260ff8 100644
--- a/src/env_inspect.py
+++ b/src/env_inspect.py
@@ -19,7 +19,7 @@
import commands
import libvirt
-from src import sharedmod
+import sharedmod
def check_libvirt(logger):
virsh = 'virsh -v'
diff --git a/src/env_parser.py b/src/env_parser.py
index cf4168f..f02af57 100644
--- a/src/env_parser.py
+++ b/src/env_parser.py
@@ -21,11 +21,7 @@ import ConfigParser
import os
import sys
-dir = os.path.dirname(sys.modules[__name__].__file__)
-absdir = os.path.abspath(dir)
-sys.path.append(os.path.split(absdir)[0])
-
-from src import exception
+import exception
class Envparser(object):
def __init__(self, configfile):
diff --git a/src/exception.py b/src/exception.py
index 9b61bac..70d0175 100644
--- a/src/exception.py
+++ b/src/exception.py
@@ -17,8 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-import libvirt
-
class LibvirtException(Exception):
code = 200
message = "General libvirt-test-suite Exception"
diff --git a/utils/format.py b/src/format.py
similarity index 100%
rename from utils/format.py
rename to src/format.py
diff --git a/src/generator.py b/src/generator.py
index 5b9a0a2..d4b0388 100644
--- a/src/generator.py
+++ b/src/generator.py
@@ -24,12 +24,12 @@ import sys
import os
import traceback
-from src import mapper
-from src.testcasexml import xml_file_to_str
-from src import env_parser
-from src import env_inspect
-from utils import log
-from utils import format
+import mapper
+from testcasexml import xml_file_to_str
+import env_parser
+import env_inspect
+import log
+import format
class FuncGen(object):
""" To generate a callable testcase"""
diff --git a/utils/log.py b/src/log.py
similarity index 100%
rename from utils/log.py
rename to src/log.py
diff --git a/src/log.xsl b/src/log.xsl
index 577a0a5..589a720 100644
--- a/src/log.xsl
+++ b/src/log.xsl
@@ -5,7 +5,7 @@
<html>
<head>
<title>Libvirt testing log</title>
- <link rel="stylesheet" href="src/log.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="log.css" type="text/css" media="screen" />
<script language="javascript">
<![CDATA[
var xmlDOc;
diff --git a/src/log_generator.py b/src/log_generator.py
index a001ef2..be483d6 100644
--- a/src/log_generator.py
+++ b/src/log_generator.py
@@ -22,7 +22,7 @@ import copy
from xml.dom import minidom
from xml.dom.minidom import Document
-from src import exception
+import exception
class LogGenerator(object):
""" Generate and parser log xml file
diff --git a/src/parser.py b/src/parser.py
index 8a861fd..38f0424 100644
--- a/src/parser.py
+++ b/src/parser.py
@@ -23,8 +23,8 @@ import sys
import copy
import string
-from src import exception
-from src import env_parser
+import exception
+import env_parser
class CaseFileParser(object):
""" Parser the case configuration file to generate a data list.
diff --git a/src/proxy.py b/src/proxy.py
index fe50fff..4751b3b 100644
--- a/src/proxy.py
+++ b/src/proxy.py
@@ -20,7 +20,7 @@
# The proxy examines the list of unique test cases, received from the
# generator and import each test case from appropriate module directory.
-from src import exception
+import exception
class Proxy(object):
""" The Proxy class is used for getting function reference """
--
1.7.7.5
12 years, 7 months
[libvirt] some questions
by user-mirror
Nice to meet you!I'm a college student from Xi'an China.I have some
questions when using virt-manager to migrate virtual machine live based
on shared memory.I found a website telling me how to migrate virtual
machine live by virt-manager and here is the
websitehttp://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm2/index.html...
it's written in Chinese).However,we find that the virtual machine
running on the dest host is a blank screen and virt-manager shows the
virtual machine is running.We don't know why it's a blank screen and i
wish you dear developers can do me a favor.Thanks very much and hope to
receive your E-mails!
12 years, 7 months
[libvirt] some questions
by user-mirror
Nice to meet you!I'm a college student from Xi'an China.I have some questions when using virt-manager to migrate virtual machine live based on shared memory.I found a website telling me how to migrate virtual machine live by virt-manager and here is the websitehttp://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm2/index.html... it's written in Chinese).However,we find that the virtual machine running on the dest host is a blank screen and virt-manager shows the virtual machine is running.We don't know why it's a blank screen and i wish you dear developers can do me a favor.Thanks very much and hope to receive your E-mails!
12 years, 7 months
[libvirt] [PATCH 0/2] Filesystem limits for containers
by Guido Günther
Hi,
the following two patches are a first stab at filesystem limits for
containers. They're not ment for detailed review just to start the
discussion. With these two patches space and inode limits in openvz
containers are printed in the domain config as:
<filesystem type='template' accessmode='passthrough'>
<source name='debian'/>
<target dir='/'/>
<hardlimit>1153024</hardlimit>
<softlimit>1048576</softlimit>
<inodes_hardlimit>220000</inodes_hardlimit>
<inodes_softlimit>200000</inodes_softlimit>
</filesystem>
Does this look o.k.? If so I'd cook up the schema updates and more
parsing code. Other container solutions like lxc might have similar
needs.
Cheers,
-- Guido
Guido Günther (2):
domain_conf: add filesystem limits to virDomainFSDef
openvz; support file system quota reporting
src/conf/domain_conf.c | 15 ++++++
src/conf/domain_conf.h | 4 ++
src/openvz/openvz_conf.c | 114 +++++++++++++++++++++++++++++-----------------
3 files changed, 92 insertions(+), 41 deletions(-)
--
1.7.10
12 years, 7 months
[libvirt] [PATCH 1/2] domain_conf: add filesystem limits to virDomainFSDef
by Guido Günther
---
src/conf/domain_conf.c | 15 +++++++++++++++
src/conf/domain_conf.h | 4 ++++
2 files changed, 19 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 184ff23..2b2a1d9 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11101,6 +11101,21 @@ virDomainFSDefFormat(virBufferPtr buf,
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
return -1;
+ if (def->hard_limit)
+ virBufferAsprintf(buf, " <hardlimit>%llu</hardlimit>\n",
+ def->hard_limit);
+ if (def->soft_limit)
+ virBufferAsprintf(buf, " <softlimit>%llu</softlimit>\n",
+ def->soft_limit);
+ if (def->inodes_hard_limit)
+ virBufferAsprintf(buf,
+ " <inodes_hardlimit>%llu</inodes_hardlimit>\n",
+ def->inodes_hard_limit);
+ if (def->inodes_soft_limit)
+ virBufferAsprintf(buf,
+ " <inodes_softlimit>%llu</inodes_softlimit>\n",
+ def->inodes_soft_limit);
+
virBufferAddLit(buf, " </filesystem>\n");
return 0;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 5aa8fc1..149607e 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -692,6 +692,10 @@ struct _virDomainFSDef {
char *dst;
unsigned int readonly : 1;
virDomainDeviceInfo info;
+ unsigned long long hard_limit; /* in kibibytes */
+ unsigned long long soft_limit; /* in kibibytes */
+ unsigned long long inodes_hard_limit;
+ unsigned long long inodes_soft_limit;
};
--
1.7.10
12 years, 7 months
[libvirt] [PATCH 2/2] openvz; support file system quota reporting
by Guido Günther
---
src/openvz/openvz_conf.c | 114 +++++++++++++++++++++++++++++-----------------
1 file changed, 73 insertions(+), 41 deletions(-)
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 579fcfc..7ea5e25 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -129,6 +129,51 @@ int openvzExtractVersion(struct openvz_driver *driver)
}
+/* Parse config values of the form barrier:limit into barrier and limit */
+static int
+openvzParseBarrierAndLimit(const char *value,
+ unsigned long long *barrier,
+ unsigned long long *limit)
+{
+ char *token;
+ char *saveptr = NULL;
+ char *str = strdup(value);
+
+ if (strcmp(value, "unlimited") == 0) {
+ barrier = limit = 0;
+ return 0;
+ }
+
+ if (str == NULL) {
+ virReportOOMError();
+ goto error;
+ }
+
+ token = strtok_r(str, ":", &saveptr);
+ if (token == NULL) {
+ goto error;
+ } else {
+ if (barrier != NULL) {
+ if (virStrToLong_ull(token, NULL, 10, barrier))
+ goto error;
+ }
+ }
+ token = strtok_r(NULL, ":", &saveptr);
+ if (token == NULL) {
+ goto error;
+ } else {
+ if (limit != NULL) {
+ if (virStrToLong_ull(token, NULL, 10, limit))
+ goto error;
+ }
+ }
+ return 0;
+error:
+ VIR_FREE(str);
+ return -1;
+}
+
+
static int openvzDefaultConsoleType(const char *ostype ATTRIBUTE_UNUSED)
{
return VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ;
@@ -366,6 +411,7 @@ openvzReadFSConf(virDomainDefPtr def,
virDomainFSDefPtr fs = NULL;
char *veid_str = NULL;
char *temp = NULL;
+ const char *param;
ret = openvzReadVPSConfigParam(veid, "OSTEMPLATE", &temp);
if (ret < 0) {
@@ -403,6 +449,32 @@ openvzReadFSConf(virDomainDefPtr def,
fs->dst = strdup("/");
+ param = "DISKSPACE";
+ ret = openvzReadVPSConfigParam(veid, param, &temp);
+ if (ret > 0) {
+ if (openvzParseBarrierAndLimit(temp,
+ &fs->soft_limit,
+ &fs->hard_limit)) {
+ openvzError(VIR_ERR_INTERNAL_ERROR,
+ _("Could not read '%s' from config for container %d"),
+ param, veid);
+ goto error;
+ }
+ }
+
+ param = "DISKINODES";
+ ret = openvzReadVPSConfigParam(veid, param, &temp);
+ if (ret > 0) {
+ if (openvzParseBarrierAndLimit(temp,
+ &fs->inodes_soft_limit,
+ &fs->inodes_hard_limit)) {
+ openvzError(VIR_ERR_INTERNAL_ERROR,
+ _("Could not read '%s' from config for container %d"),
+ param, veid);
+ goto error;
+ }
+ }
+
if (fs->src == NULL || fs->dst == NULL)
goto no_memory;
@@ -423,52 +495,12 @@ error:
}
-/* Parse config values of the form barrier:limit into barrier and limit */
-static int
-openvzParseBarrierAndLimit(const char* value,
- unsigned long *barrier,
- unsigned long *limit)
-{
- char *token;
- char *saveptr = NULL;
- char *str = strdup(value);
-
- if (str == NULL) {
- virReportOOMError();
- goto error;
- }
-
- token = strtok_r(str, ":", &saveptr);
- if (token == NULL) {
- goto error;
- } else {
- if (barrier != NULL) {
- if (virStrToLong_ul(token, NULL, 10, barrier))
- goto error;
- }
- }
- token = strtok_r(NULL, ":", &saveptr);
- if (token == NULL) {
- goto error;
- } else {
- if (limit != NULL) {
- if (virStrToLong_ul(token, NULL, 10, limit))
- goto error;
- }
- }
- return 0;
-error:
- VIR_FREE(str);
- return -1;
-}
-
-
static int
openvzReadMemConf(virDomainDefPtr def, int veid)
{
int ret;
char *temp = NULL;
- unsigned long barrier, limit;
+ unsigned long long barrier, limit;
const char *param;
unsigned long kb_per_pages;
--
1.7.10
12 years, 7 months