qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 19/24] block: Allow wait_serialising_requests


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH v2 19/24] block: Allow wait_serialising_requests() at any point
Date: Mon, 13 Jan 2014 12:29:10 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

Am 27.12.2013 um 05:17 hat Wenchao Xia geschrieben:
> 于 2013/12/13 21:22, Kevin Wolf 写道:
> > We can only have a single wait_serialising_requests() call per request
> > because otherwise we can run into deadlocks where requests are waiting
> > for each other.
>   do you mean:
> mark_request_serialising(req)
> ...
> wait_serialising_requests(req);
> ...
> wait_serialising_requests(req);
> 
>  will have deadlock?

Yes, it can deadlock (it doesn't have to, it depends on whether another
overlapping request is started concurrently). More precisely, the
problematic pattern is:

    mark_request_serialising(req);
    ...
    qemu_coroutine_yield(); /* Other requests may be issued now */
    ...
    wait_serialising_requests(req);

What you mentioned above is a special case of this.

>  I thought it is already resolved by patch 15?
> Maybe here is another deadlock reason?

The problematic pattern in patch 15 was:

    mark_request_serialising(req);
    ... /* no yield here */
    wait_serialising_requests(req);

As opposed to the originally used:

    wait_serialising_requests(req);
    ... /* no yield here */
    mark_request_serialising(req);

Kevin



reply via email to

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