]> git.proxmox.com Git - lxcfs.git/blame - debian/patches/pve/0006-swap-Tweak-meminfo-logic.patch
d/copyright: reflect that now all is licensed under LGPL-2.1+
[lxcfs.git] / debian / patches / pve / 0006-swap-Tweak-meminfo-logic.patch
CommitLineData
f955d3a9
WB
1From 1e92c18e409f37f79a24f61623b9d9c4d84e3280 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber@ubuntu.com>
3Date: Thu, 5 Nov 2020 15:30:27 -0500
4Subject: [PATCH lxcfs 6/8] swap: Tweak meminfo logic
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
10---
11 src/proc_fuse.c | 30 +++++++++---------------------
12 1 file changed, 9 insertions(+), 21 deletions(-)
13
14diff --git a/src/proc_fuse.c b/src/proc_fuse.c
15index 002aac9..4c555ec 100644
16--- a/src/proc_fuse.c
17+++ b/src/proc_fuse.c
18@@ -1151,7 +1151,7 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset,
19 __do_fclose FILE *f = NULL;
20 struct fuse_context *fc = fuse_get_context();
21 struct lxcfs_opts *opts = (struct lxcfs_opts *)fuse_get_context()->private_data;
22- bool wants_swap = opts && !opts->swap_off && liblxcfs_can_use_swap(), host_swap = false;
23+ bool wants_swap = opts && !opts->swap_off && liblxcfs_can_use_swap();
24 struct file_info *d = INTTYPE_TO_PTR(fi->fh);
25 uint64_t memlimit = 0, memusage = 0, memswlimit = 0, memswusage = 0,
26 hosttotal = 0, swfree = 0, swusage = 0, swtotal = 0,
27@@ -1258,19 +1258,14 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset,
28
29 sscanf(line + STRLITERALLEN("SwapTotal:"), "%" PRIu64, &hostswtotal);
30
31- /*
32- * If swtotal is 0 it should mean that
33- * memory.memsw.limit_in_bytes and
34- * memory.limit_in_bytes are both unlimited or
35- * both set to the same value. In both cases we
36- * have no idea what the technical swap limit
37- * is supposed to be (It's a shared limit
38- * anyway.) so fallback to the host's values in
39- * that case too.
40- */
41- if ((hostswtotal < swtotal) || swtotal == 0) {
42+ /* The total amount of swap is always reported to be the
43+ lesser of the RAM+SWAP limit or the SWAP device size.
44+ This is because the kernel can swap as much as it
45+ wants and not only up to swtotal. */
46+
47+ swtotal = memlimit + swtotal;
48+ if (hostswtotal < swtotal) {
49 swtotal = hostswtotal;
50- host_swap = true;
51 }
52
53 /* When swappiness is 0, pretend we can't swap. */
54@@ -1283,14 +1278,7 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset,
55 printme = lbuf;
56 } else if (startswith(line, "SwapFree:")) {
57 if (wants_swap) {
58- uint64_t hostswfree = 0;
59-
60- if (host_swap) {
61- sscanf(line + STRLITERALLEN("SwapFree:"), "%" PRIu64, &hostswfree);
62- swfree = hostswfree;
63- } else if (swtotal >= swusage) {
64- swfree = swtotal - swusage;
65- }
66+ swfree = swtotal - swusage;
67 }
68
69 snprintf(lbuf, 100, "SwapFree: %8" PRIu64 " kB\n", swfree);
70--
712.20.1
72