diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java index c0378422b2a..8f9eec023d8 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java @@ -1056,8 +1056,6 @@ public class VirtualMachineMO extends BaseMO { } int deviceNumber = getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && VmwareHelper.isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; newDisk.setControllerKey(controllerKey); newDisk.setKey(-deviceNumber); @@ -1911,8 +1909,6 @@ public class VirtualMachineMO extends BaseMO { public int getNextScsiDiskDeviceNumber() throws Exception { int scsiControllerKey = getScsiDeviceControllerKey(); int deviceNumber = getNextDeviceNumber(scsiControllerKey); - if (VmwareHelper.isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; return deviceNumber; } @@ -2381,6 +2377,7 @@ public class VirtualMachineMO extends BaseMO { List existingUnitNumbers = new ArrayList(); int deviceNumber = 0; + int ideControllerKey = getIDEDeviceControllerKey(); if (devices != null && devices.size() > 0) { for (VirtualDevice device : devices) { if (device.getControllerKey() != null && device.getControllerKey().intValue() == controllerKey) { @@ -2389,8 +2386,10 @@ public class VirtualMachineMO extends BaseMO { } } while (true) { + // Next device number should be the lowest device number on the key that is not in use and is not reserved. if (!existingUnitNumbers.contains(Integer.valueOf(deviceNumber))) { - break; + if (controllerKey != ideControllerKey && !VmwareHelper.isReservedScsiDeviceNumber(deviceNumber)) + break; } ++deviceNumber; } diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java index 5e3daa24a47..7c692100008 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java @@ -189,8 +189,6 @@ public class VmwareHelper { controllerKey = ideControllerKey; if (deviceNumber < 0) { deviceNumber = vmMo.getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; } disk.setControllerKey(controllerKey); @@ -262,8 +260,6 @@ public class VmwareHelper { disk.setControllerKey(controllerKey); if (deviceNumber < 0) { deviceNumber = vmMo.getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; } disk.setKey(-contextNumber); @@ -301,8 +297,6 @@ public class VmwareHelper { controllerKey = ideControllerKey; if (deviceNumber < 0) { deviceNumber = vmMo.getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; } disk.setControllerKey(controllerKey); @@ -355,8 +349,6 @@ public class VmwareHelper { controllerKey = ideControllerKey; if (deviceNumber < 0) { deviceNumber = vmMo.getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; } disk.setControllerKey(controllerKey);