[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] virtio-9p: add reset handler
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH] virtio-9p: add reset handler |
Date: |
Fri, 7 Oct 2016 16:21:17 +0100 |
User-agent: |
Mutt/1.7.0 (2016-08-17) |
On Thu, Oct 06, 2016 at 03:12:10PM +0200, Greg Kurz wrote:
> Virtio devices should implement the VirtIODevice->reset() function to
> perform necessary cleanup actions and to bring the device to a quiescent
> state.
>
> In the case of the virtio-9p device, this means:
> - emptying the list of active PDUs (i.e. draining all in-flight I/O)
> - freeing all fids (i.e. close open file descriptors and free memory)
>
> That's what this patch does.
>
> The reset handler first waits for all active PDUs to complete. Since
> completion happens in the QEMU global aio context, we just have to
> loop around aio_poll() until the active list is empty.
>
> The freeing part involves some actions to be performed on the backend,
> like closing file descriptors or flushing extended attributes to the
> underlying filesystem. The virtfs_reset() function already does the
> job: it calls free_fid() for all open fids not involved in an ongoing
> I/O operation. We are sure this is the case since we have drained
> the PDU active list.
>
> The current code implements all backend accesses with coroutines, but we
> want to stay synchronous on the reset path. We can either change the
> current code to be able to run when not in coroutine context, or create
> a coroutine context and wait for virtfs_reset() to complete. This patch
> goes for the latter because it results in simpler code.
>
> Note that we also need to create a dummy PDU because it is also an API
> to pass the FsContext pointer to all backend callbacks.
>
> Signed-off-by: Greg Kurz <address@hidden>
> ---
> hw/9pfs/9p.c | 31 +++++++++++++++++++++++++++++++
> hw/9pfs/9p.h | 1 +
> hw/9pfs/virtio-9p-device.c | 8 ++++++++
> 3 files changed, 40 insertions(+)
Reviewed-by: Stefan Hajnoczi <address@hidden>
signature.asc
Description: PGP signature