virt-manager/virtinst-xenbus-disk-index-fix.patch
Charles Arnold 59b2222711 - jsc#SLE-17764 - Dev: Support Oracle Linux as a guest VM. See also
bsc#1192238 [Build58.2][KVM] The latest supported OracleLinux as
  guest versions are not included anywhere
  add-missing-oracle-linux-versions.patch

- bsc#1188223 - L3: Sles12sp3 DomU won't boot after adding phys
  hard drive
  virtinst-xenbus-disk-index-fix.patch

- jsc#SLE-21540 Dev: Prefer UEFI when creating new virtual machines.
  Add a preferences option to allow users to default to UEFI when
  creating a new VM. Libvirt decides which firmware file to use.
  virtman-add-firmware-preferences.patch
- Renamed patch virtinst-modify-gui-defaults.patch to
  virtman-modify-gui-defaults.patch

OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=551
2021-11-23 22:41:31 +00:00

51 lines
2.1 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-3.2.0/virtinst/devices/disk.py
===================================================================
--- virt-manager-3.2.0.orig/virtinst/devices/disk.py
+++ virt-manager-3.2.0/virtinst/devices/disk.py
@@ -896,6 +896,17 @@ class DeviceDisk(Device):
:returns: generated target
"""
prefix, maxnode = self.get_target_prefix()
+ 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()
@@ -903,11 +914,18 @@ class DeviceDisk(Device):
first_found = None
for i in range(maxnode):
- 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
if not skip_targets:
+ if first_found:
+ return first_found
return gen_t
elif not first_found:
first_found = gen_t