[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC 04/13] virtio-blk: implement BlockDevOps->drain_th
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [RFC 04/13] virtio-blk: implement BlockDevOps->drain_threads_cb() |
Date: |
Fri, 14 Jun 2013 10:23:02 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 |
Il 14/06/2013 05:48, Stefan Hajnoczi ha scritto:
> Drain and stop the dataplane thread when bdrv_drain_all() is called.
> Note that the thread will be restarted in virtio_blk_handle_output() the
> next time the guest kicks the virtqueue.
Long term I still think we want to move towards
aio_lock(bs)
bdrv_drain(bs)
...
aio_unlock(bs)
but this approach works well at this point. It is a hack, but a very
smart one. :)
Add a comment in the code about what will start the dataplane thread,
though.
Paolo
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> ---
> hw/block/virtio-blk.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> index cf12469..f9c2b79 100644
> --- a/hw/block/virtio-blk.c
> +++ b/hw/block/virtio-blk.c
> @@ -618,8 +618,20 @@ static void virtio_blk_resize(void *opaque)
> virtio_notify_config(vdev);
> }
>
> +static void virtio_blk_drain_threads(void *opaque)
> +{
> +#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
> + VirtIOBlock *s = VIRTIO_BLK(opaque);
> +
> + if (s->dataplane) {
> + virtio_blk_data_plane_stop(s->dataplane);
> + }
> +#endif
> +}
> +
> static const BlockDevOps virtio_block_ops = {
> .resize_cb = virtio_blk_resize,
> + .drain_threads_cb = virtio_blk_drain_threads,
> };
>
> void virtio_blk_set_conf(DeviceState *dev, VirtIOBlkConf *blk)
>
- [Qemu-devel] [RFC 00/13] dataplane: use block layer, Stefan Hajnoczi, 2013/06/14
- [Qemu-devel] [RFC 01/13] block: fix bdrv_flush() ordering in bdrv_close(), Stefan Hajnoczi, 2013/06/14
- [Qemu-devel] [RFC 02/13] dataplane: sync virtio.c and vring.c virtqueue state, Stefan Hajnoczi, 2013/06/14
- [Qemu-devel] [RFC 03/13] block: add BlockDevOps->drain_threads_cb(), Stefan Hajnoczi, 2013/06/14
- [Qemu-devel] [RFC 04/13] virtio-blk: implement BlockDevOps->drain_threads_cb(), Stefan Hajnoczi, 2013/06/14
- Re: [Qemu-devel] [RFC 04/13] virtio-blk: implement BlockDevOps->drain_threads_cb(),
Paolo Bonzini <=
- [Qemu-devel] [RFC 06/13] qemu-thread: add TLS wrappers, Stefan Hajnoczi, 2013/06/14
- [Qemu-devel] [RFC 07/13] block: add thread_aio_context TLS variable, Stefan Hajnoczi, 2013/06/14
- [Qemu-devel] [RFC 09/13] main-loop: use thread-local AioContext, Stefan Hajnoczi, 2013/06/14
- [Qemu-devel] [RFC 10/13] block: disable I/O throttling outside main loop, Stefan Hajnoczi, 2013/06/14
- [Qemu-devel] [RFC 08/13] block: drop bdrv_get_aio_context(), Stefan Hajnoczi, 2013/06/14