On 8/3/21 4:29 PM, 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:$VMID". > > $INODE is the VM root cgroup inode in hexadecimal and $VMID 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@xxxxxxxxxx> > --- > src/qemu/qemu_cgroup.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c > index f2d99abcfa..df021b5985 100644 > --- a/src/qemu/qemu_cgroup.c > +++ b/src/qemu/qemu_cgroup.c > @@ -904,6 +904,35 @@ qemuSetupCpuCgroup(virDomainObj *vm) > } > > > +static int > +qemuSetupCgroupVMID(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; > + > + if (!vm->def->vmid) > + return 0; > + > + appid = g_strdup_printf("%X:%s", inode, vm->def->vmid); > + > + if (virFileWriteStr(path, appid, 0) < 0) { > + if (errno == ENOENT) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("FC VMID not available on this host")); > + return -1; > + } > + > + virReportSystemError(errno, > + _("Unable to write '%s' to '%s'"), appid, path); Alternatively, use the following pattern: if (errno == ENOENT) { virReportError(); } else { virReportSystemError(); } return -1; Or use just virReportSystemError(); I believe "Unable to write to /sys/class/...: No such file or directory" is pretty comprehensive. Michal