qemu-block
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]