From nobody Wed Feb 11 07:26:19 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1493378557629959.6993563053225; Fri, 28 Apr 2017 04:22:37 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B528180059; Fri, 28 Apr 2017 11:22:35 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8A6E88BC25; Fri, 28 Apr 2017 11:22:35 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 3F22A18523D5; Fri, 28 Apr 2017 11:22:35 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3SBMMpl006927 for ; Fri, 28 Apr 2017 07:22:22 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2BEAB8EE5C; Fri, 28 Apr 2017 11:22:22 +0000 (UTC) Received: from moe.brq.redhat.com (dhcp129-131.brq.redhat.com [10.34.129.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5F7F68FBEE; Fri, 28 Apr 2017 11:22:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B528180059 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com B528180059 From: Michal Privoznik To: libvir-list@redhat.com Date: Fri, 28 Apr 2017 13:22:11 +0200 Message-Id: <0d93e1c0efb5aae83e9efabbe0f87e651f4ea5da.1493378419.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Cc: cbosdonnat@suse.com Subject: [libvirt] [PATCH 2/5] qemuDomainCreateDeviceRecursive: pass a structure instead of bare path X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Fri, 28 Apr 2017 11:22:36 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Currently, all we need to do in qemuDomainCreateDeviceRecursive() is to take given @device, get all kinds of info on it (major & minor numbers, owner, seclabels) and create its copy at a temporary location @path (usually /var/run/libvirt/qemu/$domName.dev), if @device live under /dev. This is, however, very loose condition, as it also means /dev/shm/* is created too. Therefor, we will need to pass more arguments into the function for better decision making (e.g. list of mount points under /dev). Instead of adding more arguments to all the functions (not easily reachable because some functions are callback with strictly defined type), lets just turn this one 'const char *' into a 'struct *'. New "arguments" can be then added at no cost. Signed-off-by: Michal Privoznik --- src/qemu/qemu_domain.c | 106 ++++++++++++++++++++++++++-------------------= ---- 1 file changed, 57 insertions(+), 49 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index be02d54..9e18f7e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -7337,9 +7337,14 @@ qemuDomainGetPreservedMounts(virQEMUDriverConfigPtr = cfg, } =20 =20 +struct qemuDomainCreateDeviceData { + const char *path; /* Path to temp new /dev location */ +}; + + static int qemuDomainCreateDeviceRecursive(const char *device, - const char *path, + const struct qemuDomainCreateDeviceData *d= ata, bool allow_noent, unsigned int ttl) { @@ -7388,7 +7393,7 @@ qemuDomainCreateDeviceRecursive(const char *device, */ if (STRPREFIX(device, DEVPREFIX)) { if (virAsprintf(&devicePath, "%s/%s", - path, device + strlen(DEVPREFIX)) < 0) + data->path, device + strlen(DEVPREFIX)) < 0) goto cleanup; =20 if (virFileMakeParentPath(devicePath) < 0) { @@ -7449,7 +7454,7 @@ qemuDomainCreateDeviceRecursive(const char *device, tmp =3D NULL; } =20 - if (qemuDomainCreateDeviceRecursive(target, path, + if (qemuDomainCreateDeviceRecursive(target, data, allow_noent, ttl - 1) < 0) goto cleanup; } else { @@ -7533,12 +7538,12 @@ qemuDomainCreateDeviceRecursive(const char *device, =20 static int qemuDomainCreateDevice(const char *device, - const char *path, + const struct qemuDomainCreateDeviceData *data, bool allow_noent) { long symloop_max =3D sysconf(_SC_SYMLOOP_MAX); =20 - return qemuDomainCreateDeviceRecursive(device, path, + return qemuDomainCreateDeviceRecursive(device, data, allow_noent, symloop_max); } =20 @@ -7546,7 +7551,7 @@ qemuDomainCreateDevice(const char *device, static int qemuDomainPopulateDevices(virQEMUDriverConfigPtr cfg, virDomainObjPtr vm ATTRIBUTE_UNUSED, - const char *path) + const struct qemuDomainCreateDeviceData *data) { const char *const *devices =3D (const char *const *) cfg->cgroupDevice= ACL; size_t i; @@ -7556,7 +7561,7 @@ qemuDomainPopulateDevices(virQEMUDriverConfigPtr cfg, devices =3D defaultDeviceACL; =20 for (i =3D 0; devices[i]; i++) { - if (qemuDomainCreateDevice(devices[i], path, true) < 0) + if (qemuDomainCreateDevice(devices[i], data, true) < 0) goto cleanup; } =20 @@ -7570,7 +7575,7 @@ static int qemuDomainSetupDev(virQEMUDriverConfigPtr cfg, virSecurityManagerPtr mgr, virDomainObjPtr vm, - const char *path) + const struct qemuDomainCreateDeviceData *data) { char *mount_options =3D NULL; char *opts =3D NULL; @@ -7592,10 +7597,10 @@ qemuDomainSetupDev(virQEMUDriverConfigPtr cfg, "mode=3D755,size=3D65536%s", mount_options) < 0) goto cleanup; =20 - if (virFileSetupDev(path, opts) < 0) + if (virFileSetupDev(data->path, opts) < 0) goto cleanup; =20 - if (qemuDomainPopulateDevices(cfg, vm, path) < 0) + if (qemuDomainPopulateDevices(cfg, vm, data) < 0) goto cleanup; =20 ret =3D 0; @@ -7609,7 +7614,7 @@ qemuDomainSetupDev(virQEMUDriverConfigPtr cfg, static int qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virDomainDiskDefPtr disk, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { virStorageSourcePtr next; char *dst =3D NULL; @@ -7621,7 +7626,7 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg ATTRIB= UTE_UNUSED, continue; } =20 - if (qemuDomainCreateDevice(next->path, devPath, false) < 0) + if (qemuDomainCreateDevice(next->path, data, false) < 0) goto cleanup; } =20 @@ -7635,7 +7640,7 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg ATTRIB= UTE_UNUSED, static int qemuDomainSetupAllDisks(virQEMUDriverConfigPtr cfg, virDomainObjPtr vm, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { size_t i; VIR_DEBUG("Setting up disks"); @@ -7643,7 +7648,7 @@ qemuDomainSetupAllDisks(virQEMUDriverConfigPtr cfg, for (i =3D 0; i < vm->def->ndisks; i++) { if (qemuDomainSetupDisk(cfg, vm->def->disks[i], - devPath) < 0) + data) < 0) return -1; } =20 @@ -7655,7 +7660,7 @@ qemuDomainSetupAllDisks(virQEMUDriverConfigPtr cfg, static int qemuDomainSetupHostdev(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virDomainHostdevDefPtr dev, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { int ret =3D -1; char **path =3D NULL; @@ -7665,7 +7670,7 @@ qemuDomainSetupHostdev(virQEMUDriverConfigPtr cfg ATT= RIBUTE_UNUSED, goto cleanup; =20 for (i =3D 0; i < npaths; i++) { - if (qemuDomainCreateDevice(path[i], devPath, false) < 0) + if (qemuDomainCreateDevice(path[i], data, false) < 0) goto cleanup; } =20 @@ -7681,7 +7686,7 @@ qemuDomainSetupHostdev(virQEMUDriverConfigPtr cfg ATT= RIBUTE_UNUSED, static int qemuDomainSetupAllHostdevs(virQEMUDriverConfigPtr cfg, virDomainObjPtr vm, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { size_t i; =20 @@ -7689,7 +7694,7 @@ qemuDomainSetupAllHostdevs(virQEMUDriverConfigPtr cfg, for (i =3D 0; i < vm->def->nhostdevs; i++) { if (qemuDomainSetupHostdev(cfg, vm->def->hostdevs[i], - devPath) < 0) + data) < 0) return -1; } VIR_DEBUG("Setup all hostdevs"); @@ -7700,19 +7705,19 @@ qemuDomainSetupAllHostdevs(virQEMUDriverConfigPtr c= fg, static int qemuDomainSetupMemory(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virDomainMemoryDefPtr mem, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { if (mem->model !=3D VIR_DOMAIN_MEMORY_MODEL_NVDIMM) return 0; =20 - return qemuDomainCreateDevice(mem->nvdimmPath, devPath, false); + return qemuDomainCreateDevice(mem->nvdimmPath, data, false); } =20 =20 static int qemuDomainSetupAllMemories(virQEMUDriverConfigPtr cfg, virDomainObjPtr vm, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { size_t i; =20 @@ -7720,7 +7725,7 @@ qemuDomainSetupAllMemories(virQEMUDriverConfigPtr cfg, for (i =3D 0; i < vm->def->nmems; i++) { if (qemuDomainSetupMemory(cfg, vm->def->mems[i], - devPath) < 0) + data) < 0) return -1; } VIR_DEBUG("Setup all memories"); @@ -7733,26 +7738,26 @@ qemuDomainSetupChardev(virDomainDefPtr def ATTRIBUT= E_UNUSED, virDomainChrDefPtr dev, void *opaque) { - const char *devPath =3D opaque; + const struct qemuDomainCreateDeviceData *data =3D opaque; =20 if (dev->source->type !=3D VIR_DOMAIN_CHR_TYPE_DEV) return 0; =20 - return qemuDomainCreateDevice(dev->source->data.file.path, devPath, fa= lse); + return qemuDomainCreateDevice(dev->source->data.file.path, data, false= ); } =20 =20 static int qemuDomainSetupAllChardevs(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virDomainObjPtr vm, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { VIR_DEBUG("Setting up chardevs"); =20 if (virDomainChrDefForeach(vm->def, true, qemuDomainSetupChardev, - (void *) devPath) < 0) + (void *) data) < 0) return -1; =20 VIR_DEBUG("Setup all chardevs"); @@ -7763,7 +7768,7 @@ qemuDomainSetupAllChardevs(virQEMUDriverConfigPtr cfg= ATTRIBUTE_UNUSED, static int qemuDomainSetupTPM(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virDomainObjPtr vm, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { virDomainTPMDefPtr dev =3D vm->def->tpm; =20 @@ -7775,7 +7780,7 @@ qemuDomainSetupTPM(virQEMUDriverConfigPtr cfg ATTRIBU= TE_UNUSED, switch (dev->type) { case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH: if (qemuDomainCreateDevice(dev->data.passthrough.source.data.file.= path, - devPath, false) < 0) + data, false) < 0) return -1; break; =20 @@ -7792,7 +7797,7 @@ qemuDomainSetupTPM(virQEMUDriverConfigPtr cfg ATTRIBU= TE_UNUSED, static int qemuDomainSetupGraphics(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virDomainGraphicsDefPtr gfx, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { const char *rendernode =3D gfx->data.spice.rendernode; =20 @@ -7801,14 +7806,14 @@ qemuDomainSetupGraphics(virQEMUDriverConfigPtr cfg = ATTRIBUTE_UNUSED, !rendernode) return 0; =20 - return qemuDomainCreateDevice(rendernode, devPath, false); + return qemuDomainCreateDevice(rendernode, data, false); } =20 =20 static int qemuDomainSetupAllGraphics(virQEMUDriverConfigPtr cfg, virDomainObjPtr vm, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { size_t i; =20 @@ -7816,7 +7821,7 @@ qemuDomainSetupAllGraphics(virQEMUDriverConfigPtr cfg, for (i =3D 0; i < vm->def->ngraphics; i++) { if (qemuDomainSetupGraphics(cfg, vm->def->graphics[i], - devPath) < 0) + data) < 0) return -1; } =20 @@ -7828,13 +7833,13 @@ qemuDomainSetupAllGraphics(virQEMUDriverConfigPtr c= fg, static int qemuDomainSetupInput(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virDomainInputDefPtr input, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { int ret =3D -1; =20 switch ((virDomainInputType) input->type) { case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: - if (qemuDomainCreateDevice(input->source.evdev, devPath, false) < = 0) + if (qemuDomainCreateDevice(input->source.evdev, data, false) < 0) goto cleanup; break; =20 @@ -7855,7 +7860,7 @@ qemuDomainSetupInput(virQEMUDriverConfigPtr cfg ATTRI= BUTE_UNUSED, static int qemuDomainSetupAllInputs(virQEMUDriverConfigPtr cfg, virDomainObjPtr vm, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { size_t i; =20 @@ -7863,7 +7868,7 @@ qemuDomainSetupAllInputs(virQEMUDriverConfigPtr cfg, for (i =3D 0; i < vm->def->ninputs; i++) { if (qemuDomainSetupInput(cfg, vm->def->inputs[i], - devPath) < 0) + data) < 0) return -1; } VIR_DEBUG("Setup all inputs"); @@ -7874,11 +7879,11 @@ qemuDomainSetupAllInputs(virQEMUDriverConfigPtr cfg, static int qemuDomainSetupRNG(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virDomainRNGDefPtr rng, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { switch ((virDomainRNGBackend) rng->backend) { case VIR_DOMAIN_RNG_BACKEND_RANDOM: - if (qemuDomainCreateDevice(rng->source.file, devPath, false) < 0) + if (qemuDomainCreateDevice(rng->source.file, data, false) < 0) return -1; =20 case VIR_DOMAIN_RNG_BACKEND_EGD: @@ -7894,7 +7899,7 @@ qemuDomainSetupRNG(virQEMUDriverConfigPtr cfg ATTRIBU= TE_UNUSED, static int qemuDomainSetupAllRNGs(virQEMUDriverConfigPtr cfg, virDomainObjPtr vm, - const char *devPath) + const struct qemuDomainCreateDeviceData *data) { size_t i; =20 @@ -7902,7 +7907,7 @@ qemuDomainSetupAllRNGs(virQEMUDriverConfigPtr cfg, for (i =3D 0; i < vm->def->nrngs; i++) { if (qemuDomainSetupRNG(cfg, vm->def->rngs[i], - devPath) < 0) + data) < 0) return -1; } =20 @@ -7916,6 +7921,7 @@ qemuDomainBuildNamespace(virQEMUDriverConfigPtr cfg, virSecurityManagerPtr mgr, virDomainObjPtr vm) { + struct qemuDomainCreateDeviceData data; char *devPath =3D NULL; char **devMountsPath =3D NULL, **devMountsSavePath =3D NULL; size_t ndevMountsPath =3D 0, i; @@ -7944,34 +7950,36 @@ qemuDomainBuildNamespace(virQEMUDriverConfigPtr cfg, goto cleanup; } =20 + data.path =3D devPath; + if (virProcessSetupPrivateMountNS() < 0) goto cleanup; =20 - if (qemuDomainSetupDev(cfg, mgr, vm, devPath) < 0) + if (qemuDomainSetupDev(cfg, mgr, vm, &data) < 0) goto cleanup; =20 - if (qemuDomainSetupAllDisks(cfg, vm, devPath) < 0) + if (qemuDomainSetupAllDisks(cfg, vm, &data) < 0) goto cleanup; =20 - if (qemuDomainSetupAllHostdevs(cfg, vm, devPath) < 0) + if (qemuDomainSetupAllHostdevs(cfg, vm, &data) < 0) goto cleanup; =20 - if (qemuDomainSetupAllMemories(cfg, vm, devPath) < 0) + if (qemuDomainSetupAllMemories(cfg, vm, &data) < 0) goto cleanup; =20 - if (qemuDomainSetupAllChardevs(cfg, vm, devPath) < 0) + if (qemuDomainSetupAllChardevs(cfg, vm, &data) < 0) goto cleanup; =20 - if (qemuDomainSetupTPM(cfg, vm, devPath) < 0) + if (qemuDomainSetupTPM(cfg, vm, &data) < 0) goto cleanup; =20 - if (qemuDomainSetupAllGraphics(cfg, vm, devPath) < 0) + if (qemuDomainSetupAllGraphics(cfg, vm, &data) < 0) goto cleanup; =20 - if (qemuDomainSetupAllInputs(cfg, vm, devPath) < 0) + if (qemuDomainSetupAllInputs(cfg, vm, &data) < 0) goto cleanup; =20 - if (qemuDomainSetupAllRNGs(cfg, vm, devPath) < 0) + if (qemuDomainSetupAllRNGs(cfg, vm, &data) < 0) goto cleanup; =20 /* Save some mount points because we want to share them with the host = */ --=20 2.10.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list