]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Move qemuSetUnprivSGIO into qemu_conf.c
authorOsier Yang <jyang@redhat.com>
Fri, 3 May 2013 18:07:41 +0000 (02:07 +0800)
committerOsier Yang <jyang@redhat.com>
Thu, 16 May 2013 16:51:58 +0000 (00:51 +0800)
unpriv_sgio setting is tight with the shared device helpers, let's
put them together in qemu_conf.c

src/qemu/qemu_conf.c
src/qemu/qemu_conf.h
src/qemu/qemu_process.c
src/qemu/qemu_process.h

index 44901384bc786c3c3d96b1d27244b9b1d30466f7..21685e1ca0f6f19b1da7381869ff3fd5d4372107 100644 (file)
@@ -1340,6 +1340,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)
 {
index 4568e6cc9fef82074b14f16f0b08842dc5f8c03b..25350ddec5a499c61a9c9fc5df34d064208b0cee 100644 (file)
@@ -305,6 +305,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);
 
index f9229b6a3d6f39d8aaa731bad0156fbdac6b6f32..c25769da59acde245bbfa71b6bda8e02a689ad14 100644 (file)
@@ -3203,43 +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
 qemuProcessVNCAllocatePorts(virQEMUDriverPtr driver,
                             virDomainGraphicsDefPtr graphics)
index cb1a8bf8ce9a1f9e6ef73e33f13182af81957b60..d4768fcdf4c7b2e02f0fba53256ac9a9a3ac88e6 100644 (file)
@@ -97,6 +97,5 @@ bool qemuProcessAutoDestroyActive(virQEMUDriverPtr driver,
                                   virDomainObjPtr vm);
 virBitmapPtr qemuPrepareCpumap(virQEMUDriverPtr driver,
                                virBitmapPtr nodemask);
-int qemuSetUnprivSGIO(virDomainDiskDefPtr disk);
 
 #endif /* __QEMU_PROCESS_H__ */