Later patch will prohibit restoring it the disk is being shared
by other domain(s). Note that this only cares about the non-shared
disk. Later patch will change the codes to honor the orig_cdbfilter
of sharedDisks entry.
---
src/qemu/qemu_driver.c | 24 ++++++++++++++++++++----
1 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index a16e336..b394eb9 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6188,10 +6188,26 @@ qemuDomainDetachDeviceDiskLive(virQEMUDriverPtr driver,
break;
}
- if (ret == 0 && disk->shared) {
- if (qemuRemoveSharedDisk(driver->sharedDisks, disk->src) < 0)
- VIR_WARN("Failed to remove disk '%s' from shared disk
table",
- disk->src);
+ if (ret == 0) {
+ /* Restore the disk's unpriv_sgio */
+ if (disk->cdbfilter) {
+ int val;
+
+ if (disk->orig_cdbfilter == VIR_DOMAIN_DISK_CDB_FILTER_YES)
+ val = 0;
+ else
+ val = 1;
+
+ if (virSetDeviceUnprivSGIO(disk->src, val) < 0)
+ VIR_DEBUG("Failed to restore unpriv_sgio for disk
'%s'",
+ disk->src);
+ }
+
+ if (disk->shared) {
+ if (qemuRemoveSharedDisk(driver->sharedDisks, disk->src) < 0)
+ VIR_WARN("Failed to remove disk '%s' from shared disk
table",
+ disk->src);
+ }
}
return ret;
--
1.7.7.6