On Fri, Feb 09, 2018 at 06:26:41PM +0100, Paolo Bonzini wrote:
> On 09/02/2018 18:23, Kevin Wolf wrote:
> > Am 09.02.2018 um 17:28 hat Paolo Bonzini geschrieben:
> >> On 08/02/2018 18:18, Stefan Hajnoczi wrote:
> >>> +BlockDriverState *bs = blk_bs(blk);
> >>> +
> >>> +if (bs) {
> >>> +
On 09/02/2018 18:23, Kevin Wolf wrote:
> Am 09.02.2018 um 17:28 hat Paolo Bonzini geschrieben:
>> On 08/02/2018 18:18, Stefan Hajnoczi wrote:
>>> +BlockDriverState *bs = blk_bs(blk);
>>> +
>>> +if (bs) {
>>> +bdrv_drained_begin(bs);
>>> +}
>>> +
>>> +/* We may have aio reque
Am 09.02.2018 um 17:28 hat Paolo Bonzini geschrieben:
> On 08/02/2018 18:18, Stefan Hajnoczi wrote:
> > +BlockDriverState *bs = blk_bs(blk);
> > +
> > +if (bs) {
> > +bdrv_drained_begin(bs);
> > +}
> > +
> > +/* We may have aio requests like -ENOMEDIUM in flight */
> > +
On 08/02/2018 18:18, Stefan Hajnoczi wrote:
> +BlockDriverState *bs = blk_bs(blk);
> +
> +if (bs) {
> +bdrv_drained_begin(bs);
> +}
> +
> +/* We may have aio requests like -ENOMEDIUM in flight */
> +while (atomic_mb_read(&blk->in_flight) > 0) {
> +aio_poll(blk_ge
On 02/08/2018 11:18 AM, Stefan Hajnoczi wrote:
BlockBackend currently relies on BlockDriverState->in_flight to track
requests for blk_drain(). There is a corner case where
BlockDriverState->in_flight cannot be used though: blk->root can be NULL
when there is no medium. This results in a segfaul