The 9p protocol relies on a reliable transport, but the current code
treats transport errors (ie, failure to marshal or unmarshal) as if
they were coming from the backend. This doesn't make sense: if the
transport failed, we should notify the guest that the transport is
broken and needs to be reset, using transport specific means.
This series modifies the existing virtio-9p transport so that it can
notify the guest about transport failures. The core 9p code is modified
as well so that it stops handling requests when the transport fails.
---
Greg Kurz (5):
virtio: Error object based virtio_error()
virtio-9p: factor out virtio_9p_error_err()
fsdev: don't allow unknown format in marshal/unmarshal
9pfs: drop pdu_push_and_notify()
9pfs: handle broken transport
fsdev/9p-iov-marshal.c | 4 +--
hw/9pfs/9p.c | 43 +++++++++++++++++++++----------
hw/9pfs/9p.h | 1 +
hw/9pfs/virtio-9p-device.c | 61 ++++++++++++++++++++++++++++++++------------
hw/virtio/virtio.c | 21 ++++++++++++---
include/hw/virtio/virtio.h | 1 +
6 files changed, 93 insertions(+), 38 deletions(-)
--
Greg