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

Pavel Hrdina phrdina at redhat.com
Tue Aug 17 09:26:38 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 51a400ba59..fcb02c21b1 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1922,6 +1922,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