[libvirt] [PATCH 22/25] qemu: Move qemuSetUnprivSGIO into qemu_conf.c

Osier Yang jyang at redhat.com
Fri May 3 18:07:41 UTC 2013


unpriv_sgio setting is tight with the shared device helpers, let's
put them together in qemu_conf.c
---
 src/qemu/qemu_conf.c    | 36 ++++++++++++++++++++++++++++++++++++
 src/qemu/qemu_conf.h    |  2 ++
 src/qemu/qemu_process.c | 38 --------------------------------------
 src/qemu/qemu_process.h |  1 -
 4 files changed, 38 insertions(+), 39 deletions(-)

diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 67b6d82..b7dea57 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -1308,6 +1308,42 @@ cleanup:
     return ret;
 }
 
+int
+qemuSetUnprivSGIO(virDomainDiskDefPtr disk)
+{
+    char *sysfs_path = NULL;
+    int val = -1;
+    int ret = 0;
+
+    /* "sgio" is only valid for block disk; cdrom
+     * and floopy disk can have empty source.
+     */
+    if (!disk->src ||
+        disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
+        (disk->type != VIR_DOMAIN_DISK_TYPE_BLOCK &&
+         !(disk->type == VIR_DOMAIN_DISK_TYPE_VOLUME &&
+           disk->srcpool &&
+           disk->srcpool->voltype == VIR_STORAGE_VOL_BLOCK)))
+        return 0;
+
+    sysfs_path = virGetUnprivSGIOSysfsPath(disk->src, NULL);
+    if (sysfs_path == NULL)
+        return -1;
+
+    /* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0.  */
+    val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
+
+    /* Do not do anything if unpriv_sgio is not supported by the kernel and the
+     * whitelist is enabled.  But if requesting unfiltered access, always call
+     * virSetDeviceUnprivSGIO, to report an error for unsupported unpriv_sgio.
+     */
+    if ((virFileExists(sysfs_path) || val == 1) &&
+        virSetDeviceUnprivSGIO(disk->src, NULL, val) < 0)
+        ret = -1;
+
+    VIR_FREE(sysfs_path);
+    return ret;
+}
 
 int qemuDriverAllocateID(virQEMUDriverPtr driver)
 {
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index c004f7f..5e76739 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -299,6 +299,8 @@ int qemuRemoveSharedDevice(virQEMUDriverPtr driver,
                            const char *name)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 
+int qemuSetUnprivSGIO(virDomainDiskDefPtr disk);
+
 int qemuDriverAllocateID(virQEMUDriverPtr driver);
 virDomainXMLOptionPtr virQEMUDriverCreateXMLConf(virQEMUDriverPtr driver);
 
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 28427af..eb42df1 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3203,44 +3203,6 @@ qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver)
     virDomainObjListForEach(driver->domains, qemuProcessReconnectHelper, &data);
 }
 
-int
-qemuSetUnprivSGIO(virDomainDiskDefPtr disk)
-{
-    char *sysfs_path = NULL;
-    int val = -1;
-    int ret = 0;
-
-    /* "sgio" is only valid for block disk; cdrom
-     * and floopy disk can have empty source.
-     */
-    if (!disk->src ||
-        disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
-        (disk->type != VIR_DOMAIN_DISK_TYPE_BLOCK &&
-         !(disk->type == VIR_DOMAIN_DISK_TYPE_VOLUME &&
-           disk->srcpool &&
-           disk->srcpool->voltype == VIR_STORAGE_VOL_BLOCK)))
-        return 0;
-
-    sysfs_path = virGetUnprivSGIOSysfsPath(disk->src, NULL);
-    if (sysfs_path == NULL)
-        return -1;
-
-    /* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0.  */
-    val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
-
-    /* Do not do anything if unpriv_sgio is not supported by the kernel and the
-     * whitelist is enabled.  But if requesting unfiltered access, always call
-     * virSetDeviceUnprivSGIO, to report an error for unsupported unpriv_sgio.
-     */
-    if ((virFileExists(sysfs_path) || val == 1) &&
-        virSetDeviceUnprivSGIO(disk->src, NULL, val) < 0)
-        ret = -1;
-
-    VIR_FREE(sysfs_path);
-    return ret;
-}
-
-
 static int
 qemuProcessSPICEAllocatePorts(virQEMUDriverPtr driver,
                               virQEMUDriverConfigPtr cfg,
diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
index cb1a8bf..d4768fc 100644
--- a/src/qemu/qemu_process.h
+++ b/src/qemu/qemu_process.h
@@ -97,6 +97,5 @@ bool qemuProcessAutoDestroyActive(virQEMUDriverPtr driver,
                                   virDomainObjPtr vm);
 virBitmapPtr qemuPrepareCpumap(virQEMUDriverPtr driver,
                                virBitmapPtr nodemask);
-int qemuSetUnprivSGIO(virDomainDiskDefPtr disk);
 
 #endif /* __QEMU_PROCESS_H__ */
-- 
1.8.1.4




More information about the libvir-list mailing list