[libvirt PATCH 3/3] qemu: implement support for Fibre Channel VMID
Michal Prívozník
mprivozn at redhat.com
Wed Aug 4 08:06:21 UTC 2021
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 at redhat.com>
> ---
> 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
More information about the libvir-list
mailing list