virt-manager/virtinst-xenbus-disk-index-fix.patch
Charles Arnold 4f703846c7 - Update to virt-manager 1.4.3 (bsc#1027942)
virt-manager-1.4.3.tar.bz2
  * Improve install of debian/ubuntu non-x86 media (Viktor Mihajlovski, Andrew Wong)
  * New virt-install –graphics listen.* (Pavel Hrdina)
  * New virt-install –disk snapshot_policy= (Pavel Hrdina)
  * New virt-install –cpu cache.* (Lin Ma)
  * Several bug fixes
- Dropped the following patch contained in new tarball
  e902fa55-force-binary-mode-with-FTP-servers.patch
  virt-manager-1.4.2.tar.bz2

OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=369
2017-09-20 14:28:03 +00:00

45 lines
1.9 KiB
Diff

Reference: bnc#872789
This is an indexing problem created by virt-manager. It knows not
to add two IDE disks of the same name (eg, 'hda' twice) or two Xen
disks of the same name (eg, 'xvda' twice) but with the different bus
types (ide vs xen) it added xvda with hda. These disks were then
passed to qemu where it error'ed out with the disks having the same
index (in this case both are 0).
Index: virt-manager-1.4.3/virtinst/devicedisk.py
===================================================================
--- virt-manager-1.4.3.orig/virtinst/devicedisk.py
+++ virt-manager-1.4.3/virtinst/devicedisk.py
@@ -1004,6 +1004,17 @@ class VirtualDisk(VirtualDevice):
@rtype C{str}
"""
prefix, maxnode = self.get_target_prefix(skip_targets)
+ postfix_targets = []
+ if self.conn.is_xen():
+ prefixes = [ "hd", "xvd", "vd", "sd", "fd" ]
+ for x in skip_targets:
+ if x is None:
+ continue
+ for p in prefixes:
+ found = x.split(p,1)
+ if found and len(found) == 2:
+ postfix_targets.append(found[1])
+ break
skip_targets = [t for t in skip_targets if t and t.startswith(prefix)]
skip_targets.sort()
@@ -1017,7 +1028,12 @@ class VirtualDisk(VirtualDevice):
ran = range(pref_ctrl * 7, (pref_ctrl + 1) * 7)
for i in ran:
- gen_t = prefix + self.num_to_target(i + 1)
+ postfix = self.num_to_target(i + 1)
+ gen_t = prefix + postfix
+ if self.conn.is_xen() and postfix in postfix_targets:
+ if gen_t in skip_targets:
+ skip_targets.remove(gen_t)
+ continue
if gen_t in skip_targets:
skip_targets.remove(gen_t)
continue