151 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From f15a4eb66ecbfb80340bbab65150b22ab3a313fe Mon Sep 17 00:00:00 2001
 | |
| Message-Id: <f15a4eb66ecbfb80340bbab65150b22ab3a313fe@dist-git>
 | |
| From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
 | |
| Date: Wed, 4 Mar 2020 12:42:48 +0100
 | |
| Subject: [PATCH] qemu: use the vhost-user schemas to find binary
 | |
| MIME-Version: 1.0
 | |
| Content-Type: text/plain; charset=UTF-8
 | |
| Content-Transfer-Encoding: 8bit
 | |
| 
 | |
| Look into /usr/share/qemu/vhost-user to see whether we can find
 | |
| a suitable virtiofsd binary, in case the user did not provide one
 | |
| in the domain XML.
 | |
| 
 | |
| Signed-off-by: Ján Tomko <jtomko@redhat.com>
 | |
| Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
 | |
| Reviewed-by: Peter Krempa <pkrempa@redhat.com>
 | |
| Tested-by: Andrea Bolognani <abologna@redhat.com>
 | |
| (cherry picked from commit 071a1ab92fbbd58f68fb4929d004d6155759067e)
 | |
| Signed-off-by: Ján Tomko <jtomko@redhat.com>
 | |
| https://bugzilla.redhat.com/show_bug.cgi?id=1694166
 | |
| Message-Id: <e422c33d2c825f91b90eb10ef1530406a3492e0e.1583322091.git.jtomko@redhat.com>
 | |
| Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
 | |
| ---
 | |
|  src/qemu/qemu_extdevice.c  |  9 +++++++++
 | |
|  src/qemu/qemu_vhost_user.c | 39 ++++++++++++++++++++++++++++++++++++++
 | |
|  src/qemu/qemu_vhost_user.h |  4 ++++
 | |
|  src/qemu/qemu_virtiofs.c   | 11 +++++++++++
 | |
|  src/qemu/qemu_virtiofs.h   |  4 ++++
 | |
|  5 files changed, 67 insertions(+)
 | |
| 
 | |
| diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
 | |
| index f66bafb62f..07b9117f57 100644
 | |
| --- a/src/qemu/qemu_extdevice.c
 | |
| +++ b/src/qemu/qemu_extdevice.c
 | |
| @@ -105,6 +105,15 @@ qemuExtDevicesPrepareDomain(virQEMUDriverPtr driver,
 | |
|          }
 | |
|      }
 | |
|  
 | |
| +    for (i = 0; i < vm->def->nfss; i++) {
 | |
| +        virDomainFSDefPtr fs = vm->def->fss[i];
 | |
| +
 | |
| +        if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
 | |
| +            if (qemuVirtioFSPrepareDomain(driver, fs) < 0)
 | |
| +                return -1;
 | |
| +        }
 | |
| +    }
 | |
| +
 | |
|      return ret;
 | |
|  }
 | |
|  
 | |
| diff --git a/src/qemu/qemu_vhost_user.c b/src/qemu/qemu_vhost_user.c
 | |
| index 4c25b30664..a3d5ac0fc7 100644
 | |
| --- a/src/qemu/qemu_vhost_user.c
 | |
| +++ b/src/qemu/qemu_vhost_user.c
 | |
| @@ -416,3 +416,42 @@ qemuVhostUserFillDomainGPU(virQEMUDriverPtr driver,
 | |
|      VIR_FREE(vus);
 | |
|      return ret;
 | |
|  }
 | |
| +
 | |
| +
 | |
| +int
 | |
| +qemuVhostUserFillDomainFS(virQEMUDriverPtr driver,
 | |
| +                          virDomainFSDefPtr fs)
 | |
| +{
 | |
| +    qemuVhostUserPtr *vus = NULL;
 | |
| +    ssize_t nvus = 0;
 | |
| +    ssize_t i;
 | |
| +    int ret = -1;
 | |
| +
 | |
| +    if ((nvus = qemuVhostUserFetchParsedConfigs(driver->privileged,
 | |
| +                                                &vus, NULL)) < 0)
 | |
| +        goto end;
 | |
| +
 | |
| +    for (i = 0; i < nvus; i++) {
 | |
| +        qemuVhostUserPtr vu = vus[i];
 | |
| +
 | |
| +        if (vu->type != QEMU_VHOST_USER_TYPE_FS)
 | |
| +            continue;
 | |
| +
 | |
| +        fs->binary = g_strdup(vu->binary);
 | |
| +        break;
 | |
| +    }
 | |
| +
 | |
| +    if (i == nvus) {
 | |
| +        virReportError(VIR_ERR_OPERATION_FAILED, "%s",
 | |
| +                       _("Unable to find a satisfying virtiofsd"));
 | |
| +        goto end;
 | |
| +    }
 | |
| +
 | |
| +    ret = 0;
 | |
| +
 | |
| + end:
 | |
| +    for (i = 0; i < nvus; i++)
 | |
| +        qemuVhostUserFree(vus[i]);
 | |
| +    g_free(vus);
 | |
| +    return ret;
 | |
| +}
 | |
| diff --git a/src/qemu/qemu_vhost_user.h b/src/qemu/qemu_vhost_user.h
 | |
| index 369ba00caa..e505c8a473 100644
 | |
| --- a/src/qemu/qemu_vhost_user.h
 | |
| +++ b/src/qemu/qemu_vhost_user.h
 | |
| @@ -45,3 +45,7 @@ qemuVhostUserFetchConfigs(char ***configs,
 | |
|  int
 | |
|  qemuVhostUserFillDomainGPU(virQEMUDriverPtr driver,
 | |
|                             virDomainVideoDefPtr video);
 | |
| +
 | |
| +int
 | |
| +qemuVhostUserFillDomainFS(virQEMUDriverPtr driver,
 | |
| +                          virDomainFSDefPtr fs);
 | |
| diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c
 | |
| index 194855ece8..d579ce1d33 100644
 | |
| --- a/src/qemu/qemu_virtiofs.c
 | |
| +++ b/src/qemu/qemu_virtiofs.c
 | |
| @@ -28,6 +28,7 @@
 | |
|  #include "qemu_conf.h"
 | |
|  #include "qemu_extdevice.h"
 | |
|  #include "qemu_security.h"
 | |
| +#include "qemu_vhost_user.h"
 | |
|  #include "qemu_virtiofs.h"
 | |
|  #include "virpidfile.h"
 | |
|  #include "virqemu.h"
 | |
| @@ -325,3 +326,13 @@ qemuVirtioFSSetupCgroup(virDomainObjPtr vm,
 | |
|  
 | |
|      return 0;
 | |
|  }
 | |
| +
 | |
| +int
 | |
| +qemuVirtioFSPrepareDomain(virQEMUDriverPtr driver,
 | |
| +                          virDomainFSDefPtr fs)
 | |
| +{
 | |
| +    if (fs->binary)
 | |
| +        return 0;
 | |
| +
 | |
| +    return qemuVhostUserFillDomainFS(driver, fs);
 | |
| +}
 | |
| diff --git a/src/qemu/qemu_virtiofs.h b/src/qemu/qemu_virtiofs.h
 | |
| index 1db59917c6..7de4ea6190 100644
 | |
| --- a/src/qemu/qemu_virtiofs.h
 | |
| +++ b/src/qemu/qemu_virtiofs.h
 | |
| @@ -40,3 +40,7 @@ int
 | |
|  qemuVirtioFSSetupCgroup(virDomainObjPtr vm,
 | |
|                          virDomainFSDefPtr fs,
 | |
|                          virCgroupPtr cgroup);
 | |
| +
 | |
| +int
 | |
| +qemuVirtioFSPrepareDomain(virQEMUDriverPtr driver,
 | |
| +                          virDomainFSDefPtr fs);
 | |
| -- 
 | |
| 2.25.1
 | |
| 
 |