From: Cole Robinson Date: Thu, 21 Jan 2016 18:18:04 +0000 (-0500) Subject: lxc: fuse: Fill in MemAvailable for /proc/meminfo X-Git-Tag: v1.3.2-rc1~322 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c7be484d1136834614089c9a74a3818594852f24;p=thirdparty%2Flibvirt.git lxc: fuse: Fill in MemAvailable for /proc/meminfo 'free' on Fedora 23 will use MemAvailable to calculate its 'available' field, but we are passing through the host's value. Set it to match MemFree, which is what 'free' will do for older linux that don't have MemAvailable https://bugzilla.redhat.com/show_bug.cgi?id=1300781 --- diff --git a/src/lxc/lxc_fuse.c b/src/lxc/lxc_fuse.c index ffa6889365..0a1c7dca15 100644 --- a/src/lxc/lxc_fuse.c +++ b/src/lxc/lxc_fuse.c @@ -174,6 +174,14 @@ static int lxcProcReadMeminfo(char *hostpath, virDomainDefPtr def, virDomainDefGetMemoryActual(def))) { virBufferAsprintf(new_meminfo, "MemFree: %8llu kB\n", (meminfo.memtotal - meminfo.memusage)); + } else if (STREQ(line, "MemAvailable") && + (virMemoryLimitIsSet(def->mem.hard_limit) || + virDomainDefGetMemoryActual(def))) { + /* MemAvailable is actually MemFree + SRReclaimable + + some other bits, but MemFree is the closest approximation + we have */ + virBufferAsprintf(new_meminfo, "MemAvailable: %8llu kB\n", + (meminfo.memtotal - meminfo.memusage)); } else if (STREQ(line, "Buffers")) { virBufferAsprintf(new_meminfo, "Buffers: %8d kB\n", 0); } else if (STREQ(line, "Cached")) {