On 8/3/21 4:29 PM, Pavel Hrdina wrote: > 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@xxxxxxxxxx> > --- > src/libvirt_private.syms | 1 + > src/util/vircgroup.c | 37 +++++++++++++++++++++++++++++++++++++ > src/util/vircgroup.h | 2 ++ > 3 files changed, 40 insertions(+) > > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index 6961cdb137..d8451fcfff 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..ea702e7b63 100644 > --- a/src/util/vircgroup.c > +++ b/src/util/vircgroup.c > @@ -3973,3 +3973,40 @@ 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) > +{ > + VIR_AUTOCLOSE fd = 0; > + 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 ((fd = open(path, O_RDONLY | O_NONBLOCK)) < 0) { > + virReportSystemError(errno, _("failed to open cgroup '%s'"), path); > + return -1; > + } Is the open() necessary? Why isn't plain stat() enough? Michal