* [Qemu-devel] [PATCH for-2.11] throttle-groups: forget timer and schedule next TGM on detach
@ 2017-11-16 11:21 Stefan Hajnoczi
2017-11-16 13:15 ` Alberto Garcia
2017-11-16 14:13 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
0 siblings, 2 replies; 3+ messages in thread
From: Stefan Hajnoczi @ 2017-11-16 11:21 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-block, Alberto Garcia, Manos Pitsidianakis, Stefan Hajnoczi
tg->any_timer_armed[] must be cleared when detaching pending timers from
the AioContext. Failure to do so leads to hung I/O because it looks
like there are still timers pending when in fact they have been removed.
Other ThrottleGroupMembers might have requests pending too so it's
necessary to schedule the next TGM so it can set a timer.
This patch fixes hung I/O when QEMU is launched with drives that are in
the same throttling group:
(guest)$ dd if=/dev/zero of=/dev/vdb oflag=direct bs=512 &
(guest)$ dd if=/dev/zero of=/dev/vdc oflag=direct bs=512 &
(qemu) stop
(qemu) cont
...I/O is stuck...
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
block/throttle-groups.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/block/throttle-groups.c b/block/throttle-groups.c
index 2587f19ca3..f26bcb5eee 100644
--- a/block/throttle-groups.c
+++ b/block/throttle-groups.c
@@ -593,13 +593,25 @@ void throttle_group_attach_aio_context(ThrottleGroupMember *tgm,
void throttle_group_detach_aio_context(ThrottleGroupMember *tgm)
{
+ ThrottleGroup *tg = container_of(tgm->throttle_state, ThrottleGroup, ts);
ThrottleTimers *tt = &tgm->throttle_timers;
+ int i;
/* Requests must have been drained */
assert(tgm->pending_reqs[0] == 0 && tgm->pending_reqs[1] == 0);
assert(qemu_co_queue_empty(&tgm->throttled_reqs[0]));
assert(qemu_co_queue_empty(&tgm->throttled_reqs[1]));
+ /* Kick off next ThrottleGroupMember, if necessary */
+ qemu_mutex_lock(&tg->lock);
+ for (i = 0; i < 2; i++) {
+ if (timer_pending(tt->timers[i])) {
+ tg->any_timer_armed[i] = false;
+ schedule_next_request(tgm, i);
+ }
+ }
+ qemu_mutex_unlock(&tg->lock);
+
throttle_timers_detach_aio_context(tt);
tgm->aio_context = NULL;
}
--
2.13.6
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [Qemu-devel] [PATCH for-2.11] throttle-groups: forget timer and schedule next TGM on detach
2017-11-16 11:21 [Qemu-devel] [PATCH for-2.11] throttle-groups: forget timer and schedule next TGM on detach Stefan Hajnoczi
@ 2017-11-16 13:15 ` Alberto Garcia
2017-11-16 14:13 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
1 sibling, 0 replies; 3+ messages in thread
From: Alberto Garcia @ 2017-11-16 13:15 UTC (permalink / raw)
To: Stefan Hajnoczi, qemu-devel; +Cc: qemu-block, Manos Pitsidianakis
On Thu 16 Nov 2017 12:21:50 PM CET, Stefan Hajnoczi wrote:
> tg->any_timer_armed[] must be cleared when detaching pending timers from
> the AioContext. Failure to do so leads to hung I/O because it looks
> like there are still timers pending when in fact they have been removed.
>
> Other ThrottleGroupMembers might have requests pending too so it's
> necessary to schedule the next TGM so it can set a timer.
>
> This patch fixes hung I/O when QEMU is launched with drives that are in
> the same throttling group:
>
> (guest)$ dd if=/dev/zero of=/dev/vdb oflag=direct bs=512 &
> (guest)$ dd if=/dev/zero of=/dev/vdc oflag=direct bs=512 &
> (qemu) stop
> (qemu) cont
> ...I/O is stuck...
>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Berto
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [Qemu-block] [PATCH for-2.11] throttle-groups: forget timer and schedule next TGM on detach
2017-11-16 11:21 [Qemu-devel] [PATCH for-2.11] throttle-groups: forget timer and schedule next TGM on detach Stefan Hajnoczi
2017-11-16 13:15 ` Alberto Garcia
@ 2017-11-16 14:13 ` Stefan Hajnoczi
1 sibling, 0 replies; 3+ messages in thread
From: Stefan Hajnoczi @ 2017-11-16 14:13 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: qemu-devel, qemu-block
[-- Attachment #1: Type: text/plain, Size: 969 bytes --]
On Thu, Nov 16, 2017 at 11:21:50AM +0000, Stefan Hajnoczi wrote:
> tg->any_timer_armed[] must be cleared when detaching pending timers from
> the AioContext. Failure to do so leads to hung I/O because it looks
> like there are still timers pending when in fact they have been removed.
>
> Other ThrottleGroupMembers might have requests pending too so it's
> necessary to schedule the next TGM so it can set a timer.
>
> This patch fixes hung I/O when QEMU is launched with drives that are in
> the same throttling group:
>
> (guest)$ dd if=/dev/zero of=/dev/vdb oflag=direct bs=512 &
> (guest)$ dd if=/dev/zero of=/dev/vdc oflag=direct bs=512 &
> (qemu) stop
> (qemu) cont
> ...I/O is stuck...
>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
> block/throttle-groups.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
Thanks, applied to my block tree:
https://github.com/stefanha/qemu/commits/block
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-11-16 14:13 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-16 11:21 [Qemu-devel] [PATCH for-2.11] throttle-groups: forget timer and schedule next TGM on detach Stefan Hajnoczi
2017-11-16 13:15 ` Alberto Garcia
2017-11-16 14:13 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
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).