[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bdrv_drained_begin deadlock with io-threads
From: |
Kevin Wolf |
Subject: |
Re: bdrv_drained_begin deadlock with io-threads |
Date: |
Tue, 31 Mar 2020 17:37:19 +0200 |
User-agent: |
Mutt/1.12.1 (2019-06-15) |
Am 31.03.2020 um 17:24 hat Dietmar Maurer geschrieben:
>
> > > How can I see/debug those waiting request?
> >
> > Examine bs->tracked_requests list.
> >
> > BdrvTrackedRequest has "Coroutine *co" field. It's a pointer of coroutine
> > of this request. You may use qemu-gdb script to print request's coroutine
> > back-trace:
>
> I would, but there are no tracked request at all.
>
> print bs->tracked_requests
> $2 = {lh_first = 0x0}
Then it's one of the recursively checked parents, as you already figured
out.
> Looks bdrv_parent_drained_poll_single() calls
> blk_root_drained_poll(), which return true in my case (in_flight > 5).
Can you identify which BlockBackend is this? Specifically if it's the
one attached to a guest device or whether it belongs to the block job.
Maybe have a look at the job coroutine, too. You can probably easiest
find it in the 'jobs' list, and then print the coroutine backtrace for
job->co.
> Looks like I am loosing poll events somewhere?
I don't think we've lost any event if in_flight > 0. It means that
something is still supposedly active. Maybe the job deadlocked.
Kevin