floppy0.present defaults to true. Therefore, it needs to be
explicitly set to false when the XML config doesn't specify the
corresponding floppy device.
---

v2:
- This issue affects ESX too, the assumed default was wrong in
  general
- Explicitly disable unused floppy devices independent of the
  product version

 src/esx/esx_vmx.c |   19 +++++++++++++++----
 src/esx/esx_vmx.h |    2 +-
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/esx/esx_vmx.c b/src/esx/esx_vmx.c
index d5d9ff0..12cd005 100644
--- a/src/esx/esx_vmx.c
+++ b/src/esx/esx_vmx.c
@@ -215,7 +215,7 @@ def->disks[0]...
 
 ## disks: floppy from .flp image 
###############################################
 
-                                        floppy0.present = "true"               
 # defaults to "false"
+                                        floppy0.present = "true"               
 # defaults to "true"
                                         floppy0.startConnected = "true"        
 # defaults to "true"
                                         floppy0.clientDevice = "false"         
 # defaults to "false"
 
@@ -235,7 +235,7 @@ def->disks[0]...
 
 ## disks: floppy from host device 
##############################################
 
-                                        floppy0.present = "true"               
 # defaults to "false"
+                                        floppy0.present = "true"               
 # defaults to "true"
                                         floppy0.startConnected = "true"        
 # defaults to "true"
                                         floppy0.clientDevice = "false"         
 # defaults to "false"
 
@@ -2320,6 +2320,7 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, 
virDomainDefPtr def,
     virBuffer buffer = VIR_BUFFER_INITIALIZER;
     bool scsi_present[4] = { false, false, false, false };
     int scsi_virtualDev[4] = { -1, -1, -1, -1 };
+    bool floppy_present[2] = { false, false };
 
     if (ctx->formatFileName == NULL) {
         ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -2525,7 +2526,8 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, 
virDomainDefPtr def,
             break;
 
           case VIR_DOMAIN_DISK_DEVICE_FLOPPY:
-            if (esxVMX_FormatFloppy(ctx, def->disks[i], &buffer) < 0) {
+            if (esxVMX_FormatFloppy(ctx, def->disks[i], &buffer,
+                                    floppy_present) < 0) {
                 goto failure;
             }
 
@@ -2539,6 +2541,13 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr 
caps, virDomainDefPtr def,
         }
     }
 
+    for (i = 0; i < 2; ++i) {
+        /* floppy[0..1].present defaults to true, disable it explicitly */
+        if (! floppy_present[i]) {
+            virBufferVSprintf(&buffer, "floppy%d.present = \"false\"\n", i);
+        }
+    }
+
     /* def:fss */
     /* FIXME */
 
@@ -2810,7 +2819,7 @@ esxVMX_FormatCDROM(esxVMX_Context *ctx, 
virDomainDiskDefPtr def,
 
 int
 esxVMX_FormatFloppy(esxVMX_Context *ctx, virDomainDiskDefPtr def,
-                    virBufferPtr buffer)
+                    virBufferPtr buffer, bool floppy_present[2])
 {
     int unit;
     char *fileName = NULL;
@@ -2824,6 +2833,8 @@ esxVMX_FormatFloppy(esxVMX_Context *ctx, 
virDomainDiskDefPtr def,
         return -1;
     }
 
+    floppy_present[unit] = true;
+
     virBufferVSprintf(buffer, "floppy%d.present = \"true\"\n", unit);
 
     if (def->type == VIR_DOMAIN_DISK_TYPE_FILE) {
diff --git a/src/esx/esx_vmx.h b/src/esx/esx_vmx.h
index a77264a..12fc5af 100644
--- a/src/esx/esx_vmx.h
+++ b/src/esx/esx_vmx.h
@@ -137,7 +137,7 @@ esxVMX_FormatCDROM(esxVMX_Context *ctx, virDomainDiskDefPtr 
def,
 
 int
 esxVMX_FormatFloppy(esxVMX_Context *ctx, virDomainDiskDefPtr def,
-                    virBufferPtr buffer);
+                    virBufferPtr buffer, bool floppy_present[2]);
 
 int
 esxVMX_FormatEthernet(virDomainNetDefPtr def, int controller,
-- 
1.7.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to