]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Move <hostdev> SCSI path generation into qemuDomainPrepareHostdev()
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 14 Apr 2023 11:09:53 +0000 (13:09 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 25 Apr 2023 10:36:30 +0000 (12:36 +0200)
When preparing a SCSI <hostdev/> with passthrough of a host SCSI
adapter (i.e. no protocol), a virStorageSource structure is
initialized and stored inside virDomainHostdevDef. But the source
structure is filled in many places, with almost the same code.

Firstly, qemuProcessPrepareHostHostdev() and
qemuConnectDomainXMLToNativePrepareHostHostdev() are the same.

Secondly, qemuDomainPrepareHostdev() allocates the src structure,
only to let qemuProcessPrepareHostHostdev() fill src->path later.

Well, src->path can be filled at the same place where the src
structure is allocated (qemuDomainPrepareHostdev()) which renders
the other two functions needless.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
src/qemu/qemu_domain.c
src/qemu/qemu_driver.c
src/qemu/qemu_process.c
tests/qemuxml2argvmock.c
tests/qemuxml2argvtest.c

index 8dc9305b2a79fe9be7d66f1c1fefedc077adad38..d556e2186c4f5f733c6f07423a64905219be4dc7 100644 (file)
@@ -11244,7 +11244,9 @@ qemuDomainPrepareHostdevSCSI(virDomainHostdevDef *hostdev,
                              qemuDomainObjPrivate *priv)
 {
     virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
+    virDomainHostdevSubsysSCSIHost *scsihostsrc = &scsisrc->u.host;
     virStorageSource *src = NULL;
+    g_autofree char *devstr = NULL;
 
     switch ((virDomainHostdevSCSIProtocolType) scsisrc->protocol) {
     case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE:
@@ -11252,7 +11254,15 @@ qemuDomainPrepareHostdevSCSI(virDomainHostdevDef *hostdev,
         scsisrc->u.host.src = virStorageSourceNew();
         src = scsisrc->u.host.src;
 
+        if (!(devstr = virSCSIDeviceGetSgName(NULL,
+                                              scsihostsrc->adapter,
+                                              scsihostsrc->bus,
+                                              scsihostsrc->target,
+                                              scsihostsrc->unit)))
+            return -1;
+
         src->type = VIR_STORAGE_TYPE_BLOCK;
+        src->path = g_strdup_printf("/dev/%s", devstr);
 
         break;
 
index 5ee15bab7aa2696e678cebcce76ffbfe5cf05120..f74f7c206c7ec582ad4dedeb88b54d8c22b9cd40 100644 (file)
@@ -6166,38 +6166,8 @@ static char
 
 
 static int
-qemuConnectDomainXMLToNativePrepareHostHostdev(virDomainHostdevDef *hostdev)
-{
-    if (virHostdevIsSCSIDevice(hostdev)) {
-        virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
-
-        switch ((virDomainHostdevSCSIProtocolType) scsisrc->protocol) {
-        case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE: {
-            virDomainHostdevSubsysSCSIHost *scsihostsrc = &scsisrc->u.host;
-            virStorageSource *src = scsisrc->u.host.src;
-            g_autofree char *devstr = NULL;
-
-            if (!(devstr = virSCSIDeviceGetSgName(NULL,
-                                                  scsihostsrc->adapter,
-                                                  scsihostsrc->bus,
-                                                  scsihostsrc->target,
-                                                  scsihostsrc->unit)))
-                return -1;
-
-            src->path = g_strdup_printf("/dev/%s", devstr);
-            break;
-        }
-
-        case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI:
-            break;
-
-        case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_LAST:
-        default:
-            virReportEnumRangeError(virDomainHostdevSCSIProtocolType, scsisrc->protocol);
-            return -1;
-        }
-    }
-
+qemuConnectDomainXMLToNativePrepareHostHostdev(virDomainHostdevDef *hostdev G_GNUC_UNUSED)
+{
     return 0;
 }
 
index 05437c2161a93254a56b40edabb978dc9c425bfc..a2941716788991ccd48c8b55ccf737d98847c60f 100644 (file)
@@ -6510,38 +6510,8 @@ qemuProcessPrepareDomainHostdevs(virDomainObj *vm,
 
 
 int
-qemuProcessPrepareHostHostdev(virDomainHostdevDef *hostdev)
-{
-    if (virHostdevIsSCSIDevice(hostdev)) {
-        virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
-
-        switch ((virDomainHostdevSCSIProtocolType) scsisrc->protocol) {
-        case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE: {
-            virDomainHostdevSubsysSCSIHost *scsihostsrc = &scsisrc->u.host;
-            virStorageSource *src = scsisrc->u.host.src;
-            g_autofree char *devstr = NULL;
-
-            if (!(devstr = virSCSIDeviceGetSgName(NULL,
-                                                  scsihostsrc->adapter,
-                                                  scsihostsrc->bus,
-                                                  scsihostsrc->target,
-                                                  scsihostsrc->unit)))
-                return -1;
-
-            src->path = g_strdup_printf("/dev/%s", devstr);
-            break;
-        }
-
-        case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI:
-            break;
-
-        case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_LAST:
-        default:
-            virReportEnumRangeError(virDomainHostdevSCSIProtocolType, scsisrc->protocol);
-            return -1;
-        }
-    }
-
+qemuProcessPrepareHostHostdev(virDomainHostdevDef *hostdev G_GNUC_UNUSED)
+{
     return 0;
 }
 
index f566ec539afb38fe63bed530500de3cb69a2ab98..400dd5c020309c5738306456f138e90237806edd 100644 (file)
@@ -82,6 +82,16 @@ virSCSIVHostOpenVhostSCSI(int *vhostfd)
     return 0;
 }
 
+char *
+virSCSIDeviceGetSgName(const char *sysfs_prefix G_GNUC_UNUSED,
+                       const char *adapter G_GNUC_UNUSED,
+                       unsigned int bus G_GNUC_UNUSED,
+                       unsigned int target G_GNUC_UNUSED,
+                       unsigned long long unit G_GNUC_UNUSED)
+{
+    return g_strdup_printf("sg0");
+}
+
 int
 virNetDevTapCreate(char **ifname,
                    const char *tunpath G_GNUC_UNUSED,
index 276b1ac68b0fbdb4c7af40a5282a92db3e58bd12..3c75a2dce2ea96329162affb18020f4226d100a4 100644 (file)
@@ -404,28 +404,6 @@ testCompareXMLToArgvCreateArgs(virQEMUDriver *drv,
             disk->src->hostcdrom = true;
     }
 
-    for (i = 0; i < vm->def->nhostdevs; i++) {
-        virDomainHostdevDef *hostdev = vm->def->hostdevs[i];
-
-        if (virHostdevIsSCSIDevice(hostdev)) {
-            virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
-
-            switch ((virDomainHostdevSCSIProtocolType) scsisrc->protocol) {
-            case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE:
-                scsisrc->u.host.src->path = g_strdup("/dev/sg0");
-                break;
-
-            case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI:
-                break;
-
-            case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_LAST:
-            default:
-                virReportEnumRangeError(virDomainHostdevSCSIProtocolType, scsisrc->protocol);
-                return NULL;
-            }
-        }
-    }
-
     if (vm->def->vsock) {
         virDomainVsockDef *vsock = vm->def->vsock;
         qemuDomainVsockPrivate *vsockPriv =