Re: [libvirt] [PATCH v2 0/2] add support for --config in setmaxmem command
ping -Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Chen Hanxiao Sent: Thursday, July 31, 2014 11:41 AM To: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 0/2] add support for --config in setmaxmem command Currently, setmaxmem return success on an active domain, but nothing happened, which is not correct. This series will disable changing max memory on an active domain; then add --config support for setmaxmem command. v2: disable changing max memory on an active domain drop useless as_assert Chen Hanxiao (2): LXC: add support for persistent config in lxcDomainSetMemoryFlags LXC: add support for --config in setmaxmem command src/lxc/lxc_driver.c | 100 --- 1 file changed, 46 insertions(+), 54 deletions(-) -- 1.9.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH RFC] LXC: add HOME environment variable
ping -Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Chen Hanxiao Sent: Friday, July 25, 2014 2:40 PM To: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC] LXC: add HOME environment variable We lacked of HOME environment variable, set 'HOME=/' as default. Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/lxc/lxc_container.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index 1cf2c8f..9df9c04 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -236,6 +236,7 @@ static virCommandPtr lxcContainerBuildInitCmd(virDomainDefPtr vmDef, virCommandAddEnvString(cmd, PATH=/bin:/sbin); virCommandAddEnvString(cmd, TERM=linux); virCommandAddEnvString(cmd, container=lxc-libvirt); +virCommandAddEnvString(cmd, HOME=/); virCommandAddEnvPair(cmd, container_uuid, uuidstr); if (nttyPaths 1) virCommandAddEnvPair(cmd, container_ttys, virBufferCurrentContent(buf)); -- 1.9.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 1/2] LXC: add support for --config in setmaxmem command
-Original Message- From: Michal Privoznik [mailto:mpriv...@redhat.com] Sent: Thursday, July 24, 2014 5:00 PM To: Chen, Hanxiao/陈 晗霄; libvir-list@redhat.com Subject: Re: [libvirt] [PATCH 1/2] LXC: add support for --config in setmaxmem command On 16.07.2014 11:51, Chen Hanxiao wrote: In lxc, we could not use setmaxmem command with --config options. This patch will add support for this. Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/lxc/lxc_driver.c | 69 ++-- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index b7b4b02..be6ee19 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -721,10 +721,10 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, virLXCDomainObjPrivatePtr priv; virLXCDriverPtr driver = dom-conn-privateData; virLXCDriverConfigPtr cfg = NULL; -unsigned long oldmax = 0; virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | - VIR_DOMAIN_AFFECT_CONFIG, -1); + VIR_DOMAIN_AFFECT_CONFIG | + VIR_DOMAIN_MEM_MAXIMUM, -1); if (!(vm = lxcDomObjFromDomain(dom))) goto cleanup; @@ -743,32 +743,55 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, persistentDef) 0) goto cleanup; -if (flags VIR_DOMAIN_AFFECT_LIVE) -oldmax = vm-def-mem.max_balloon; -if (flags VIR_DOMAIN_AFFECT_CONFIG) { -if (!oldmax || oldmax persistentDef-mem.max_balloon) -oldmax = persistentDef-mem.max_balloon; -} +if (flags VIR_DOMAIN_MEM_MAXIMUM) { +if (flags VIR_DOMAIN_AFFECT_LIVE) { +if (newmem vm-def-mem.cur_balloon) { +virReportError(VIR_ERR_OPERATION_INVALID, %s, + _(Cannot resize the max memory less than current + memory for an active domain)); +goto cleanup; +} +vm-def-mem.max_balloon = newmem; Are things that easy? Don't we need to communicate this with the lxc_controler somehow? Even though you allow only extending, I think unless we are 100% sure guest will see the resize, we shouldn't allow this. I focused on '--config', so I kept what the original lxcDomainSetMaxMemory did. It looks that guest could not see the resize, and we shouldn't allow this. +} -if (newmem oldmax) { -virReportError(VIR_ERR_INVALID_ARG, - %s, _(Cannot set memory higher than max memory)); -goto cleanup; -} +if (flags VIR_DOMAIN_AFFECT_CONFIG) { +sa_assert(persistentDef); Is this assert needed? Did clang complain or is this just a pure lefover from copying from qemu_driver.c? +persistentDef-mem.max_balloon = newmem; +if (persistentDef-mem.cur_balloon newmem) +persistentDef-mem.cur_balloon = newmem; +if (virDomainSaveConfig(cfg-configDir, persistentDef) 0) +goto cleanup; +} +} else { +unsigned long oldmax = 0; -if (flags VIR_DOMAIN_AFFECT_LIVE) { -if (virCgroupSetMemory(priv-cgroup, newmem) 0) { -virReportError(VIR_ERR_OPERATION_FAILED, - %s, _(Failed to set memory for domain)); -goto cleanup; +if (flags VIR_DOMAIN_AFFECT_LIVE) +oldmax = vm-def-mem.max_balloon; +if (flags VIR_DOMAIN_AFFECT_CONFIG) { +if (!oldmax || oldmax persistentDef-mem.max_balloon) +oldmax = persistentDef-mem.max_balloon; } -} -if (flags VIR_DOMAIN_AFFECT_CONFIG) { -sa_assert(persistentDef); Well, since it has been here already, I think we can leave it in your patch too. -persistentDef-mem.cur_balloon = newmem; -if (virDomainSaveConfig(cfg-configDir, persistentDef) 0) +if (newmem oldmax) { +virReportError(VIR_ERR_INVALID_ARG, + %s, _(Cannot set memory higher than max memory)); goto cleanup; +} + +if (flags VIR_DOMAIN_AFFECT_LIVE) { +if (virCgroupSetMemory(priv-cgroup, newmem) 0) { +virReportError(VIR_ERR_OPERATION_FAILED, + %s, _(Failed to set memory for domain)); +goto cleanup; +} +} + +if (flags VIR_DOMAIN_AFFECT_CONFIG) { +sa_assert(persistentDef); +persistentDef-mem.cur_balloon = newmem; +if (virDomainSaveConfig(cfg-configDir, persistentDef) 0) +goto cleanup
Re: [libvirt] [PATCH 2/2] LXC: use lxcDomainSetMemoryFlags to do lxcDomainSetMaxMemory's work
-Original Message- From: Michal Privoznik [mailto:mpriv...@redhat.com] Sent: Thursday, July 24, 2014 5:00 PM To: Chen, Hanxiao/陈 晗霄; libvir-list@redhat.com Subject: Re: [libvirt] [PATCH 2/2] LXC: use lxcDomainSetMemoryFlags to do lxcDomainSetMaxMemory's work On 16.07.2014 11:51, Chen Hanxiao wrote: Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/lxc/lxc_driver.c | 36 +--- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index be6ee19..9f974eb 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -680,37 +680,6 @@ lxcDomainGetMaxMemory(virDomainPtr dom) return ret; } -static int lxcDomainSetMaxMemory(virDomainPtr dom, unsigned long newmax) -{ -virDomainObjPtr vm; -int ret = -1; - -if (!(vm = lxcDomObjFromDomain(dom))) -goto cleanup; - -if (virDomainSetMaxMemoryEnsureACL(dom-conn, vm-def) 0) -goto cleanup; - -if (newmax vm-def-mem.cur_balloon) { -if (!virDomainObjIsActive(vm)) { -vm-def-mem.cur_balloon = newmax; -} else { -virReportError(VIR_ERR_OPERATION_INVALID, %s, - _(Cannot set max memory lower than current - memory for an active domain)); -goto cleanup; -} -} - -vm-def-mem.max_balloon = newmax; -ret = 0; - - cleanup: -if (vm) -virObjectUnlock(vm); -return ret; -} - A-ha! This is what I was looking for in 1/2. Okay, but I'd rather note this fact in 1/2 commit message to make it more obvious. Will update commit message in v2. static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, unsigned int flags) { @@ -809,6 +778,11 @@ static int lxcDomainSetMemory(virDomainPtr dom, unsigned long newmem) return lxcDomainSetMemoryFlags(dom, newmem, VIR_DOMAIN_AFFECT_LIVE); } +static int lxcDomainSetMaxMemory(virDomainPtr dom, unsigned long memory) +{ +return lxcDomainSetMemoryFlags(dom, memory, VIR_DOMAIN_MEM_MAXIMUM); +} + So previously, calling virDomainSetMaxMemory() on an inactive LXC domain would succeed. Now, after the change, due to problem with _CURRENT, _LIVE and _CONFIG this will basically return success, but without any effect on the domain config. And that's wrong. Current lxcDomainSetMaxMemory did: inactive: affect domain config active: success but no change So we should fix that and will do in v2. Thanks, - Chen static int lxcDomainSetMemoryParameters(virDomainPtr dom, virTypedParameterPtr params, Moreover, I think these two patches can be joined into one. Michal -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] LXC: Fix virLXCControllerSetupDevPTS() wrt user namespaces
-Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Richard Weinberger Sent: Tuesday, July 29, 2014 4:59 AM To: libvir-list@redhat.com Cc: Richard Weinberger; da...@sigma-star.at Subject: [libvirt] [PATCH] LXC: Fix virLXCControllerSetupDevPTS() wrt user namespaces The gid value passed to devpts has to be translated by hand as virLXCControllerSetupDevPTS() is called before setting up the user and group mappings. Otherwise devpts will use an unmapped gid and openpty() will fail within containers. Linux commit commit 23adbe12 (fs,userns: Change inode_capable to capable_wrt_inode_uidgid) uncovered that issue. Signed-off-by: Richard Weinberger rich...@nod.at Reviewed-by: Chen Hanxiao chenhanx...@cn.fujitsu.com -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 0/2] add support for --config in setmaxmem command
ping -Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Chen Hanxiao Sent: Wednesday, July 16, 2014 5:51 PM To: libvir-list@redhat.com Subject: [libvirt] [PATCH 0/2] add support for --config in setmaxmem command Chen Hanxiao (2): LXC: add support for --config in setmaxmem command LXC: use lxcDomainSetMemoryFlags to do lxcDomainSetMaxMemory's work src/lxc/lxc_driver.c | 105 +-- 1 file changed, 51 insertions(+), 54 deletions(-) -- 1.9.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] LXC: show used memory as 0 when domain is not active
ping -Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Chen Hanxiao Sent: Thursday, July 17, 2014 5:28 PM To: libvir-list@redhat.com Subject: [libvirt] [PATCH] LXC: show used memory as 0 when domain is not active Before: virsh # dominfo chx3 State: shut off Max memory: 92160 KiB Used memory:92160 KiB After: virsh # dominfo container1 State: shut off Max memory: 92160 KiB Used memory:0 KiB Similar to qemu cases. Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/lxc/lxc_driver.c | 2 +- src/qemu/qemu_driver.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index b7b4b02..f094f86 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -584,7 +584,7 @@ static int lxcDomainGetInfo(virDomainPtr dom, if (!virDomainObjIsActive(vm)) { info-cpuTime = 0; -info-memory = vm-def-mem.cur_balloon; +info-memory = 0; } else { if (virCgroupGetCpuacctUsage(priv-cgroup, (info-cpuTime)) 0) { virReportError(VIR_ERR_OPERATION_FAILED, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 33541d3..01107cf 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2534,7 +2534,7 @@ static int qemuDomainGetInfo(virDomainPtr dom, info-memory = vm-def-mem.cur_balloon; } } else { -info-memory = vm-def-mem.cur_balloon; +info-memory = 0; } info-nrVirtCpu = vm-def-vcpus; -- 1.9.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] LXC: create a bind mount for sysfs when enable userns but disable netns
ping -Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Chen Hanxiao Sent: Monday, July 14, 2014 6:02 PM To: libvir-list@redhat.com Subject: [libvirt] [PATCH] LXC: create a bind mount for sysfs when enable userns but disable netns kernel commit 7dc5dbc879bd0779924b5132a48b731a0bc04a1e forbid us doing a fresh mount for sysfs when enable userns but disable netns. This patch will create a bind mount in this senario. Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/lxc/lxc_container.c | 44 +--- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index 4d89677..8a27215 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -815,10 +815,13 @@ static int lxcContainerSetReadOnly(void) } -static int lxcContainerMountBasicFS(bool userns_enabled) +static int lxcContainerMountBasicFS(bool userns_enabled, +bool netns_disabled) { size_t i; int rc = -1; +char* mnt_src = NULL; +int mnt_mflags; VIR_DEBUG(Mounting basic filesystems); @@ -826,8 +829,25 @@ static int lxcContainerMountBasicFS(bool userns_enabled) bool bindOverReadonly; virLXCBasicMountInfo const *mnt = lxcBasicMounts[i]; +/* When enable userns but disable netns, kernel will + * forbid us doing a new fresh mount for sysfs. + * So we had to do a bind mount for sysfs instead. + */ +if (userns_enabled netns_disabled +STREQ(mnt-src, sysfs)) { +if (VIR_STRDUP(mnt_src, /sys) 0) { +goto cleanup; +} +mnt_mflags = MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY|MS_BIND; +} else { +if (VIR_STRDUP(mnt_src, mnt-src) 0) { +goto cleanup; +} +mnt_mflags = mnt-mflags; +} + VIR_DEBUG(Processing %s - %s, - mnt-src, mnt-dst); + mnt_src, mnt-dst); if (mnt-skipUnmounted) { char *hostdir; @@ -856,7 +876,7 @@ static int lxcContainerMountBasicFS(bool userns_enabled) if (virFileMakePath(mnt-dst) 0) { virReportSystemError(errno, _(Failed to mkdir %s), - mnt-src); + mnt_src); goto cleanup; } @@ -867,24 +887,24 @@ static int lxcContainerMountBasicFS(bool userns_enabled) * we mount the filesystem in read-write mode initially, and then do a * separate read-only bind mount on top of that. */ -bindOverReadonly = !!(mnt-mflags MS_RDONLY); +bindOverReadonly = !!(mnt_mflags MS_RDONLY); VIR_DEBUG(Mount %s on %s type=%s flags=%x, - mnt-src, mnt-dst, mnt-type, mnt-mflags ~MS_RDONLY); -if (mount(mnt-src, mnt-dst, mnt-type, mnt-mflags ~MS_RDONLY, NULL) 0) { + mnt_src, mnt-dst, mnt-type, mnt_mflags ~MS_RDONLY); +if (mount(mnt_src, mnt-dst, mnt-type, mnt_mflags ~MS_RDONLY, NULL) 0) { virReportSystemError(errno, _(Failed to mount %s on %s type %s flags=%x), - mnt-src, mnt-dst, NULLSTR(mnt-type), - mnt-mflags ~MS_RDONLY); + mnt_src, mnt-dst, NULLSTR(mnt-type), + mnt_mflags ~MS_RDONLY); goto cleanup; } if (bindOverReadonly -mount(mnt-src, mnt-dst, NULL, +mount(mnt_src, mnt-dst, NULL, MS_BIND|MS_REMOUNT|MS_RDONLY, NULL) 0) { virReportSystemError(errno, _(Failed to re-mount %s on %s flags=%x), - mnt-src, mnt-dst, + mnt_src, mnt-dst, MS_BIND|MS_REMOUNT|MS_RDONLY); goto cleanup; } @@ -893,6 +913,7 @@ static int lxcContainerMountBasicFS(bool userns_enabled) rc = 0; cleanup: +VIR_FREE(mnt_src); VIR_DEBUG(rc=%d, rc); return rc; } @@ -1643,7 +1664,8 @@ static int lxcContainerSetupPivotRoot(virDomainDefPtr vmDef, goto cleanup; /* Mounts the core /proc, /sys, etc filesystems */ -if (lxcContainerMountBasicFS(vmDef-idmap.nuidmap) 0) +if (lxcContainerMountBasicFS(vmDef-idmap.nuidmap, + !vmDef-nnets) 0) goto cleanup; /* Ensure entire root filesystem (except /.oldroot) is readonly */ -- 1.9.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list
Re: [libvirt] [PATCHv4 1/2] lxc: allow to keep or drop capabilities
-Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Cédric Bosdonnat Sent: Friday, July 18, 2014 4:02 PM To: libvir-list@redhat.com Cc: Cédric Bosdonnat Subject: [libvirt] [PATCHv4 1/2] lxc: allow to keep or drop capabilities Added capabilities in the features section of LXC domains configuration. This section can contain elements named after the capabilities like: mknod state=on/, keep CAP_MKNOD capability sys_chroot state=off/ drop CAP_SYS_CHROOT capability Users can restrict or give more capabilities than the default using this mechanism. --- Reviewed-by: Chen Hanxiao chenhanx...@cn.fujitsu.com -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCHv4 2/2] lxc domain from xml: convert lxc.cap.drop
-Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Cédric Bosdonnat Sent: Friday, July 18, 2014 4:03 PM To: libvir-list@redhat.com Cc: Cédric Bosdonnat Subject: [libvirt] [PATCHv4 2/2] lxc domain from xml: convert lxc.cap.drop --- Reviewed-by: Chen Hanxiao chenhanx...@cn.fujitsu.com -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2] LXC: add support for --config in setmem command
-Original Message- From: Ján Tomko [mailto:jto...@redhat.com] Sent: Thursday, July 10, 2014 9:40 PM -if (virDomainSetMemoryEnsureACL(dom-conn, vm-def) 0) +if (virDomainSetMemoryFlagsEnsureACL(dom-conn, vm-def, flags) 0) +goto cleanup; + +if (!(caps = virLXCDriverGetCapabilities(driver, false))) +goto cleanup; + +if (virDomainLiveConfigHelperMethod(caps, driver-xmlopt, vm, flags, +persistentDef) 0) goto cleanup; if (newmem vm-def-mem.max_balloon) { This check should only be done for AFFECT_LIVE. For AFFECT_CONFIG it needs to be checked against the max_balloon value from the persistent definition. Oops, my fault. Thanks for your comments - Chen -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] LXC: fix an improper comments for lxcDomainDestroyFlags
ping -Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Chen Hanxiao Sent: Friday, July 04, 2014 11:10 AM To: libvir-list@redhat.com Subject: [libvirt] [PATCH] LXC: fix an improper comments for lxcDomainDestroyFlags Currently @flag is not used yet. Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/lxc/lxc_driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 79c3b4a..5c4ab58 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -1420,7 +1420,7 @@ lxcConnectDomainEventDeregisterAny(virConnectPtr conn, /** * lxcDomainDestroyFlags: * @dom: pointer to domain to destroy - * @flags: an OR'ed set of virDomainDestroyFlags + * @flags: extra flags; not used yet. * * Sends SIGKILL to container root process to terminate the container * -- 1.9.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] LXC: introduce lxcDomainSetMemoryFlags
-Original Message- From: Ján Tomko [mailto:jto...@redhat.com] Sent: Monday, July 07, 2014 6:54 PM To: Chen, Hanxiao/陈 晗霄; libvir-list@redhat.com Subject: Re: [libvirt] [PATCH] LXC: introduce lxcDomainSetMemoryFlags On 07/04/2014 10:21 AM, Chen Hanxiao wrote: In lxc, we could not use setmem command with --config options. This patch will add support for this. Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/lxc/lxc_driver.c | 52 ++-- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 79c3b4a..68795cb 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -706,11 +706,19 @@ static int lxcDomainSetMaxMemory(virDomainPtr dom, unsigned long newmax) return ret; } -static int lxcDomainSetMemory(virDomainPtr dom, unsigned long newmem) +static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, +unsigned int flags) Indentation looks off. { virDomainObjPtr vm; +virDomainDefPtr persistentDef = NULL; +virCapsPtr caps = NULL; int ret = -1; virLXCDomainObjPrivatePtr priv; +virLXCDriverPtr driver = dom-conn-privateData; +virLXCDriverConfigPtr cfg = NULL; + +virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG, -1); if (!(vm = lxcDomObjFromDomain(dom))) goto cleanup; @@ -720,22 +728,38 @@ static int lxcDomainSetMemory(virDomainPtr dom, unsigned long newmem) if (virDomainSetMemoryEnsureACL(dom-conn, vm-def) 0) goto cleanup; 'make check' complains about a mismatched ACL check: ./lxc/lxc_driver.c:728 Mismatch check 'virDomainSetMemoryEnsureACL' for function 'lxcDomainSetMemoryFlags' +if (!(caps = virLXCDriverGetCapabilities(driver, false))) +goto cleanup; + +if (virDomainLiveConfigHelperMethod(caps, driver-xmlopt, vm, flags, +persistentDef) 0) +goto cleanup; + if (newmem vm-def-mem.max_balloon) { virReportError(VIR_ERR_INVALID_ARG, %s, _(Cannot set memory higher than max memory)); goto cleanup; } This check is only valid for AFFECT_LIVE. For AFFECT_CONFIG, a separate check is needed. It should be virDomainSetMemoryFlagsEnsureACL. -if (!virDomainObjIsActive(vm)) { -virReportError(VIR_ERR_OPERATION_INVALID, - %s, _(Domain is not running)); -goto cleanup; -} + if (flags VIR_DOMAIN_AFFECT_CONFIG) { + cfg = virLXCDriverGetConfig(driver); + persistentDef-mem.cur_balloon = newmem; + if (virDomainSaveConfig(cfg-configDir, persistentDef) 0) + goto cleanup; + } -if (virCgroupSetMemory(priv-cgroup, newmem) 0) { -virReportError(VIR_ERR_OPERATION_FAILED, - %s, _(Failed to set memory for domain)); -goto cleanup; +if (flags VIR_DOMAIN_AFFECT_LIVE) { +if (!virDomainObjIsActive(vm)) { +virReportError(VIR_ERR_OPERATION_INVALID, + %s, _(Domain is not running)); +goto cleanup; +} virDomainLiveConfigHelperMethod already checked if the domain is running when AFFECT_LIVE is specified. Yes, we should remove this block. Thanks for your review, v2 will come soon. - Chen + +if (virCgroupSetMemory(priv-cgroup, newmem) 0) { +virReportError(VIR_ERR_OPERATION_FAILED, + %s, _(Failed to set memory for domain)); +goto cleanup; +} } ret = 0; Jan -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] LXC: trivially support flag VIR_DRV_FEATURE_TYPED_PARAM_STRING
-Original Message- From: Ján Tomko [mailto:jto...@redhat.com] Sent: Monday, June 23, 2014 9:08 PM To: Chen, Hanxiao/陈 晗霄; libvir-list@redhat.com Subject: Re: [libvirt] [PATCH] LXC: trivially support flag VIR_DRV_FEATURE_TYPED_PARAM_STRING On 06/23/2014 09:28 AM, Chen Hanxiao wrote: fix: virsh -c lxc:/// memtune DOMAIN error: Unable to get number of memory parameters error: unsupported flags (0x4) in function lxcDomainGetMemoryParameters Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/lxc/lxc_driver.c | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) lxcDomainGetSchedulerParametersFlags will need a similar fix. Yes, it needs a similar fix. It seems commit 399394 (released in v1.2.2) introduced this when it marked the LXC driver as supporting the option without marking it as supported in these APIs. We should updated the comments as 399394 does. Thanks, - Chen diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 06f3e18..6b170fe 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -895,7 +895,11 @@ lxcDomainGetMemoryParameters(virDomainPtr dom, size_t i; virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | - VIR_DOMAIN_AFFECT_CONFIG, -1); + VIR_DOMAIN_AFFECT_CONFIG, + VIR_TYPED_PARAM_STRING_OKAY, -1); + +/* We don't return strings, and thus trivially support this flag. */ +flags = ~VIR_TYPED_PARAM_STRING_OKAY; if (!(vm = lxcDomObjFromDomain(dom))) goto cleanup; -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2] LXC: trivially support flag VIR_DRV_FEATURE_TYPED_PARAM_STRING
-Original Message- From: Ján Tomko [mailto:jto...@redhat.com] Sent: Tuesday, June 24, 2014 4:57 PM To: Chen, Hanxiao/陈 晗霄; libvir-list@redhat.com Subject: Re: [libvirt] [PATCH v2] LXC: trivially support flag VIR_DRV_FEATURE_TYPED_PARAM_STRING On 06/24/2014 09:24 AM, Chen Hanxiao wrote: fix: virsh -c lxc:/// memtune DOMAIN error: Unable to get number of memory parameters error: unsupported flags (0x4) in function lxcDomainGetMemoryParameters Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- v2: also fix a similar issue in lxcDomainGetSchedulerParametersFlags src/lxc/lxc_driver.c | 16 ++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 06f3e18..d8a31d3 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -895,7 +895,13 @@ lxcDomainGetMemoryParameters(virDomainPtr dom, size_t i; virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | - VIR_DOMAIN_AFFECT_CONFIG, -1); + VIR_DOMAIN_AFFECT_CONFIG, + VIR_TYPED_PARAM_STRING_OKAY, -1); This fails to compile for me: CC lxc/libvirt_driver_lxc_impl_la-lxc_driver.lo lxc/lxc_driver.c:899:48: error: too many arguments provided to function-like macro invocation VIR_TYPED_PARAM_STRING_OKAY, -1); ^ Sorry for my mistake. + +/* We blindly return a string, and let libvirt.c and + * remote_driver.c do the filtering on behalf of older clients + * that can't parse it. */ The original comment was OK. This is incorrect - neither of these APIs return a string. Thanks, I see. +flags = ~VIR_TYPED_PARAM_STRING_OKAY; if (!(vm = lxcDomObjFromDomain(dom))) goto cleanup; @@ -1993,7 +1999,13 @@ lxcDomainGetSchedulerParametersFlags(virDomainPtr dom, virLXCDomainObjPrivatePtr priv; virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | - VIR_DOMAIN_AFFECT_CONFIG, -1); + VIR_DOMAIN_AFFECT_CONFIG | + VIR_TYPED_PARAM_STRING_OKAY, -1); + +/* We blindly return a string, and let libvirt.c and + * remote_driver.c do the filtering on behalf of older clients + * that can't parse it. */ Same here. +flags = ~VIR_TYPED_PARAM_STRING_OKAY; if (!(vm = lxcDomObjFromDomain(dom))) goto cleanup; Jan -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] lxc: don't update memUsage when failing to get memory usage
ping -Original Message- From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of Chen Hanxiao Sent: Friday, June 20, 2014 2:21 PM To: libvir-list@redhat.com Subject: [libvirt] [PATCH] lxc: don't update memUsage when failing to get memory usage Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/lxc/lxc_cgroup.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c index 8dfdc60..af95941 100644 --- a/src/lxc/lxc_cgroup.c +++ b/src/lxc/lxc_cgroup.c @@ -194,7 +194,8 @@ static int virLXCCgroupGetMemUsage(virCgroupPtr cgroup, unsigned long memUsage; ret = virCgroupGetMemoryUsage(cgroup, memUsage); -meminfo-memusage = (unsigned long long) memUsage; +if (ret == 0) +meminfo-memusage = (unsigned long long) memUsage; return ret; } -- 1.9.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] vircgroup: Don't leak keypath if failed to kill process
ping -Original Message- From: Chen, Hanxiao/陈 晗霄 Sent: Tuesday, May 13, 2014 4:01 PM To: libvir-list@redhat.com Cc: Chen, Hanxiao/陈 晗霄 Subject: [libvirt][PATCH] vircgroup: Don't leak keypath if failed to kill process Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- src/util/vircgroup.c | 10 ++ 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index fce380a..c578bd0 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -3370,7 +3370,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, int rc; bool killedAny = false; char *keypath = NULL; -DIR *dp; +DIR *dp = NULL; virCgroupPtr subgroup = NULL; struct dirent *ent; int direrr; @@ -3381,7 +3381,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, return -1; if ((rc = virCgroupKillInternal(group, signum, pids)) 0) -return -1; +goto cleanup; if (rc == 1) killedAny = true; @@ -3394,7 +3394,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, } virReportSystemError(errno, _(Cannot open %s), keypath); -return -1; +goto cleanup; } while ((direrr = virDirRead(dp, ent, keypath)) 0) { @@ -3429,7 +3429,9 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, cleanup: virCgroupFree(subgroup); -closedir(dp); +VIR_FREE(keypath); +if (dp) +closedir(dp); return ret; } -- 1.9.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] libvirt 1.2.4 and virt-manager 0.9.0 are not incompatible
Hi, You need to update libvirt-python: http://libvirt.org/sources/python/ From: libvir-list-boun...@redhat.com [mailto:libvir-list-boun...@redhat.com] On Behalf Of xeon_feng Sent: Tuesday, May 06, 2014 2:00 PM To: libvirt-us...@redhat.com; libvir-list@redhat.com Subject: [libvirt] libvirt 1.2.4 and virt-manager 0.9.0 are not incompatible Hello everyone I encountered a problem when I completed the update of libvirt from 0.10 to 1.2.4 . The problem was that virt-manager(version 0.9.0) could not start and reported error : ImportError: /usr/lib64/libvirt.so.0: version 'LIBVIRT_PRIVIATE_0.10.2' not found (required by /usr/lib64/python2.6/site-packages/libvirtmod.so). I found the libvirt.so.0 link file just in the /usr/lib64/ directory , but it was linking to libvirt.so.0.1002.4 .not to the libvirt.so.0.10.2 I made libvirt.so.0 to link to libvirt.so.0.10.2 and restarted virt-manager , virt-manager started normally then restarted libvirtd failure, reporting error:l “ibvirtd: /usr/lib64/libvirt.so.0: version 'LIBVIRT_1.2.3' not found (require by libvirtd) .” I made libvirt.so.0 to link to libvirt.so.0.1002.4 and restart libvirtd , libvirtd started normally again. Please help me to resolve the problem and give me some advise Thanks a lot.. Xeon.Feng -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] docs: update docs for setting the QEMU BIOS file path
-Original Message- From: Jim Fehlig [mailto:jfeh...@suse.com] Sent: Tuesday, April 29, 2014 12:25 PM To: Chen, Hanxiao/陈 晗霄 Cc: Nehal J Wani; libvir-list Subject: Re: [libvirt] [PATCH] docs: update docs for setting the QEMU BIOS file path chenhanx...@cn.fujitsu.com wrote: -Original Message- From: Nehal J Wani [mailto:nehaljw.k...@gmail.com] Sent: Monday, April 28, 2014 1:07 PM To: Chen, Hanxiao/陈 晗霄 Cc: libvir-list Subject: Re: [libvirt] [PATCH] docs: update docs for setting the QEMU BIOS file path ddThe optional codeloader/code tag refers to a firmware blob used to assist the domain creation process. At this time, it is only needed by Xen fully virtualized Is the sentence only needed by Xen fully virtualized valid even now? I'm not familiar with XEN... Anyone can help? There is certainly a lot of Xen fully virtualized config with loader/usr/lib/xen/boot/hvmloader/loader. But it sounds like your change makes the only needed by part invalid. I.e. loader is used by Xen fully virtualized domains as well as setting the QEMU BIOS file path for QEMU/KVM domains. Thanks for your help :) - Chen Regards, Jim -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2] docs: update docs for setting the QEMU BIOS path
-Original Message- From: Martin Kletzander [mailto:mklet...@redhat.com] Sent: Tuesday, April 29, 2014 4:19 PM To: Chen, Hanxiao/陈 晗霄 Cc: libvir-list@redhat.com Subject: Re: [libvirt] [PATCH v2] docs: update docs for setting the QEMU BIOS path On Tue, Apr 29, 2014 at 03:47:26PM +0800, Chen Hanxiao wrote: commit ddf2dfa1f79af0405df5ca10583764a497c7a0db provide a way to determine which bios files to use. s/provide/provided/ But we need to update related docs. disccussed at: http://www.redhat.com/archives/libvir-list/2012-June/msg01286.html Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com --- v2: updated description by Jim's comments. docs/formatdomain.html.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index b9bbcc9..e4bd87e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -126,9 +126,9 @@ these. span class=sinceSince 0.0.1/span/dd dtcodeloader/code/dt ddThe optional codeloader/code tag refers to a firmware blob -used to assist the domain creation process. At this time, it is -only needed by Xen fully virtualized -domains. span class=sinceSince 0.1.0/span/dd +used to assist the domain creation process. It is used by Xen +fully virtualized domains as well as setting the QEMU BIOS file +path for QEMU/KVM domains. span class=sinceSince 0.9.12/span/dd I'd like to keep the Since 0.1.0 there for the Xen part, so I added it back there and pushed, feel free to object. Keeping Xen part would be a better choice. Thanks, - Chen -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] docs: update docs for setting the QEMU BIOS file path
-Original Message- From: Nehal J Wani [mailto:nehaljw.k...@gmail.com] Sent: Monday, April 28, 2014 1:07 PM To: Chen, Hanxiao/陈 晗霄 Cc: libvir-list Subject: Re: [libvirt] [PATCH] docs: update docs for setting the QEMU BIOS file path ddThe optional codeloader/code tag refers to a firmware blob used to assist the domain creation process. At this time, it is only needed by Xen fully virtualized Is the sentence only needed by Xen fully virtualized valid even now? I'm not familiar with XEN... Anyone can help? Thanks, - Chen For example, the support for UEFI firmware has also been introduced, which can be easily used by extracting bios.bin from http://download.opensuse.org/repositories/home:/jejb1:/UEFI/openSUSE_12.2 /x86_64/OVMF-0.1+r14742-1.1.x86_64.rpm and passing its path under the loader option. -- Nehal J Wani -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list