qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v6 2/2] block: Support GlusterFS as a QEMU block


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH v6 2/2] block: Support GlusterFS as a QEMU block backend
Date: Thu, 06 Sep 2012 11:06:49 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120605 Thunderbird/13.0

Am 06.09.2012 09:23, schrieb Paolo Bonzini:
> Il 05/09/2012 11:57, Bharata B Rao ha scritto:
>>>> What could be the issue here ? In general, how do I ensure that my
>>>> aio calls get completed correctly in such scenarios where bdrv_read etc
>>>> are called from coroutine context rather than from main thread context ?
>> One way to handle this is not to do completion from gluster thread but
>> instead schedule a BH that does the completion. In fact I had this approach
>> in the earlier versions, but resorted to directly calling completion from
>> gluster thread as I didn't see the value of using a BH for completion.
>> But I guess its indeed needed to support such scenarios (qcow2 image creation
>> on gluster backend).
> 
> I think the problem is that we're calling bdrv_drain_all() from
> coroutine context.  This is problematic because then the current
> coroutine won't yield and won't give other coroutines an occasion to run.
> 
> This could be fixed by checking whether we're in coroutine context in
> bdrv_drain_all().  If so, instead of draining the queues directly,
> schedule a bottom half that does bdrv_drain_all() followed by
> qemu_coroutine_enter(), and yield.

Hm, could be an option, but I'm not sure if there's too much magic going
on then...

> If it works, I think this change would be preferrable to using a "magic"
> BH in every driver.

The way it works in posix-aio-compat is that the request is first
removed from the list and then the callback is called. This way
posix_aio_flush() can return 0 and bdrv_drain_all() completes.

Kevin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]