[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 9/9] block/io: expand in_flight inc/dec section: bdrv_make
From: |
Eric Blake |
Subject: |
Re: [PATCH v2 9/9] block/io: expand in_flight inc/dec section: bdrv_make_zero |
Date: |
Fri, 1 May 2020 17:08:01 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 |
On 4/27/20 9:39 AM, Vladimir Sementsov-Ogievskiy wrote:
It's safer to expand in_flight request to start before enter to
coroutine in synchronous wrappers and end after BDRV_POLL_WHILE loop.
Note that qemu_coroutine_enter may only schedule the coroutine in some
circumstances.
See my wording suggestions earlier in the series.
bdrv_make_zero update includes refactoring: move the whole loop into
coroutine, which has additional benefit of not create/enter new
coroutine on each iteration.
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
block/io.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 51 insertions(+), 3 deletions(-)
+int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags)
+{
+ int ret;
+
+ bdrv_inc_in_flight(child->bs);
+
+ if (qemu_in_coroutine()) {
+ /* Fast-path if already in coroutine context */
+ ret = bdrv_do_make_zero(child, flags);
+ } else {
+ BdrvDoMakeZeroData data = {
+ .child = child,
+ .flags = flags,
+ .done = false,
Another case where the line '.done = false,' is optional, thanks to C
semantics, but does not hurt to leave it in.
Reviewed-by: Eric Blake <address@hidden>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v2 9/9] block/io: expand in_flight inc/dec section: bdrv_make_zero,
Eric Blake <=