[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 5/9] block/io: expand in_flight inc/dec section: simple cases
From: |
Stefan Hajnoczi |
Subject: |
Re: [PATCH 5/9] block/io: expand in_flight inc/dec section: simple cases |
Date: |
Wed, 22 Apr 2020 17:06:39 +0100 |
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