On Wed, Mar 26, 2025 at 05:26:32PM +0800, zoudongjie wrote:
> From: Zhu Yangyang <zhuyangyang14@huawei.com>
>
> Calling qmp_block_set_io_throttle() will be blocked for a long time
> when a network disk is configured and the network failure is just about
> to occur.
>
> This series add a timeout parameter for qmp_block_set_io_throttle to control
> its execution duration.
>
> Changelog
> v3 ---
> Unify AIO_WAIT_WHILE_{TIMEOUT/INTERNAL} by replacing AIO_WAIT_WHILE_INTERNAL() with
> AIO_WAIT_WHILE_TIMEOUT(..., 0).
>
> v2 ----
> 1. Support 0 in BDRV_POLL_WHILE_TIMEOUT(), 0 means infinite.
> 2. Use uint64_t timeout_ns instead of int64 timeout to name variables.
> 3. Use timer_pending() to check for expiry instead of explicitly checking
> against the deadline for BDRV_POLL_WHILE_TIMEOUT().
> 4. Add documentation for bdrv_drained_begin_timeout(), note that bdrv_drained_end()
> must be called when -ETIMEDOUT is returned.
> 5. Add a timeout parameter to the qmp_block_set_io_throttle() instead of hardcoding
> the timeout, and the default value is 0, mean an infinite timeout.
>
> v1 patch link:
> https://lore.kernel.org/qemu-devel/20250308101618.721954-1-zoudongjie@huawei.com/
>
> Zhu Yangyang (2):
> io/block: Refactoring the bdrv_drained_begin() function and implement
> a timeout mechanism.
> qapi/throttle: add timeout parameter for qmp_block_set_io_throttle()
>
> block/block-backend.c | 14 ++++-
> block/io.c | 58 +++++++++++++++++----
> block/qapi-system.c | 10 +++-
> include/block/aio-wait.h | 47 ++++++++++++-----
> include/block/block-io.h | 22 +++++++-
> include/system/block-backend-global-state.h | 1 +
> qapi/block-core.json | 5 +-
> util/aio-wait.c | 5 ++
> 8 files changed, 135 insertions(+), 27 deletions(-)
>
> --
> 2.33.0
>
Aside from Markus' comments:
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>