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 be39bfb3a5a..8f05021181c 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java @@ -1018,8 +1018,6 @@ public class VirtualMachineMO extends BaseMO { } int deviceNumber = getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && VmwareHelper.isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; newDisk.setControllerKey(controllerKey); newDisk.setKey(-deviceNumber); @@ -1858,8 +1856,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; } @@ -2319,6 +2315,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) { @@ -2327,8 +2324,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 f31ffc04c40..e38e7eee996 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java @@ -188,8 +188,6 @@ public class VmwareHelper { controllerKey = ideControllerKey; if (deviceNumber < 0) { deviceNumber = vmMo.getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; } disk.setControllerKey(controllerKey); @@ -261,8 +259,6 @@ public class VmwareHelper { disk.setControllerKey(controllerKey); if (deviceNumber < 0) { deviceNumber = vmMo.getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; } disk.setKey(-contextNumber); @@ -300,8 +296,6 @@ public class VmwareHelper { controllerKey = ideControllerKey; if (deviceNumber < 0) { deviceNumber = vmMo.getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; } disk.setControllerKey(controllerKey); @@ -354,8 +348,6 @@ public class VmwareHelper { controllerKey = ideControllerKey; if (deviceNumber < 0) { deviceNumber = vmMo.getNextDeviceNumber(controllerKey); - if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber)) - deviceNumber++; } disk.setControllerKey(controllerKey);