* [PULL 0/4] Block layer patches
@ 2019-09-20 16:20 Kevin Wolf
2019-09-23 9:49 ` Peter Maydell
0 siblings, 1 reply; 18+ messages in thread
From: Kevin Wolf @ 2019-09-20 16:20 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, peter.maydell, qemu-devel
The following changes since commit 521db80318d6c749a6f6c5a65a68397af9e3ef16:
Merge remote-tracking branch 'remotes/maxreitz/tags/pull-block-2019-09-16' into staging (2019-09-16 15:25:55 +0100)
are available in the Git repository at:
git://repo.or.cz/qemu/kevin.git tags/for-upstream
for you to fetch changes up to d2c8c09fca9210d0f2399c8d570086a4a66bd22e:
iotests: Remove Python 2 compatibility code (2019-09-20 17:58:51 +0200)
----------------------------------------------------------------
Block layer patches:
- Fix internal snapshots with typical -blockdev setups
- iotests: Require Python 3.6 or later
----------------------------------------------------------------
Kevin Wolf (4):
block/snapshot: Restrict set of snapshot nodes
iotests: Test internal snapshots with -blockdev
iotests: Require Python 3.6 or later
iotests: Remove Python 2 compatibility code
block/snapshot.c | 26 +++--
tests/qemu-iotests/044 | 3 -
tests/qemu-iotests/163 | 3 -
tests/qemu-iotests/267 | 168 ++++++++++++++++++++++++++++
tests/qemu-iotests/267.out | 182 +++++++++++++++++++++++++++++++
tests/qemu-iotests/check | 13 ++-
tests/qemu-iotests/common.filter | 5 +-
tests/qemu-iotests/group | 1 +
tests/qemu-iotests/iotests.py | 13 +--
tests/qemu-iotests/nbd-fault-injector.py | 7 +-
10 files changed, 389 insertions(+), 32 deletions(-)
create mode 100755 tests/qemu-iotests/267
create mode 100644 tests/qemu-iotests/267.out
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PULL 0/4] Block layer patches
2019-09-20 16:20 Kevin Wolf
@ 2019-09-23 9:49 ` Peter Maydell
0 siblings, 0 replies; 18+ messages in thread
From: Peter Maydell @ 2019-09-23 9:49 UTC (permalink / raw)
To: Kevin Wolf; +Cc: QEMU Developers, Qemu-block
On Fri, 20 Sep 2019 at 17:21, Kevin Wolf <kwolf@redhat.com> wrote:
>
> The following changes since commit 521db80318d6c749a6f6c5a65a68397af9e3ef16:
>
> Merge remote-tracking branch 'remotes/maxreitz/tags/pull-block-2019-09-16' into staging (2019-09-16 15:25:55 +0100)
>
> are available in the Git repository at:
>
> git://repo.or.cz/qemu/kevin.git tags/for-upstream
>
> for you to fetch changes up to d2c8c09fca9210d0f2399c8d570086a4a66bd22e:
>
> iotests: Remove Python 2 compatibility code (2019-09-20 17:58:51 +0200)
>
> ----------------------------------------------------------------
> Block layer patches:
>
> - Fix internal snapshots with typical -blockdev setups
> - iotests: Require Python 3.6 or later
>
> ----------------------------------------------------------------
> Kevin Wolf (4):
> block/snapshot: Restrict set of snapshot nodes
> iotests: Test internal snapshots with -blockdev
> iotests: Require Python 3.6 or later
> iotests: Remove Python 2 compatibility code
Hi. This fails 'make check' on all the non-x86 Linux hosts:
iotests 267 fails on aarch32, ppc64, s390x, aarch64.
Sample output from the aarch32 run; others are similar
but the listed snapshot size differs.
TEST iotest-qcow2: 267 [fail]
QEMU --
"/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/../../aarch64-softmmu/qemu-system-aarch64"
-nodefaults -display none
-machine virt,accel=qtest
QEMU_IMG --
"/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/../../qemu-img"
QEMU_IO --
"/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/../../qemu-io"
--cache writeback -f qcow2
QEMU_NBD --
"/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/../../qemu-nbd"
IMGFMT -- qcow2 (compat=1.1)
IMGPROTO -- file
PLATFORM -- Linux/aarch64 mustang-maydell 4.15.0-51-generic
TEST_DIR --
/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/scratch
SOCKET_SCM_HELPER --
/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/socket_scm_helper
--- /home/peter.maydell/qemu/tests/qemu-iotests/267.out 2019-09-20
17:54:40.127012142 +0000
+++ /home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/267.out.bad
2019-09-20 18:02:11.756586745 +0000
@@ -34,7 +34,7 @@
(qemu) info snapshots
List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK
--- snap0 591 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+-- snap0 640 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
(qemu) loadvm snap0
(qemu) quit
@@ -45,7 +45,7 @@
(qemu) info snapshots
List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK
--- snap0 636 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+-- snap0 684 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
(qemu) loadvm snap0
(qemu) quit
@@ -70,7 +70,7 @@
(qemu) info snapshots
List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK
--- snap0 636 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+-- snap0 684 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
(qemu) loadvm snap0
(qemu) quit
@@ -95,7 +95,7 @@
(qemu) info snapshots
List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK
--- snap0 591 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+-- snap0 640 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
(qemu) loadvm snap0
(qemu) quit
@@ -106,7 +106,7 @@
(qemu) info snapshots
List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK
--- snap0 591 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+-- snap0 640 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
(qemu) loadvm snap0
(qemu) quit
@@ -120,7 +120,7 @@
(qemu) info snapshots
List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK
--- snap0 591 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+-- snap0 640 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
(qemu) loadvm snap0
(qemu) quit
@@ -135,7 +135,7 @@
(qemu) info snapshots
List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK
--- snap0 591 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+-- snap0 640 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
(qemu) loadvm snap0
(qemu) quit
@@ -146,14 +146,14 @@
(qemu) info snapshots
List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK
--- snap0 591 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+-- snap0 640 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
(qemu) loadvm snap0
(qemu) quit
Internal snapshots on overlay:
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
-1 snap0 591 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+1 snap0 640 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
Internal snapshots on backing file:
=== -blockdev with NBD server on the backing file ===
@@ -167,7 +167,7 @@
(qemu) info snapshots
List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK
--- snap0 591 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+-- snap0 640 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
(qemu) loadvm snap0
(qemu) quit
@@ -178,5 +178,5 @@
Internal snapshots on backing file:
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
-1 snap0 591 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
+1 snap0 640 KiB yyyy-mm-dd hh:mm:ss 00:00:00.000
*** done
Not run: 172 186 192 220
Failures: 267
Failed 1 of 104 iotests
thanks
-- PMM
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PULL 0/4] Block layer patches
@ 2023-03-28 12:35 Kevin Wolf
2023-03-28 19:42 ` Peter Maydell
0 siblings, 1 reply; 18+ messages in thread
From: Kevin Wolf @ 2023-03-28 12:35 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, peter.maydell, qemu-devel
The following changes since commit e3debd5e7d0ce031356024878a0a18b9d109354a:
Merge tag 'pull-request-2023-03-24' of https://gitlab.com/thuth/qemu into staging (2023-03-24 16:08:46 +0000)
are available in the Git repository at:
https://repo.or.cz/qemu/kevin.git tags/for-upstream
for you to fetch changes up to d8fbf9aa85aed64450907580a1d70583f097e9df:
block/export: Fix graph locking in blk_get_geometry() call (2023-03-27 15:16:05 +0200)
----------------------------------------------------------------
Block layer patches
- aio-posix: Fix race during epoll upgrade
- vhost-user-blk/VDUSE export: Fix a potential deadlock and an assertion
failure when the export runs in an iothread
- NBD server: Push pending frames after sending reply to fix performance
especially when used with TLS
----------------------------------------------------------------
Florian Westphal (1):
nbd/server: push pending frames after sending reply
Kevin Wolf (1):
block/export: Fix graph locking in blk_get_geometry() call
Stefan Hajnoczi (2):
block/export: only acquire AioContext once for vhost_user_server_stop()
aio-posix: fix race between epoll upgrade and aio_set_fd_handler()
include/block/block-io.h | 4 +++-
include/sysemu/block-backend-io.h | 5 ++++-
block.c | 5 +++--
block/block-backend.c | 7 +++++--
block/export/virtio-blk-handler.c | 7 ++++---
nbd/server.c | 3 +++
util/fdmon-epoll.c | 25 ++++++++++++++++++-------
util/vhost-user-server.c | 5 +----
8 files changed, 41 insertions(+), 20 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PULL 0/4] Block layer patches
2023-03-28 12:35 Kevin Wolf
@ 2023-03-28 19:42 ` Peter Maydell
0 siblings, 0 replies; 18+ messages in thread
From: Peter Maydell @ 2023-03-28 19:42 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-block, qemu-devel
On Tue, 28 Mar 2023 at 13:35, Kevin Wolf <kwolf@redhat.com> wrote:
>
> The following changes since commit e3debd5e7d0ce031356024878a0a18b9d109354a:
>
> Merge tag 'pull-request-2023-03-24' of https://gitlab.com/thuth/qemu into staging (2023-03-24 16:08:46 +0000)
>
> are available in the Git repository at:
>
> https://repo.or.cz/qemu/kevin.git tags/for-upstream
>
> for you to fetch changes up to d8fbf9aa85aed64450907580a1d70583f097e9df:
>
> block/export: Fix graph locking in blk_get_geometry() call (2023-03-27 15:16:05 +0200)
>
> ----------------------------------------------------------------
> Block layer patches
>
> - aio-posix: Fix race during epoll upgrade
> - vhost-user-blk/VDUSE export: Fix a potential deadlock and an assertion
> failure when the export runs in an iothread
> - NBD server: Push pending frames after sending reply to fix performance
> especially when used with TLS
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/8.0
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PULL 0/4] Block layer patches
@ 2023-11-28 14:09 Kevin Wolf
0 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2023-11-28 14:09 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, stefanha, qemu-devel
The following changes since commit e867b01cd6658a64c16052117dbb18093a2f9772:
Merge tag 'qga-pull-2023-11-25' of https://github.com/kostyanf14/qemu into staging (2023-11-27 08:59:00 -0500)
are available in the Git repository at:
https://repo.or.cz/qemu/kevin.git tags/for-upstream
for you to fetch changes up to 6e081324facf9aeece9c286774bab5af3b8d6099:
ide/via: Fix BAR4 value in legacy mode (2023-11-28 14:56:32 +0100)
----------------------------------------------------------------
Block layer patches
- ide/via: Fix BAR4 value in legacy mode
- export/vhost-user-blk: Fix consecutive drains
- vmdk: Don't corrupt desc file in vmdk_write_cid
- iotests: fix default machine type detection
----------------------------------------------------------------
Andrey Drobyshev (1):
iotests: fix default machine type detection
BALATON Zoltan (1):
ide/via: Fix BAR4 value in legacy mode
Fam Zheng (1):
vmdk: Don't corrupt desc file in vmdk_write_cid
Kevin Wolf (1):
export/vhost-user-blk: Fix consecutive drains
include/qemu/vhost-user-server.h | 1 +
block/export/vhost-user-blk-server.c | 9 +++++++--
block/vmdk.c | 28 ++++++++++++++++++--------
hw/ide/via.c | 17 ++++++++++------
util/vhost-user-server.c | 39 ++++++++++++++++++++++++++++--------
tests/qemu-iotests/testenv.py | 2 +-
tests/qemu-iotests/059 | 2 ++
tests/qemu-iotests/059.out | 4 ++++
8 files changed, 77 insertions(+), 25 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PULL 0/4] Block layer patches
@ 2025-04-08 13:00 Kevin Wolf
2025-04-09 8:31 ` Stefan Hajnoczi
0 siblings, 1 reply; 18+ messages in thread
From: Kevin Wolf @ 2025-04-08 13:00 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, qemu-devel
The following changes since commit dfaecc04c46d298e9ee81bd0ca96d8754f1c27ed:
Merge tag 'pull-riscv-to-apply-20250407-1' of https://github.com/alistair23/qemu into staging (2025-04-07 09:18:33 -0400)
are available in the Git repository at:
https://repo.or.cz/qemu/kevin.git tags/for-upstream
for you to fetch changes up to f8222bfba3409a3ce09c191941127a8cf2c7e623:
test-bdrv-drain: Fix data races (2025-04-08 15:00:01 +0200)
----------------------------------------------------------------
Block layer patches
- scsi-disk: Apply error policy for host_status errors again
- qcow2: Fix qemu-img info crash with missing crypto header
- qemu-img bench: Fix division by zero for zero-sized images
- test-bdrv-drain: Fix data races
----------------------------------------------------------------
Denis Rastyogin (1):
qemu-img: fix division by zero in bench_cb() for zero-sized images
Kevin Wolf (2):
qcow2: Don't crash qemu-img info with missing crypto header
scsi-disk: Apply error policy for host_status errors again
Vitalii Mordan (1):
test-bdrv-drain: Fix data races
include/qemu/job.h | 3 ++
block/qcow2.c | 4 +-
hw/scsi/scsi-disk.c | 39 +++++++++-----
job.c | 6 +++
qemu-img.c | 6 ++-
tests/unit/test-bdrv-drain.c | 32 +++++++-----
tests/qemu-iotests/tests/qcow2-encryption | 75 +++++++++++++++++++++++++++
tests/qemu-iotests/tests/qcow2-encryption.out | 32 ++++++++++++
8 files changed, 167 insertions(+), 30 deletions(-)
create mode 100755 tests/qemu-iotests/tests/qcow2-encryption
create mode 100644 tests/qemu-iotests/tests/qcow2-encryption.out
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PULL 0/4] Block layer patches
2025-04-08 13:00 Kevin Wolf
@ 2025-04-09 8:31 ` Stefan Hajnoczi
0 siblings, 0 replies; 18+ messages in thread
From: Stefan Hajnoczi @ 2025-04-09 8:31 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-block, kwolf, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 116 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/10.0 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PULL 0/4] Block layer patches
@ 2025-04-25 17:52 Kevin Wolf
2025-04-25 17:52 ` [PULL 1/4] file-posix: probe discard alignment on Linux block devices Kevin Wolf
` (4 more replies)
0 siblings, 5 replies; 18+ messages in thread
From: Kevin Wolf @ 2025-04-25 17:52 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, qemu-devel
The following changes since commit 019fbfa4bcd2d3a835c241295e22ab2b5b56129b:
Merge tag 'pull-misc-2025-04-24' of https://repo.or.cz/qemu/armbru into staging (2025-04-24 13:44:57 -0400)
are available in the Git repository at:
https://repo.or.cz/qemu/kevin.git tags/for-upstream
for you to fetch changes up to 2b689db0bedd24eda8b491cb1fcfb015dfec5a31:
qemu-img: improve queue depth validation in img_bench (2025-04-25 18:09:04 +0200)
----------------------------------------------------------------
Block layer patches
- Discard alignment fixes
- Remove unused callback .bdrv_aio_pdiscard()
- qemu-img bench: Input validation fix
----------------------------------------------------------------
Denis Rastyogin (1):
qemu-img: improve queue depth validation in img_bench
Stefan Hajnoczi (2):
file-posix: probe discard alignment on Linux block devices
block/io: skip head/tail requests on EINVAL
Sunny Zhu (1):
block: Remove unused callback function *bdrv_aio_pdiscard
include/block/block_int-common.h | 4 ---
block/file-posix.c | 67 +++++++++++++++++++++++++++++++++++++++-
block/io.c | 35 +++++++--------------
qemu-img.c | 2 +-
4 files changed, 79 insertions(+), 29 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PULL 1/4] file-posix: probe discard alignment on Linux block devices
2025-04-25 17:52 [PULL 0/4] Block layer patches Kevin Wolf
@ 2025-04-25 17:52 ` Kevin Wolf
2025-04-25 17:52 ` [PULL 2/4] block/io: skip head/tail requests on EINVAL Kevin Wolf
` (3 subsequent siblings)
4 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2025-04-25 17:52 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, qemu-devel
From: Stefan Hajnoczi <stefanha@redhat.com>
Populate the pdiscard_alignment block limit so the block layer is able
align discard requests correctly.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-ID: <20250417150528.76470-2-stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/file-posix.c | 67 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 66 insertions(+), 1 deletion(-)
diff --git a/block/file-posix.c b/block/file-posix.c
index 56d1972d15..0d6e12f880 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -1276,10 +1276,10 @@ static int get_sysfs_zoned_model(struct stat *st, BlockZoneModel *zoned)
}
#endif /* defined(CONFIG_BLKZONED) */
+#ifdef CONFIG_LINUX
/*
* Get a sysfs attribute value as a long integer.
*/
-#ifdef CONFIG_LINUX
static long get_sysfs_long_val(struct stat *st, const char *attribute)
{
g_autofree char *str = NULL;
@@ -1299,6 +1299,30 @@ static long get_sysfs_long_val(struct stat *st, const char *attribute)
}
return ret;
}
+
+/*
+ * Get a sysfs attribute value as a uint32_t.
+ */
+static int get_sysfs_u32_val(struct stat *st, const char *attribute,
+ uint32_t *u32)
+{
+ g_autofree char *str = NULL;
+ const char *end;
+ unsigned int val;
+ int ret;
+
+ ret = get_sysfs_str_val(st, attribute, &str);
+ if (ret < 0) {
+ return ret;
+ }
+
+ /* The file is ended with '\n', pass 'end' to accept that. */
+ ret = qemu_strtoui(str, &end, 10, &val);
+ if (ret == 0 && end && *end == '\0') {
+ *u32 = val;
+ }
+ return ret;
+}
#endif
static int hdev_get_max_segments(int fd, struct stat *st)
@@ -1318,6 +1342,23 @@ static int hdev_get_max_segments(int fd, struct stat *st)
#endif
}
+/*
+ * Fills in *dalign with the discard alignment and returns 0 on success,
+ * -errno otherwise.
+ */
+static int hdev_get_pdiscard_alignment(struct stat *st, uint32_t *dalign)
+{
+#ifdef CONFIG_LINUX
+ /*
+ * Note that Linux "discard_granularity" is QEMU "discard_alignment". Linux
+ * "discard_alignment" is something else.
+ */
+ return get_sysfs_u32_val(st, "discard_granularity", dalign);
+#else
+ return -ENOTSUP;
+#endif
+}
+
#if defined(CONFIG_BLKZONED)
/*
* If the reset_all flag is true, then the wps of zone whose state is
@@ -1527,6 +1568,30 @@ static void raw_refresh_limits(BlockDriverState *bs, Error **errp)
}
}
+ if (S_ISBLK(st.st_mode)) {
+ uint32_t dalign = 0;
+ int ret;
+
+ ret = hdev_get_pdiscard_alignment(&st, &dalign);
+ if (ret == 0) {
+ uint32_t ralign = bs->bl.request_alignment;
+
+ /* Probably never happens, but handle it just in case */
+ if (dalign < ralign && (ralign % dalign == 0)) {
+ dalign = ralign;
+ }
+
+ /* The block layer requires a multiple of request_alignment */
+ if (dalign % ralign != 0) {
+ error_setg(errp, "Invalid pdiscard_alignment limit %u is not a "
+ "multiple of request_alignment %u", dalign, ralign);
+ return;
+ }
+
+ bs->bl.pdiscard_alignment = dalign;
+ }
+ }
+
raw_refresh_zoned_limits(bs, &st, errp);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PULL 2/4] block/io: skip head/tail requests on EINVAL
2025-04-25 17:52 [PULL 0/4] Block layer patches Kevin Wolf
2025-04-25 17:52 ` [PULL 1/4] file-posix: probe discard alignment on Linux block devices Kevin Wolf
@ 2025-04-25 17:52 ` Kevin Wolf
2025-04-25 17:52 ` [PULL 3/4] block: Remove unused callback function *bdrv_aio_pdiscard Kevin Wolf
` (2 subsequent siblings)
4 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2025-04-25 17:52 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, qemu-devel
From: Stefan Hajnoczi <stefanha@redhat.com>
When guests send misaligned discard requests, the block layer breaks
them up into a misaligned head, an aligned main body, and a misaligned
tail.
The file-posix block driver on Linux returns -EINVAL on misaligned
discard requests. This causes bdrv_co_pdiscard() to fail and guests
configured with werror=stop will pause.
Add a special case for misaligned head/tail requests. Simply continue
when EINVAL is encountered so that the aligned main body of the request
can be completed and the guest is not paused. This is the best we can do
when guest discard limits do not match the host discard limits.
Fixes: https://issues.redhat.com/browse/RHEL-86032
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
Message-ID: <20250417150528.76470-3-stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/io.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/block/io.c b/block/io.c
index 1ba8d1aeea..ccec11386b 100644
--- a/block/io.c
+++ b/block/io.c
@@ -3109,11 +3109,12 @@ int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, int64_t offset,
/* Invalidate the cached block-status data range if this discard overlaps */
bdrv_bsc_invalidate_range(bs, offset, bytes);
- /* Discard is advisory, but some devices track and coalesce
+ /*
+ * Discard is advisory, but some devices track and coalesce
* unaligned requests, so we must pass everything down rather than
- * round here. Still, most devices will just silently ignore
- * unaligned requests (by returning -ENOTSUP), so we must fragment
- * the request accordingly. */
+ * round here. Still, most devices reject unaligned requests with
+ * -EINVAL or -ENOTSUP, so we must fragment the request accordingly.
+ */
align = MAX(bs->bl.pdiscard_alignment, bs->bl.request_alignment);
assert(align % bs->bl.request_alignment == 0);
head = offset % align;
@@ -3180,7 +3181,11 @@ int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, int64_t offset,
}
}
if (ret && ret != -ENOTSUP) {
- goto out;
+ if (ret == -EINVAL && (offset % align != 0 || num % align != 0)) {
+ /* Silently skip rejected unaligned head/tail requests */
+ } else {
+ goto out; /* bail out */
+ }
}
offset += num;
--
2.49.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PULL 3/4] block: Remove unused callback function *bdrv_aio_pdiscard
2025-04-25 17:52 [PULL 0/4] Block layer patches Kevin Wolf
2025-04-25 17:52 ` [PULL 1/4] file-posix: probe discard alignment on Linux block devices Kevin Wolf
2025-04-25 17:52 ` [PULL 2/4] block/io: skip head/tail requests on EINVAL Kevin Wolf
@ 2025-04-25 17:52 ` Kevin Wolf
2025-04-25 17:52 ` [PULL 4/4] qemu-img: improve queue depth validation in img_bench Kevin Wolf
2025-04-28 17:56 ` [PULL 0/4] Block layer patches Stefan Hajnoczi
4 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2025-04-25 17:52 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, qemu-devel
From: Sunny Zhu <sunnyzhyy@qq.com>
The bytes type in *bdrv_aio_pdiscard should be int64_t rather than int.
There are no drivers implementing the *bdrv_aio_pdiscard() callback,
it appears to be an unused function. Therefore, we'll simply remove it
instead of fixing it.
Additionally, coroutine-based callbacks are preferred. If someone needs
to implement bdrv_aio_pdiscard, a coroutine-based version would be
straightforward to implement.
Signed-off-by: Sunny Zhu <sunnyzhyy@qq.com>
Message-ID: <tencent_7140D2E54157D98CF3D9E64B1A007A1A7906@qq.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
include/block/block_int-common.h | 4 ----
block/io.c | 22 +++-------------------
2 files changed, 3 insertions(+), 23 deletions(-)
diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h
index ebb4e56a50..0d8187f656 100644
--- a/include/block/block_int-common.h
+++ b/include/block/block_int-common.h
@@ -506,10 +506,6 @@ struct BlockDriver {
BlockAIOCB * GRAPH_RDLOCK_PTR (*bdrv_aio_flush)(
BlockDriverState *bs, BlockCompletionFunc *cb, void *opaque);
- BlockAIOCB * GRAPH_RDLOCK_PTR (*bdrv_aio_pdiscard)(
- BlockDriverState *bs, int64_t offset, int bytes,
- BlockCompletionFunc *cb, void *opaque);
-
int coroutine_fn GRAPH_RDLOCK_PTR (*bdrv_co_readv)(BlockDriverState *bs,
int64_t sector_num, int nb_sectors, QEMUIOVector *qiov);
diff --git a/block/io.c b/block/io.c
index ccec11386b..6d98b0abb9 100644
--- a/block/io.c
+++ b/block/io.c
@@ -3102,7 +3102,7 @@ int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, int64_t offset,
return 0;
}
- if (!bs->drv->bdrv_co_pdiscard && !bs->drv->bdrv_aio_pdiscard) {
+ if (!bs->drv->bdrv_co_pdiscard) {
return 0;
}
@@ -3162,24 +3162,8 @@ int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, int64_t offset,
ret = -ENOMEDIUM;
goto out;
}
- if (bs->drv->bdrv_co_pdiscard) {
- ret = bs->drv->bdrv_co_pdiscard(bs, offset, num);
- } else {
- BlockAIOCB *acb;
- CoroutineIOCompletion co = {
- .coroutine = qemu_coroutine_self(),
- };
-
- acb = bs->drv->bdrv_aio_pdiscard(bs, offset, num,
- bdrv_co_io_em_complete, &co);
- if (acb == NULL) {
- ret = -EIO;
- goto out;
- } else {
- qemu_coroutine_yield();
- ret = co.ret;
- }
- }
+
+ ret = bs->drv->bdrv_co_pdiscard(bs, offset, num);
if (ret && ret != -ENOTSUP) {
if (ret == -EINVAL && (offset % align != 0 || num % align != 0)) {
/* Silently skip rejected unaligned head/tail requests */
--
2.49.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PULL 4/4] qemu-img: improve queue depth validation in img_bench
2025-04-25 17:52 [PULL 0/4] Block layer patches Kevin Wolf
` (2 preceding siblings ...)
2025-04-25 17:52 ` [PULL 3/4] block: Remove unused callback function *bdrv_aio_pdiscard Kevin Wolf
@ 2025-04-25 17:52 ` Kevin Wolf
2025-04-28 13:54 ` Michael Tokarev
2025-04-28 17:56 ` [PULL 0/4] Block layer patches Stefan Hajnoczi
4 siblings, 1 reply; 18+ messages in thread
From: Kevin Wolf @ 2025-04-25 17:52 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, qemu-devel
From: Denis Rastyogin <gerben@altlinux.org>
This error was discovered by fuzzing qemu-img.
Currently, running `qemu-img bench -d 0` in img_bench is allowed,
which is a pointless operation and causes qemu-img to hang.
Signed-off-by: Denis Rastyogin <gerben@altlinux.org>
Message-ID: <20250327162423.25154-5-gerben@altlinux.org>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
qemu-img.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/qemu-img.c b/qemu-img.c
index 2044c22a4c..76ac5d3028 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -4571,7 +4571,7 @@ static int img_bench(int argc, char **argv)
{
unsigned long res;
- if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
+ if (qemu_strtoul(optarg, NULL, 0, &res) <= 0 || res > INT_MAX) {
error_report("Invalid queue depth specified");
return 1;
}
--
2.49.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PULL 4/4] qemu-img: improve queue depth validation in img_bench
2025-04-25 17:52 ` [PULL 4/4] qemu-img: improve queue depth validation in img_bench Kevin Wolf
@ 2025-04-28 13:54 ` Michael Tokarev
2025-04-28 13:58 ` Michael Tokarev
0 siblings, 1 reply; 18+ messages in thread
From: Michael Tokarev @ 2025-04-28 13:54 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: qemu-devel
25.04.2025 20:52, Kevin Wolf wrote:
> From: Denis Rastyogin <gerben@altlinux.org>
>
> This error was discovered by fuzzing qemu-img.
>
> Currently, running `qemu-img bench -d 0` in img_bench is allowed,
> which is a pointless operation and causes qemu-img to hang.
>
> Signed-off-by: Denis Rastyogin <gerben@altlinux.org>
> Message-ID: <20250327162423.25154-5-gerben@altlinux.org>
> Reviewed-by: Kevin Wolf <kwolf@redhat.com>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> qemu-img.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/qemu-img.c b/qemu-img.c
> index 2044c22a4c..76ac5d3028 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -4571,7 +4571,7 @@ static int img_bench(int argc, char **argv)
> {
> unsigned long res;
>
> - if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
> + if (qemu_strtoul(optarg, NULL, 0, &res) <= 0 || res > INT_MAX) {
> error_report("Invalid queue depth specified");
> return 1;
> }
FWIW, it's been covered by my qemu-img options patches for way over a year.
/mjt
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PULL 4/4] qemu-img: improve queue depth validation in img_bench
2025-04-28 13:54 ` Michael Tokarev
@ 2025-04-28 13:58 ` Michael Tokarev
2025-05-13 15:06 ` Kevin Wolf
0 siblings, 1 reply; 18+ messages in thread
From: Michael Tokarev @ 2025-04-28 13:58 UTC (permalink / raw)
To: Kevin Wolf, qemu-block; +Cc: qemu-devel
28.04.2025 16:54, Michael Tokarev пишет:
> 25.04.2025 20:52, Kevin Wolf wrote:
>> From: Denis Rastyogin <gerben@altlinux.org>
>>
>> This error was discovered by fuzzing qemu-img.
>>
>> Currently, running `qemu-img bench -d 0` in img_bench is allowed,
>> which is a pointless operation and causes qemu-img to hang.
>>
>> Signed-off-by: Denis Rastyogin <gerben@altlinux.org>
>> Message-ID: <20250327162423.25154-5-gerben@altlinux.org>
>> Reviewed-by: Kevin Wolf <kwolf@redhat.com>
>> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
>> ---
>> qemu-img.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/qemu-img.c b/qemu-img.c
>> index 2044c22a4c..76ac5d3028 100644
>> --- a/qemu-img.c
>> +++ b/qemu-img.c
>> @@ -4571,7 +4571,7 @@ static int img_bench(int argc, char **argv)
>> {
>> unsigned long res;
>> - if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
>> + if (qemu_strtoul(optarg, NULL, 0, &res) <= 0 || res > INT_MAX) {
>> error_report("Invalid queue depth specified");
>> return 1;
>> }
>
> FWIW, it's been covered by my qemu-img options patches for way over a year.
In particular:
https://lore.kernel.org/qemu-devel/20240927061121.573271-28-mjt@tls.msk.ru/
I'm still waiting for some feedback from these patches - heard neither ACK
nor NACK for this rather large work.
/mjt
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PULL 0/4] Block layer patches
2025-04-25 17:52 [PULL 0/4] Block layer patches Kevin Wolf
` (3 preceding siblings ...)
2025-04-25 17:52 ` [PULL 4/4] qemu-img: improve queue depth validation in img_bench Kevin Wolf
@ 2025-04-28 17:56 ` Stefan Hajnoczi
4 siblings, 0 replies; 18+ messages in thread
From: Stefan Hajnoczi @ 2025-04-28 17:56 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-block, kwolf, qemu-devel
[-- Attachment #1: Type: text/plain, Size: 116 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/10.0 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PULL 4/4] qemu-img: improve queue depth validation in img_bench
2025-04-28 13:58 ` Michael Tokarev
@ 2025-05-13 15:06 ` Kevin Wolf
2025-05-14 9:28 ` Michael Tokarev
0 siblings, 1 reply; 18+ messages in thread
From: Kevin Wolf @ 2025-05-13 15:06 UTC (permalink / raw)
To: Michael Tokarev; +Cc: qemu-block, qemu-devel
Am 28.04.2025 um 15:58 hat Michael Tokarev geschrieben:
> 28.04.2025 16:54, Michael Tokarev пишет:
> > 25.04.2025 20:52, Kevin Wolf wrote:
> > > From: Denis Rastyogin <gerben@altlinux.org>
> > >
> > > This error was discovered by fuzzing qemu-img.
> > >
> > > Currently, running `qemu-img bench -d 0` in img_bench is allowed,
> > > which is a pointless operation and causes qemu-img to hang.
> > >
> > > Signed-off-by: Denis Rastyogin <gerben@altlinux.org>
> > > Message-ID: <20250327162423.25154-5-gerben@altlinux.org>
> > > Reviewed-by: Kevin Wolf <kwolf@redhat.com>
> > > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > > ---
> > > qemu-img.c | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/qemu-img.c b/qemu-img.c
> > > index 2044c22a4c..76ac5d3028 100644
> > > --- a/qemu-img.c
> > > +++ b/qemu-img.c
> > > @@ -4571,7 +4571,7 @@ static int img_bench(int argc, char **argv)
> > > {
> > > unsigned long res;
> > > - if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
> > > + if (qemu_strtoul(optarg, NULL, 0, &res) <= 0 || res > INT_MAX) {
> > > error_report("Invalid queue depth specified");
> > > return 1;
> > > }
> >
> > FWIW, it's been covered by my qemu-img options patches for way over a year.
>
> In particular:
>
> https://lore.kernel.org/qemu-devel/20240927061121.573271-28-mjt@tls.msk.ru/
>
> I'm still waiting for some feedback from these patches - heard neither ACK
> nor NACK for this rather large work.
Oops, seems I never continued review after patch 5. I'll get back to it.
However, I don't see the above hunk in that series. Am I missing it or
is there another series of yours waiting for review?
Kevin
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PULL 4/4] qemu-img: improve queue depth validation in img_bench
2025-05-13 15:06 ` Kevin Wolf
@ 2025-05-14 9:28 ` Michael Tokarev
2025-05-14 9:31 ` Michael Tokarev
0 siblings, 1 reply; 18+ messages in thread
From: Michael Tokarev @ 2025-05-14 9:28 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-block, qemu-devel
On 13.05.2025 18:06, Kevin Wolf wrote:
> Am 28.04.2025 um 15:58 hat Michael Tokarev geschrieben:
>> 28.04.2025 16:54, Michael Tokarev пишет:
>>> 25.04.2025 20:52, Kevin Wolf wrote:
>>>> From: Denis Rastyogin <gerben@altlinux.org>
>>>>
>>>> This error was discovered by fuzzing qemu-img.
>>>>
>>>> Currently, running `qemu-img bench -d 0` in img_bench is allowed,
>>>> which is a pointless operation and causes qemu-img to hang.
>>>>
>>>> Signed-off-by: Denis Rastyogin <gerben@altlinux.org>
>>>> Message-ID: <20250327162423.25154-5-gerben@altlinux.org>
>>>> Reviewed-by: Kevin Wolf <kwolf@redhat.com>
>>>> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
>>>> ---
>>>> qemu-img.c | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/qemu-img.c b/qemu-img.c
>>>> index 2044c22a4c..76ac5d3028 100644
>>>> --- a/qemu-img.c
>>>> +++ b/qemu-img.c
>>>> @@ -4571,7 +4571,7 @@ static int img_bench(int argc, char **argv)
>>>> {
>>>> unsigned long res;
>>>> - if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
>>>> + if (qemu_strtoul(optarg, NULL, 0, &res) <= 0 || res > INT_MAX) {
>>>> error_report("Invalid queue depth specified");
>>>> return 1;
>>>> }
>>>
>>> FWIW, it's been covered by my qemu-img options patches for way over a year.
>>
>> In particular:
>>
>> https://lore.kernel.org/qemu-devel/20240927061121.573271-28-mjt@tls.msk.ru/
>>
>> I'm still waiting for some feedback from these patches - heard neither ACK
>> nor NACK for this rather large work.
>
> Oops, seems I never continued review after patch 5. I'll get back to it.
>
> However, I don't see the above hunk in that series. Am I missing it or
> is there another series of yours waiting for review?
This one:
@@ -4791,27 +4788,17 @@ static int img_bench(const img_cmd_t *ccmd, int
argc, char **argv)
);
break;
case 'c':
- {
- unsigned long res;
-
- if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
- error_report("Invalid request count specified");
+ count = cvtnum_full("request count", optarg, false, 1,
INT_MAX);
+ if (count < 0) {
return 1;
}
Thanks,
/mjt
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PULL 4/4] qemu-img: improve queue depth validation in img_bench
2025-05-14 9:28 ` Michael Tokarev
@ 2025-05-14 9:31 ` Michael Tokarev
0 siblings, 0 replies; 18+ messages in thread
From: Michael Tokarev @ 2025-05-14 9:31 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-block, qemu-devel
On 14.05.2025 12:28, Michael Tokarev wrote:
> On 13.05.2025 18:06, Kevin Wolf wrote:
>> Am 28.04.2025 um 15:58 hat Michael Tokarev geschrieben:
>>> 28.04.2025 16:54, Michael Tokarev пишет:
>>>> 25.04.2025 20:52, Kevin Wolf wrote:
>>>>> From: Denis Rastyogin <gerben@altlinux.org>
>>>>>
>>>>> This error was discovered by fuzzing qemu-img.
>>>>>
>>>>> Currently, running `qemu-img bench -d 0` in img_bench is allowed,
>>>>> which is a pointless operation and causes qemu-img to hang.
>>>>>
>>>>> Signed-off-by: Denis Rastyogin <gerben@altlinux.org>
>>>>> Message-ID: <20250327162423.25154-5-gerben@altlinux.org>
>>>>> Reviewed-by: Kevin Wolf <kwolf@redhat.com>
>>>>> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
>>>>> ---
>>>>> qemu-img.c | 2 +-
>>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/qemu-img.c b/qemu-img.c
>>>>> index 2044c22a4c..76ac5d3028 100644
>>>>> --- a/qemu-img.c
>>>>> +++ b/qemu-img.c
>>>>> @@ -4571,7 +4571,7 @@ static int img_bench(int argc, char **argv)
>>>>> {
>>>>> unsigned long res;
>>>>> - if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res >
>>>>> INT_MAX) {
>>>>> + if (qemu_strtoul(optarg, NULL, 0, &res) <= 0 || res >
>>>>> INT_MAX) {
>>>>> error_report("Invalid queue depth specified");
>>>>> return 1;
>>>>> }
>>>>
>>>> FWIW, it's been covered by my qemu-img options patches for way over
>>>> a year.
>>>
>>> In particular:
>>>
>>> https://lore.kernel.org/qemu-devel/20240927061121.573271-28-
>>> mjt@tls.msk.ru/
>>>
>>> I'm still waiting for some feedback from these patches - heard
>>> neither ACK
>>> nor NACK for this rather large work.
>>
>> Oops, seems I never continued review after patch 5. I'll get back to it.
>>
>> However, I don't see the above hunk in that series. Am I missing it or
>> is there another series of yours waiting for review?
>
> This one:
Actually it is the next very similar hunk. But doesn't matter anymore,
since this 4/4 partial patch has been applied already.
/mjt
> @@ -4791,27 +4788,17 @@ static int img_bench(const img_cmd_t *ccmd, int
> argc, char **argv)
> );
> break;
> case 'c':
> - {
> - unsigned long res;
> -
> - if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res >
> INT_MAX) {
> - error_report("Invalid request count specified");
> + count = cvtnum_full("request count", optarg, false, 1,
> INT_MAX);
> + if (count < 0) {
> return 1;
> }
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2025-05-14 9:31 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-25 17:52 [PULL 0/4] Block layer patches Kevin Wolf
2025-04-25 17:52 ` [PULL 1/4] file-posix: probe discard alignment on Linux block devices Kevin Wolf
2025-04-25 17:52 ` [PULL 2/4] block/io: skip head/tail requests on EINVAL Kevin Wolf
2025-04-25 17:52 ` [PULL 3/4] block: Remove unused callback function *bdrv_aio_pdiscard Kevin Wolf
2025-04-25 17:52 ` [PULL 4/4] qemu-img: improve queue depth validation in img_bench Kevin Wolf
2025-04-28 13:54 ` Michael Tokarev
2025-04-28 13:58 ` Michael Tokarev
2025-05-13 15:06 ` Kevin Wolf
2025-05-14 9:28 ` Michael Tokarev
2025-05-14 9:31 ` Michael Tokarev
2025-04-28 17:56 ` [PULL 0/4] Block layer patches Stefan Hajnoczi
-- strict thread matches above, loose matches on Subject: below --
2025-04-08 13:00 Kevin Wolf
2025-04-09 8:31 ` Stefan Hajnoczi
2023-11-28 14:09 Kevin Wolf
2023-03-28 12:35 Kevin Wolf
2023-03-28 19:42 ` Peter Maydell
2019-09-20 16:20 Kevin Wolf
2019-09-23 9:49 ` Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).