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(a)redhat.com>
---
src/qemu/qemu_cgroup.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index f2d99abcfa..cd5d4341f7 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -904,6 +904,30 @@ 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;
+ virDomainResourceDef *resource = vm->def->resource;
+
+ if (!resource || !resource->vmid)
+ return 0;
+
+ appid = g_strdup_printf("%X:%s", inode, resource->vmid);
+
+ 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 +1120,9 @@ qemuSetupCgroup(virDomainObj *vm,
if (qemuSetupCpusetCgroup(vm) < 0)
return -1;
+ if (qemuSetupCgroupVMID(vm) < 0)
+ return -1;
+
return 0;
}
--
2.31.1