From 36aa37cc985efec4da1767daeac5baf1cb807efb Mon Sep 17 00:00:00 2001 From: Charles Arnold Date: Fri, 20 Jan 2023 19:48:49 +0000 Subject: [PATCH 1/3] - bsc#1207070 - libvirt fails to start the guest once the new shared disk is added, with the error, "cannot get 'write' permission without 'resize' image size is not a multiple of request alignment" virtman-fix-shared-disk-request-alignment-error.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=588 --- virt-manager.changes | 9 ++++ virt-manager.spec | 3 +- ...-shared-disk-request-alignment-error.patch | 41 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 virtman-fix-shared-disk-request-alignment-error.patch diff --git a/virt-manager.changes b/virt-manager.changes index cfc050f4..b65ff7d9 100644 --- a/virt-manager.changes +++ b/virt-manager.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Fri Jan 20 11:20:21 MST 2023 - carnold@suse.com + +- bsc#1207070 - libvirt fails to start the guest once the new + shared disk is added, with the error, "cannot get 'write' + permission without 'resize' image size is not a multiple of + request alignment" + virtman-fix-shared-disk-request-alignment-error.patch + ------------------------------------------------------------------- Mon Nov 28 12:28:44 MST 2022 - carnold@suse.com diff --git a/virt-manager.spec b/virt-manager.spec index 7f1820f5..c1982268 100644 --- a/virt-manager.spec +++ b/virt-manager.spec @@ -1,7 +1,7 @@ # # spec file # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -100,6 +100,7 @@ Patch181: virtinst-add-slem-detection-support.patch Patch182: virtinst-add-sle-hpc-support.patch Patch183: virtinst-add-oracle-linux-support.patch Patch184: virtinst-windows-server-detection.patch +Patch185: virtman-fix-shared-disk-request-alignment-error.patch BuildArch: noarch diff --git a/virtman-fix-shared-disk-request-alignment-error.patch b/virtman-fix-shared-disk-request-alignment-error.patch new file mode 100644 index 00000000..a31d3b8b --- /dev/null +++ b/virtman-fix-shared-disk-request-alignment-error.patch @@ -0,0 +1,41 @@ +References: bsc#1207070 + +When creating a raw disk that is marked as 'shared', libvirt +will round the allocation amount higher to a 4k boundary. +This results in the qemu error shown below passed back to libvirt. +Note that only raw disks can be marked shared (not qcow2) +but the rounding should not harm qcow2 disks. + +libvirt.libvirtError: internal error: qemu unexpectedly closed the monitor: 2023-01-19T21:40:28.507063Z qemu-system-x86_64: +-device {"driver":"virtio-blk-pci","bus":"pci.8","addr":"0x0","share-rw":true,"drive":"libvirt-1-format","id":"virtio-disk1","write-cache":"on"}: +Cannot get 'write' permission without 'resize': Image size is not a multiple of request alignment + + +--- virt-manager-4.1.0/virtManager/createvol.py.orig 2023-01-20 10:58:40.230657960 -0700 ++++ virt-manager-4.1.0/virtManager/createvol.py 2023-01-20 11:03:54.722665454 -0700 +@@ -246,7 +246,13 @@ class vmmCreateVolume(vmmGObjectUI): + vol = self._make_stub_vol() + vol.name = volname + vol.capacity = (cap * 1024 * 1024 * 1024) ++ if vol.capacity: ++ # If a raw disk is marked 'shared', libvirt requires this ++ vol.capacity = 4096 * round(vol.capacity/4096) + vol.allocation = (alloc * 1024 * 1024 * 1024) ++ if vol.allocation: ++ vol.allocation = 4096 * round(vol.allocation/4096) ++ + if backing: + vol.backing_store = backing + if fmt: +--- virt-manager-4.1.0/virtinst/devices/disk.py.orig 2023-01-20 10:58:28.578657682 -0700 ++++ virt-manager-4.1.0/virtinst/devices/disk.py 2023-01-20 11:05:00.706667026 -0700 +@@ -361,6 +361,9 @@ class DeviceDisk(Device): + volname, poolobj.name()) + + cap = (size * 1024 * 1024 * 1024) ++ if cap: ++ # If a raw disk is marked 'shared', libvirt requires this ++ cap = 4096 * round(cap/4096) + if sparse: + alloc = 0 + else: From 0aabe59115a34ecba8a55f575228b10b49030e79 Mon Sep 17 00:00:00 2001 From: Charles Arnold Date: Fri, 20 Jan 2023 21:38:29 +0000 Subject: [PATCH 2/3] Make sure we round up for the disk. OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=589 --- ...-shared-disk-request-alignment-error.patch | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/virtman-fix-shared-disk-request-alignment-error.patch b/virtman-fix-shared-disk-request-alignment-error.patch index a31d3b8b..0b53c51c 100644 --- a/virtman-fix-shared-disk-request-alignment-error.patch +++ b/virtman-fix-shared-disk-request-alignment-error.patch @@ -11,31 +11,35 @@ libvirt.libvirtError: internal error: qemu unexpectedly closed the monitor: 2023 Cannot get 'write' permission without 'resize': Image size is not a multiple of request alignment ---- virt-manager-4.1.0/virtManager/createvol.py.orig 2023-01-20 10:58:40.230657960 -0700 -+++ virt-manager-4.1.0/virtManager/createvol.py 2023-01-20 11:03:54.722665454 -0700 +Index: virt-manager-4.1.0/virtManager/createvol.py +=================================================================== +--- virt-manager-4.1.0.orig/virtManager/createvol.py ++++ virt-manager-4.1.0/virtManager/createvol.py @@ -246,7 +246,13 @@ class vmmCreateVolume(vmmGObjectUI): vol = self._make_stub_vol() vol.name = volname vol.capacity = (cap * 1024 * 1024 * 1024) + if vol.capacity: -+ # If a raw disk is marked 'shared', libvirt requires this -+ vol.capacity = 4096 * round(vol.capacity/4096) ++ # If a raw disk is marked 'shared', round up for libvirt ++ vol.capacity -= vol.capacity % -4096 vol.allocation = (alloc * 1024 * 1024 * 1024) + if vol.allocation: -+ vol.allocation = 4096 * round(vol.allocation/4096) ++ vol.allocation -= vol.allocation % -4096 + if backing: vol.backing_store = backing if fmt: ---- virt-manager-4.1.0/virtinst/devices/disk.py.orig 2023-01-20 10:58:28.578657682 -0700 -+++ virt-manager-4.1.0/virtinst/devices/disk.py 2023-01-20 11:05:00.706667026 -0700 +Index: virt-manager-4.1.0/virtinst/devices/disk.py +=================================================================== +--- virt-manager-4.1.0.orig/virtinst/devices/disk.py ++++ virt-manager-4.1.0/virtinst/devices/disk.py @@ -361,6 +361,9 @@ class DeviceDisk(Device): volname, poolobj.name()) cap = (size * 1024 * 1024 * 1024) + if cap: -+ # If a raw disk is marked 'shared', libvirt requires this -+ cap = 4096 * round(cap/4096) ++ # If a raw disk is marked 'shared', round up for libvirt ++ cap -= cap % -4096 if sparse: alloc = 0 else: From 462bcf1fc77c47cccea266a5be0d2fa5425374ad Mon Sep 17 00:00:00 2001 From: Charles Arnold Date: Fri, 20 Jan 2023 21:43:34 +0000 Subject: [PATCH 3/3] - Replace downstream patch with upstream version (bsc#1203252) 67832d30-addhardware-Fix-backtrace-when-controller-index-is-None.patch Drop virtman-fix-uninitialized-controller-index.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=590 --- ...ktrace-when-controller-index-is-None.patch | 26 +++++++++++++++++++ virt-manager.changes | 7 +++++ virt-manager.spec | 2 +- ...n-fix-uninitialized-controller-index.patch | 13 ---------- 4 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 67832d30-addhardware-Fix-backtrace-when-controller-index-is-None.patch delete mode 100644 virtman-fix-uninitialized-controller-index.patch diff --git a/67832d30-addhardware-Fix-backtrace-when-controller-index-is-None.patch b/67832d30-addhardware-Fix-backtrace-when-controller-index-is-None.patch new file mode 100644 index 00000000..d21f5982 --- /dev/null +++ b/67832d30-addhardware-Fix-backtrace-when-controller-index-is-None.patch @@ -0,0 +1,26 @@ +Subject: addhardware: Fix backtrace when controller.index is None +From: Cole Robinson crobinso@redhat.com Tue Dec 13 13:49:35 2022 -0500 +Date: Tue Dec 13 13:49:35 2022 -0500: +Git: 67832d3097cd6451833c30452d6991896e05933c + +When creating a new VM, in the customize wizard we can't depend on +index= value being set (virtinst doesn't do it for example). + +For example, this causes a backtrace when adding two virtio-scsi +controllers via the Customize wizard, or adding an extra +virtio-scsi controller to an aarch64 CDROM install. + +Reported-by: Charles Arnold +Signed-off-by: Cole Robinson + +--- a/virtManager/addhardware.py ++++ b/virtManager/addhardware.py +@@ -1560,7 +1560,7 @@ class vmmAddHardware(vmmGObjectUI): + controller_num = [x for x in controllers if + (x.type == controller_type)] + if len(controller_num) > 0: +- index_new = max([x.index for x in controller_num]) + 1 ++ index_new = max(int(x.index or 0) for x in controller_num) + 1 + dev.index = index_new + + dev.type = controller_type diff --git a/virt-manager.changes b/virt-manager.changes index b65ff7d9..5c06916e 100644 --- a/virt-manager.changes +++ b/virt-manager.changes @@ -7,6 +7,13 @@ Fri Jan 20 11:20:21 MST 2023 - carnold@suse.com request alignment" virtman-fix-shared-disk-request-alignment-error.patch +------------------------------------------------------------------- +Thu Jan 5 10:45:46 MST 2023 - carnold@suse.com + +- Replace downstream patch with upstream version (bsc#1203252) + 67832d30-addhardware-Fix-backtrace-when-controller-index-is-None.patch + Drop virtman-fix-uninitialized-controller-index.patch + ------------------------------------------------------------------- Mon Nov 28 12:28:44 MST 2022 - carnold@suse.com diff --git a/virt-manager.spec b/virt-manager.spec index c1982268..504c283f 100644 --- a/virt-manager.spec +++ b/virt-manager.spec @@ -51,6 +51,7 @@ Patch7: c22a876e-tests-Add-a-compat-check-for-linux2020-in-amd-sev-test- Patch8: fbdf0516-cli-cpu-Add-maxphysaddr.mode-bits-options.patch Patch9: b0d05167-cloner-Sync-uuid-and-sysinfo-system-uuid.patch Patch10: 999ccb85-virt-install-unattended-and-cloud-init-conflict.patch +Patch11: 67832d30-addhardware-Fix-backtrace-when-controller-index-is-None.patch # SUSE Only Patch70: virtman-desktop.patch Patch71: virtman-kvm.patch @@ -84,7 +85,6 @@ Patch157: virtman-fix-restore-vm-menu-selection.patch Patch158: virtman-disallow-adding-floppy-disk.patch Patch159: virtman-register-delete-event-for-details-dialog.patch Patch160: virtman-revert-use-of-AyatanaAppIndicator3.patch -Patch161: virtman-fix-uninitialized-controller-index.patch Patch170: virtinst-xen-drive-type.patch Patch171: virtinst-xenbus-disk-index-fix.patch Patch172: virtinst-refresh_before_fetch_pool.patch diff --git a/virtman-fix-uninitialized-controller-index.patch b/virtman-fix-uninitialized-controller-index.patch deleted file mode 100644 index ddb0292d..00000000 --- a/virtman-fix-uninitialized-controller-index.patch +++ /dev/null @@ -1,13 +0,0 @@ -References: bsc#1203252 - ---- virt-manager-4.1.0/virtManager/addhardware.py.orig 2022-11-15 07:49:08.318413181 -0700 -+++ virt-manager-4.1.0/virtManager/addhardware.py 2022-11-15 07:49:48.126414130 -0700 -@@ -1570,6 +1570,8 @@ class vmmAddHardware(vmmGObjectUI): - if len(controller_num) > 0: - index_new = max([x.index for x in controller_num]) + 1 - dev.index = index_new -+ else: -+ dev.index = 0 - - dev.type = controller_type -