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: Wenchao Xia
Subject: Re: [Qemu-devel] [PATCH v2 19/24] block: Allow wait_serialising_requests() at any point
Date: Tue, 14 Jan 2014 11:13:23 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0

于 2014/1/13 19:29, Kevin Wolf 写道:
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.


  It seems when two overlapping request exist in the qeueue, and
both are waiting, problem happens. Thanks for explanation, I am fine
with this patch.


  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]