Based on kernel commit messages the interface is
/sys/class/fc/fc_udev_device/appid_store
where we need to write the following string "$INODE:$APPID".
$INODE is the VM root cgroup inode in hexadecimal and $APPID is user
provided string that will be attached to each FC frame for the VM
within the cgroup identified by inode and has limit 128 bytes.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
---
src/qemu/qemu_cgroup.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index f2d99abcfa..2269a8655f 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -904,6 +904,33 @@ qemuSetupCpuCgroup(virDomainObj *vm)
}
+static int
+qemuSetupCgroupAppid(virDomainObj *vm)
+{
+ qemuDomainObjPrivate *priv = vm->privateData;
+ int inode = virCgroupGetInode(priv->cgroup);
+ const char *path = "/sys/class/fc/fc_udev_device/appid_store";
+ g_autofree char *appid = NULL;
+ virDomainResourceDef *resource = vm->def->resource;
+
+ if (!resource || !resource->appid)
+ return 0;
+
+ if (inode < 0)
+ return -1;
+
+ appid = g_strdup_printf("%X:%s", inode, resource->appid);
+
+ if (virFileWriteStr(path, appid, 0) < 0) {
+ virReportSystemError(errno,
+ _("Unable to write '%s' to '%s'"), appid, path);
+ return -1;
+ }
+
+ return 0;
+}
+
+
static int
qemuInitCgroup(virDomainObj *vm,
size_t nnicindexes,
@@ -1096,6 +1123,9 @@ qemuSetupCgroup(virDomainObj *vm,
if (qemuSetupCpusetCgroup(vm) < 0)
return -1;
+ if (qemuSetupCgroupAppid(vm) < 0)
+ return -1;
+
return 0;
}
--
2.31.1
On Tue, Aug 17, 2021 at 12:38:10PM +0200, Pavel Hrdina wrote:
>Based on kernel commit messages the interface is
>
> /sys/class/fc/fc_udev_device/appid_store
>
>where we need to write the following string "$INODE:$APPID".
>
>$INODE is the VM root cgroup inode in hexadecimal and $APPID is user
>provided string that will be attached to each FC frame for the VM
>within the cgroup identified by inode and has limit 128 bytes.
>
>Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
>Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
>---
> src/qemu/qemu_cgroup.c | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
>diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
>index f2d99abcfa..2269a8655f 100644
>--- a/src/qemu/qemu_cgroup.c
>+++ b/src/qemu/qemu_cgroup.c
>@@ -904,6 +904,33 @@ qemuSetupCpuCgroup(virDomainObj *vm)
> }
>
>
>+static int
>+qemuSetupCgroupAppid(virDomainObj *vm)
>+{
>+ qemuDomainObjPrivate *priv = vm->privateData;
>+ int inode = virCgroupGetInode(priv->cgroup);
If this fails, ...
>+ const char *path = "/sys/class/fc/fc_udev_device/appid_store";
>+ g_autofree char *appid = NULL;
>+ virDomainResourceDef *resource = vm->def->resource;
>+
>+ if (!resource || !resource->appid)
>+ return 0;
..., but you return 0 here, then you still have an error in the logs.
If you initialize it to -1 and only get the inode ID here, then
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
On Tue, Aug 17, 2021 at 01:21:55PM +0200, Martin Kletzander wrote:
> On Tue, Aug 17, 2021 at 12:38:10PM +0200, Pavel Hrdina wrote:
> > Based on kernel commit messages the interface is
> >
> > /sys/class/fc/fc_udev_device/appid_store
> >
> > where we need to write the following string "$INODE:$APPID".
> >
> > $INODE is the VM root cgroup inode in hexadecimal and $APPID is user
> > provided string that will be attached to each FC frame for the VM
> > within the cgroup identified by inode and has limit 128 bytes.
> >
> > Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
> > Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
> > ---
> > src/qemu/qemu_cgroup.c | 30 ++++++++++++++++++++++++++++++
> > 1 file changed, 30 insertions(+)
> >
> > diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
> > index f2d99abcfa..2269a8655f 100644
> > --- a/src/qemu/qemu_cgroup.c
> > +++ b/src/qemu/qemu_cgroup.c
> > @@ -904,6 +904,33 @@ qemuSetupCpuCgroup(virDomainObj *vm)
> > }
> >
> >
> > +static int
> > +qemuSetupCgroupAppid(virDomainObj *vm)
> > +{
> > + qemuDomainObjPrivate *priv = vm->privateData;
> > + int inode = virCgroupGetInode(priv->cgroup);
>
> If this fails, ...
>
> > + const char *path = "/sys/class/fc/fc_udev_device/appid_store";
> > + g_autofree char *appid = NULL;
> > + virDomainResourceDef *resource = vm->def->resource;
> > +
> > + if (!resource || !resource->appid)
> > + return 0;
>
> ..., but you return 0 here, then you still have an error in the logs.
>
> If you initialize it to -1 and only get the inode ID here, then
>
> Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
Right, I'll fix that and also the error message in patch 4 and push it.
Thanks for review!
Pavel
© 2016 - 2026 Red Hat, Inc.