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 <gr...@kaod.org> > --- > 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 <stefa...@redhat.com>
signature.asc
Description: PGP signature