On a hybrid cgroup system, the /proc/<PID>/cgroup file usually looks
like:

> 13:pids:/qemu.slice/110.scope
> 12:perf_event:/
> 11:devices:/qemu.slice
> 10:misc:/
> 9:hugetlb:/
> 8:freezer:/
> 7:cpu,cpuacct:/qemu.slice/110.scope
> 6:memory:/qemu.slice/110.scope
> 5:rdma:/
> 4:cpuset:/
> 3:blkio:/qemu.slice
> 2:net_cls,net_prio:/
> 1:name=systemd:/qemu.slice/110.scope
> 0::/qemu.slice/110.scope

but after 'umount /sys/fs/cgroup/pids' or for other reasons, it could
happen that an entry like '11:devices:/qemu.slice' is the first to
match the '/qemu.slice' part, which previously made the code expect to
find the VMID.

To improve detection, as a first step, match the trailing slash too.

Reported in the community forum:
https://forum.proxmox.com/threads/129320/post-571654

Signed-off-by: Fiona Ebner <f.eb...@proxmox.com>
---
 qmeventd/qmeventd.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/qmeventd/qmeventd.c b/qmeventd/qmeventd.c
index 921c0dca..503bce69 100644
--- a/qmeventd/qmeventd.c
+++ b/qmeventd/qmeventd.c
@@ -109,7 +109,7 @@ get_vmid_from_pid(pid_t pid)
        }
        cgroup_path++;
 
-       if (strncmp(cgroup_path, "/qemu.slice", 11)) {
+       if (strncmp(cgroup_path, "/qemu.slice/", 12)) {
            continue;
        }
 
@@ -142,7 +142,7 @@ get_vmid_from_pid(pid_t pid)
     if (errno) {
        fprintf(stderr, "error parsing vmid for %d: %s\n", pid, 
strerror(errno));
     } else {
-       fprintf(stderr, "error parsing vmid for %d: no qemu.slice cgroup 
entry\n", pid);
+       fprintf(stderr, "error parsing vmid for %d: no matching qemu.slice 
cgroup entry\n", pid);
     }
 
 ret:
-- 
2.39.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to