Red Hat Bugzilla – Bug 1131897
virDomainSetMemoryFlags doesn't process flag VIR_DOMAIN_MEM_MAXIMUM for LXC
Last modified: 2015-03-05 02:42:57 EST
Description of problem: virsh always pass flag 'VIR_DOMAIN_MEM_MAXIMUM' to virDomainSetMemoryFlags(), but lxc driver doesn't process this flag yet. This causes failed to setmaxmem with flags for LXC domain. Version-Release number of selected component (if applicable): libvirt-1.2.7-1.el7.x86_64 kernel-3.10.0-145.el7.x86_64 How reproducible: 100% Steps to Reproduce: 1. define and start a lxc guest # virsh -c lxc:// dumpxml helloworld <domain type='lxc'> <name>helloworld</name> <uuid>ed1955f7-4e72-40ae-8265-c193e7436c8a</uuid> <memory unit='KiB'>102400</memory> <currentMemory unit='KiB'>102400</currentMemory> <vcpu placement='static'>1</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64'>exe</type> <init>/bin/sh</init> </os> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/libexec/libvirt_lxc</emulator> <filesystem type='mount' accessmode='passthrough'> <source dir='/'/> <target dir='/'/> </filesystem> <console type='pty' tty='/dev/pts/3'> <source path='/dev/pts/3'/> <target type='lxc' port='0'/> <alias name='console0'/> </console> </devices> <seclabel type='none' model='selinux'/> </domain> 2. set max memory # virsh -c lxc:// setmaxmem helloworld 102500 --config error: Unable to change MaxMemorySize error: unsupported flags (0x4) in function lxcDomainSetMemoryFlags Expect result: setmaxmem works with '--config' '--live' '--current'.
Fixed upstream: commit bd3b76e35502928a490465bbc1251546c01f00c3 Author: Chen Hanxiao <chenhanxiao@cn.fujitsu.com> Date: Thu Jul 31 11:41:10 2014 +0800 LXC: resolve issues in lxcDomainSetMaxMemory This patch changes the setmaxmem function to support the '--live', '--config', and '--current' flags by revectoring the code through the setmem function using the VIR_DOMAIN_MEM_MAXIMUM flag. The setmem code is refactored to handle both cases depending on the flag. The changed maxmem code for the MEM_MAXIMUM path will not allow modification to the memory values of an active guest unless the --config switch is used. Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com> v1.2.7-55-gbd3b76e
Try to verify this bug with libvirt-1.2.8-7.el7.x86_64 Steps: 1. define a lxc and start it # virsh -c lxc:/// list Id Name State ---------------------------------------------------- 2218 helloworld running 2. try setmaxmem with "--config" "--live" "--current" 2.1 lxc is running # virsh -c lxc:/// setmaxmem helloworld 512M --live error: Unable to change MaxMemorySize error: Requested operation is not valid: Cannot resize the max memory on an active domain # virsh -c lxc:/// setmaxmem helloworld 512M --current error: Unable to change MaxMemorySize error: Requested operation is not valid: Cannot resize the max memory on an active domain # virsh -c lxc:/// setmaxmem helloworld 512M --config 2.2 lxc is shut off # virsh -c lxc:/// setmaxmem helloworld 512M --live error: Unable to change MaxMemorySize error: Requested operation is not valid: domain is not running # virsh -c lxc:/// setmaxmem helloworld 512M --current # virsh -c lxc:/// setmaxmem helloworld 512M --config setmaxmem with "--live/--current" to a active lxc or qemu guest is not supported right now(even the upstream). So the result is expected and I would change this bug to verified status.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHSA-2015-0323.html