From d691daf980b5c86448c48ea1d1eeaf52e81db823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Mon, 20 Oct 2014 16:38:19 +0200 Subject: [PATCH] Feature #3158: Force CONTEXT to be the last CDROM --- src/vm/VirtualMachine.cc | 67 +++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/src/vm/VirtualMachine.cc b/src/vm/VirtualMachine.cc index 25883bbe3f..25286f3e01 100644 --- a/src/vm/VirtualMachine.cc +++ b/src/vm/VirtualMachine.cc @@ -1683,9 +1683,6 @@ int VirtualMachine::get_disk_images(string& error_str) vector::iterator it; - // ------------------------------------------------------------------------- - // The context is the first of the cdroms - // ------------------------------------------------------------------------- num_context = user_obj_template->remove("CONTEXT", context_disks); num_disks = user_obj_template->remove("DISK", disks); @@ -1704,35 +1701,6 @@ int VirtualMachine::get_disk_images(string& error_str) goto error_max_disks; } - if ( num_context > 0 ) - { - disk = dynamic_cast(context_disks[0]); - - if ( disk != 0 ) - { - target = disk->vector_value("TARGET"); - - if ( !target.empty() ) - { - used_targets.insert(target); - } - else - { - dev_prefix = disk->vector_value("DEV_PREFIX"); - - if ( dev_prefix.empty() ) - { - dev_prefix = ipool->default_cdrom_dev_prefix(); - } - - cdrom_disks.push(make_pair(dev_prefix, disk)); - } - - // Disk IDs are 0..num-1, context disk is is num - disk->replace("DISK_ID", num_disks); - } - } - // ------------------------------------------------------------------------- // Set DISK attributes & Targets // ------------------------------------------------------------------------- @@ -1805,6 +1773,41 @@ int VirtualMachine::get_disk_images(string& error_str) } } + // ------------------------------------------------------------------------- + // The context is the last of the cdroms + // ------------------------------------------------------------------------- + if ( num_context > 0 ) + { + disk = dynamic_cast(context_disks[0]); + + if ( disk != 0 ) + { + target = disk->vector_value("TARGET"); + + if ( !target.empty() ) + { + if ( used_targets.insert(target).second == false ) + { + goto error_duplicated_target; + } + } + else + { + dev_prefix = disk->vector_value("DEV_PREFIX"); + + if ( dev_prefix.empty() ) + { + dev_prefix = ipool->default_cdrom_dev_prefix(); + } + + cdrom_disks.push(make_pair(dev_prefix, disk)); + } + + // Disk IDs are 0..num-1, context disk is is num + disk->replace("DISK_ID", num_disks); + } + } + assign_disk_targets(os_disk, used_targets); assign_disk_targets(cdrom_disks, used_targets); assign_disk_targets(datablock_disks, used_targets);