diff --git a/ChangeLog b/ChangeLog index 6570f8886e..32cdeb9564 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,9 @@ -Wed Sep 3 14:51:03 CEST 2008 Daniel Veillard +Wed Sep 3 09:58:00 EST 2008 Cole Robinson - * src/qemu_driver.c: patch from Cole Robinson to avoid a segfault - on KVM CD eject + * src/domain_conf.c: fix disk device ordering when parsing domain + xml. check for disk target duplicates as well. + * tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr: fix for disk ordering + * tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr: fix for disk ordering Wed Sep 3 14:37:06 CEST 2008 Daniel Veillard diff --git a/src/domain_conf.c b/src/domain_conf.c index 6b2347400b..3c61039350 100644 --- a/src/domain_conf.c +++ b/src/domain_conf.c @@ -1949,19 +1949,27 @@ static virDomainDefPtr virDomainDefParseXML(virConnectPtr conn, goto error; /* Maintain list in sorted order according to target device name */ - if (def->disks == NULL) { - disk->next = def->disks; - def->disks = disk; - } else { - virDomainDiskDefPtr ptr = def->disks; - while (ptr) { - if (!ptr->next || virDomainDiskCompare(disk, ptr->next) < 0) { - disk->next = ptr->next; - ptr->next = disk; - break; - } - ptr = ptr->next; + virDomainDiskDefPtr ptr = def->disks; + virDomainDiskDefPtr *prev = &(def->disks); + while (ptr) { + if (STREQ(disk->dst, ptr->dst)) { + virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, + _("duplicate disk target '%s'"), + disk->dst); + goto error; } + if (virDomainDiskCompare(disk, ptr) < 0) { + disk->next = ptr; + *prev = disk; + break; + } + prev = &(ptr->next); + ptr = ptr->next; + } + + if (!ptr) { + disk->next = ptr; + *prev = disk; } } VIR_FREE(nodes); diff --git a/tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr index b02c7c183d..157ce04da4 100644 --- a/tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr +++ b/tests/xml2sexprdata/xml2sexpr-fv-v2.sexpr @@ -1 +1 @@ -(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd2-75cd-aca5-1776-9660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(vcpus 1)(boot c)(acpi 1)(usb 1)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(vnc 1)(vncunused 0)(vncdisplay 17)(keymap 'ja')))(device (vbd (dev 'hdc:cdrom')(uname 'file:/root/boot.iso')(mode 'r')))(device (vbd (dev 'hda:disk')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu)))) \ No newline at end of file +(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd2-75cd-aca5-1776-9660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(vcpus 1)(boot c)(acpi 1)(usb 1)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(vnc 1)(vncunused 0)(vncdisplay 17)(keymap 'ja')))(device (vbd (dev 'hda:disk')(uname 'file:/root/foo.img')(mode 'w')))(device (vbd (dev 'hdc:cdrom')(uname 'file:/root/boot.iso')(mode 'r')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu)))) \ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr index 3c40f20560..433ec7ad9b 100644 --- a/tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr +++ b/tests/xml2sexprdata/xml2sexpr-fv-vncunused.sexpr @@ -1 +1 @@ -(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd2-75cd-aca5-1776-9660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(vcpus 1)(boot c)(acpi 1)(usb 1)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(vnc 1)(vncunused 1)(keymap 'ja')))(device (vbd (dev 'hdc:cdrom')(uname 'file:/root/boot.iso')(mode 'r')))(device (vbd (dev 'hda:disk')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu)))) \ No newline at end of file +(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd2-75cd-aca5-1776-9660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(vcpus 1)(boot c)(acpi 1)(usb 1)(parallel none)(serial none)(device_model '/usr/lib64/xen/bin/qemu-dm')(vnc 1)(vncunused 1)(keymap 'ja')))(device (vbd (dev 'hda:disk')(uname 'file:/root/foo.img')(mode 'w')))(device (vbd (dev 'hdc:cdrom')(uname 'file:/root/boot.iso')(mode 'r')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu)))) \ No newline at end of file