From c9394359b0596e7c3973d7bb19f76d4b41f9a5c1 Mon Sep 17 00:00:00 2001 From: Miroslav Rezanina Date: Fri, 2 Dec 2022 05:04:56 -0500 Subject: [PATCH] * Fri Dec 02 2022 Miroslav Rezanina - 7.1.0-6 - kvm-block-move-bdrv_qiov_is_aligned-to-file-posix.patch [bz#2143170] - kvm-block-use-the-request-length-for-iov-alignment.patch [bz#2143170] - Resolves: bz#2143170 (The installation can not start when install files (iso) locate on a 4k disk) --- ...e-bdrv_qiov_is_aligned-to-file-posix.patch | 107 ++++++++++++++++++ ...the-request-length-for-iov-alignment.patch | 50 ++++++++ qemu-kvm.spec | 12 +- 3 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 kvm-block-move-bdrv_qiov_is_aligned-to-file-posix.patch create mode 100644 kvm-block-use-the-request-length-for-iov-alignment.patch diff --git a/kvm-block-move-bdrv_qiov_is_aligned-to-file-posix.patch b/kvm-block-move-bdrv_qiov_is_aligned-to-file-posix.patch new file mode 100644 index 0000000..1556ced --- /dev/null +++ b/kvm-block-move-bdrv_qiov_is_aligned-to-file-posix.patch @@ -0,0 +1,107 @@ +From 2c9b536fac44c15c44af385ac1b440a9f5c05d01 Mon Sep 17 00:00:00 2001 +From: Keith Busch +Date: Thu, 29 Sep 2022 13:05:22 -0700 +Subject: [PATCH 1/2] block: move bdrv_qiov_is_aligned to file-posix + +RH-Author: Kevin Wolf +RH-MergeRequest: 123: block: Fix memory alignment of requests +RH-Bugzilla: 2143170 +RH-Acked-by: Alberto Faria +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Stefano Garzarella +RH-Commit: [1/2] 77b6ed2aaedfbd3dba7769b9a999ab3743f642cd (kmwolf/centos-qemu-kvm) + +There is only user of bdrv_qiov_is_aligned(), so move the alignment +function to there and make it static. + +Signed-off-by: Keith Busch +Message-Id: <20220929200523.3218710-2-kbusch@meta.com> +Reviewed-by: Kevin Wolf +Signed-off-by: Kevin Wolf +(cherry picked from commit a7c5f67a78569f8c275ea4ea9962e9c79b9d03cb) +Signed-off-by: Kevin Wolf +--- + block/file-posix.c | 21 +++++++++++++++++++++ + block/io.c | 21 --------------------- + include/block/block-io.h | 1 - + 3 files changed, 21 insertions(+), 22 deletions(-) + +diff --git a/block/file-posix.c b/block/file-posix.c +index 48cd096624..e3f3de2780 100644 +--- a/block/file-posix.c ++++ b/block/file-posix.c +@@ -2061,6 +2061,27 @@ static int coroutine_fn raw_thread_pool_submit(BlockDriverState *bs, + return thread_pool_submit_co(pool, func, arg); + } + ++/* ++ * Check if all memory in this vector is sector aligned. ++ */ ++static bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov) ++{ ++ int i; ++ size_t alignment = bdrv_min_mem_align(bs); ++ IO_CODE(); ++ ++ for (i = 0; i < qiov->niov; i++) { ++ if ((uintptr_t) qiov->iov[i].iov_base % alignment) { ++ return false; ++ } ++ if (qiov->iov[i].iov_len % alignment) { ++ return false; ++ } ++ } ++ ++ return true; ++} ++ + static int coroutine_fn raw_co_prw(BlockDriverState *bs, uint64_t offset, + uint64_t bytes, QEMUIOVector *qiov, int type) + { +diff --git a/block/io.c b/block/io.c +index 0a8cbefe86..96edc7f7cb 100644 +--- a/block/io.c ++++ b/block/io.c +@@ -3236,27 +3236,6 @@ void *qemu_try_blockalign0(BlockDriverState *bs, size_t size) + return mem; + } + +-/* +- * Check if all memory in this vector is sector aligned. +- */ +-bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov) +-{ +- int i; +- size_t alignment = bdrv_min_mem_align(bs); +- IO_CODE(); +- +- for (i = 0; i < qiov->niov; i++) { +- if ((uintptr_t) qiov->iov[i].iov_base % alignment) { +- return false; +- } +- if (qiov->iov[i].iov_len % alignment) { +- return false; +- } +- } +- +- return true; +-} +- + void bdrv_io_plug(BlockDriverState *bs) + { + BdrvChild *child; +diff --git a/include/block/block-io.h b/include/block/block-io.h +index fd25ffa9be..492f95fc05 100644 +--- a/include/block/block-io.h ++++ b/include/block/block-io.h +@@ -150,7 +150,6 @@ void *qemu_blockalign(BlockDriverState *bs, size_t size); + void *qemu_blockalign0(BlockDriverState *bs, size_t size); + void *qemu_try_blockalign(BlockDriverState *bs, size_t size); + void *qemu_try_blockalign0(BlockDriverState *bs, size_t size); +-bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov); + + void bdrv_enable_copy_on_read(BlockDriverState *bs); + void bdrv_disable_copy_on_read(BlockDriverState *bs); +-- +2.31.1 + diff --git a/kvm-block-use-the-request-length-for-iov-alignment.patch b/kvm-block-use-the-request-length-for-iov-alignment.patch new file mode 100644 index 0000000..512e1d8 --- /dev/null +++ b/kvm-block-use-the-request-length-for-iov-alignment.patch @@ -0,0 +1,50 @@ +From 7e334715074c7a4090578ed178834f3318d4b969 Mon Sep 17 00:00:00 2001 +From: Keith Busch +Date: Thu, 29 Sep 2022 13:05:23 -0700 +Subject: [PATCH 2/2] block: use the request length for iov alignment + +RH-Author: Kevin Wolf +RH-MergeRequest: 123: block: Fix memory alignment of requests +RH-Bugzilla: 2143170 +RH-Acked-by: Alberto Faria +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Stefano Garzarella +RH-Commit: [2/2] 50cfd394fff4dbad87d7c90c987e241ed2367746 (kmwolf/centos-qemu-kvm) + +An iov length needs to be aligned to the logical block size, which may +be larger than the memory alignment. + +Tested-by: Jens Axboe +Signed-off-by: Keith Busch +Message-Id: <20220929200523.3218710-3-kbusch@meta.com> +Reviewed-by: Kevin Wolf +Signed-off-by: Kevin Wolf +(cherry picked from commit 25474d90aa50bd32e0de395a33d8de42dd6f2aef) +Signed-off-by: Kevin Wolf +--- + block/file-posix.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/block/file-posix.c b/block/file-posix.c +index e3f3de2780..af994aba2b 100644 +--- a/block/file-posix.c ++++ b/block/file-posix.c +@@ -2068,13 +2068,14 @@ static bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov) + { + int i; + size_t alignment = bdrv_min_mem_align(bs); ++ size_t len = bs->bl.request_alignment; + IO_CODE(); + + for (i = 0; i < qiov->niov; i++) { + if ((uintptr_t) qiov->iov[i].iov_base % alignment) { + return false; + } +- if (qiov->iov[i].iov_len % alignment) { ++ if (qiov->iov[i].iov_len % len) { + return false; + } + } +-- +2.31.1 + diff --git a/qemu-kvm.spec b/qemu-kvm.spec index f6175f9..bb9309d 100644 --- a/qemu-kvm.spec +++ b/qemu-kvm.spec @@ -151,7 +151,7 @@ Obsoletes: %{name}-block-ssh <= %{epoch}:%{version} \ Summary: QEMU is a machine emulator and virtualizer Name: qemu-kvm Version: 7.1.0 -Release: 5%{?rcrel}%{?dist}%{?cc_suffix} +Release: 6%{?rcrel}%{?dist}%{?cc_suffix} # Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped # Epoch 15 used for RHEL 8 # Epoch 17 used for RHEL 9 (due to release versioning offset in RHEL 8.5) @@ -257,6 +257,10 @@ Patch49: kvm-rtl8139-Remove-unused-variable.patch Patch50: kvm-qemu-img-remove-unused-variable.patch # For bz#2141218 - qemu-kvm build fails with clang 15.0.1 due to false unused variable error Patch51: kvm-host-libusb-Remove-unused-variable.patch +# For bz#2143170 - The installation can not start when install files (iso) locate on a 4k disk +Patch52: kvm-block-move-bdrv_qiov_is_aligned-to-file-posix.patch +# For bz#2143170 - The installation can not start when install files (iso) locate on a 4k disk +Patch53: kvm-block-use-the-request-length-for-iov-alignment.patch %if %{have_clang} BuildRequires: clang @@ -1289,6 +1293,12 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ %endif %changelog +* Fri Dec 02 2022 Miroslav Rezanina - 7.1.0-6 +- kvm-block-move-bdrv_qiov_is_aligned-to-file-posix.patch [bz#2143170] +- kvm-block-use-the-request-length-for-iov-alignment.patch [bz#2143170] +- Resolves: bz#2143170 + (The installation can not start when install files (iso) locate on a 4k disk) + * Mon Nov 14 2022 Miroslav Rezanina - 7.1.0-5 - kvm-rtl8139-Remove-unused-variable.patch [bz#2141218] - kvm-qemu-img-remove-unused-variable.patch [bz#2141218]