On 24/03/2016 09:25, Kevin Wolf wrote: > I think your cancellation series (allows to) gets rid of most if not all > blk_drain() callers in the device emulation, so it becomes harder for > guests to trigger one. Ideally only the monitor should allow triggering > a drain.
More precesely you still need to call drain, but indeed they won't be able to game throttling. > On the other hand, your other series introduces bdrv_drain() calls where > we have open-coded nested event loops waiting for a single request > today. I'm pretty sure that these can be triggered by the guest and that > throttling the drain would be desirable therefore. The open-coded nested event loops are typically triggered only from qemu-io, bdrv_create, etc. They shouldn't be worse than the "disable throttling for sync I/O" that we used to have. > Okay. Actually, such a pair of callbacks - not only into the > BlockBackend, but from there into the guest device - was a thought > already when we introduced aio_disable_external(). Do you think it would > make sense to change things in the mid term so that the users of a > BlockBackend just get drain_begin/end callbacks? Yes, aio_disable_external and aio_disable_internal can be moved to the BdrvChildRole callbacks too. Paolo