[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