On Wed, Apr 22, 2020 at 04:47:07PM +0300, Vladimir Sementsov-Ogievskiy wrote: > 20.04.2020 19:22, Stefan Hajnoczi wrote: > > On Wed, Apr 08, 2020 at 12:30:47PM +0300, Vladimir Sementsov-Ogievskiy > > wrote: > > > It's safer to expand in_flight request to start before enter to > > > > Please explain what exeactly "safer" means. If I understand correctly > > this is just a refactoring and does not fix bugs that have been hit in > > the real world. > > > > Is this just a generate attempt to avoid accidentally performing > > operations that need to happen as part of the request after the dec > > call? > > Consider write. > > It's possible, that qemu_coroutine_enter only schedules execution, assume > such case. > Then we may possibly have the following: > > 1. Somehow check that we are not in drained section in outer code > > 2. call bdrv_pwritev(), assuming that it will increse in_flight, which will > protect us from starting drained section > > 3. it calls bdrv_prwv_co -> bdrv_coroutine_enter (not yet increased in_flight) > > 4. assume coroutine not yet actually entered, only scheduled, and we go to > some code, which starts drained section (as in_flight is zero) > > 5. scheduled coroutine starts, and blindly increases in_flight, and we are in > drained section with in_flight request. > > The series does the same thing for block/io.c like Kevin's "block: Fix > blk->in_flight during blk_wait_while_drained()" for blk layer.
Please include this in the commit description. Thanks! Stefan
signature.asc
Description: PGP signature