[libvirt PATCH v2 1/5] vircgroup: introduce virCgroupGetInode function

Pavel Hrdina phrdina at redhat.com
Thu Aug 5 13:56:05 UTC 2021


For new feature Fibre Channel VMID we will need to get inode of the
VM root cgroup as it is used in the new kernel API together with VMID.

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 src/libvirt_private.syms |  1 +
 src/util/vircgroup.c     | 31 +++++++++++++++++++++++++++++++
 src/util/vircgroup.h     |  2 ++
 3 files changed, 34 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index aed40977b3..c2321aba70 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1920,6 +1920,7 @@ virCgroupGetCpuShares;
 virCgroupGetDevicePermsString;
 virCgroupGetDomainTotalCpuStats;
 virCgroupGetFreezerState;
+virCgroupGetInode;
 virCgroupGetMemoryHardLimit;
 virCgroupGetMemorySoftLimit;
 virCgroupGetMemoryStat;
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 1b3b28342e..4c9445340e 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -3973,3 +3973,34 @@ virCgroupGetCpuPeriodQuota(virCgroup *cgroup, unsigned long long *period,
 
     return 0;
 }
+
+
+/**
+ * virCgroupGetInode:
+ *
+ * @cgroup: the cgroup to get inode for
+ *
+ * Get the @cgroup inode and return its value to the caller.
+ *
+ * Returns inode on success, -1 on error with error message reported.
+ */
+int
+virCgroupGetInode(virCgroup *cgroup)
+{
+    struct stat st;
+    int controller = virCgroupGetAnyController(cgroup);
+    g_autofree char *path = NULL;
+
+    if (controller < 0)
+        return -1;
+
+    if (virCgroupPathOfController(cgroup, controller, "", &path) < 0)
+        return -1;
+
+    if (stat(path, &st) < 0) {
+        virReportSystemError(errno, _("failed to get stat for '%s'"), path);
+        return -1;
+    }
+
+    return st.st_ino;
+}
diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h
index 8002cac570..690f09465c 100644
--- a/src/util/vircgroup.h
+++ b/src/util/vircgroup.h
@@ -283,3 +283,5 @@ int virCgroupSetOwner(virCgroup *cgroup,
 int virCgroupHasEmptyTasks(virCgroup *cgroup, int controller);
 
 bool virCgroupControllerAvailable(int controller);
+
+int virCgroupGetInode(virCgroup *cgroup);
-- 
2.31.1




More information about the libvir-list mailing list