Am 19.11.25 um 6:27 PM schrieb Kevin Wolf: > When new requests arrive at a BlockBackend that is currently drained, > these requests are queued until the drain section ends. > > There is a race window between blk_root_drained_end() waking up a queued > request in an iothread from the main thread and blk_wait_while_drained() > actually being woken up in the iothread and calling blk_in_flight(). If
Small typo here: blk_inc_in_flight() > the BlockBackend is drained again during this window, drain won't wait > for this request and it will sneak in when the BlockBackend is already > supposed to be quiesced. This causes assertion failures in > bdrv_drain_all_begin() and can have other unintended consequences. > > Fix this by increasing the in_flight counter immediately when scheduling > the request to be resumed so that the next drain will wait for it to > complete. > > Cc: [email protected] > Reported-by: Andrey Drobyshev <[email protected]> > Signed-off-by: Kevin Wolf <[email protected]> Reviewed-by: Fiona Ebner <[email protected]>
