Re: 9pfs hangs since 4.7

From: Tuomas Tynkkynen
Date: Tue Jan 03 2017 - 18:36:55 EST


On Mon, 2 Jan 2017 16:23:09 +0000
Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote:


>
> What I'd like to see is a log of 9p traffic in those; to hell with the
> payloads, just the type and tag of from each message [...]

Thanks for the suggestions. With the following patch to QEMU:

diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index aea7e9d..8a6b426 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -662,6 +662,7 @@ static void coroutine_fn pdu_complete(V9fsPDU *pdu, ssize_t len)

/* fill out the header */
pdu_marshal(pdu, 0, "dbw", (int32_t)len, id, pdu->tag);
+ fprintf(stderr, "complete %d %04x\n", id, pdu->tag);

/* keep these in sync */
pdu->size = len;
@@ -2347,6 +2348,7 @@ static void v9fs_flush(void *opaque)
return;
}
trace_v9fs_flush(pdu->tag, pdu->id, tag);
+ fprintf(stderr, "flush %04x %04x\n", tag, pdu->tag);

QLIST_FOREACH(cancel_pdu, &s->active_list, next) {
if (cancel_pdu->tag == tag) {
diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c
index 1782e4a..6a5ac04 100644
--- a/hw/9pfs/virtio-9p-device.c
+++ b/hw/9pfs/virtio-9p-device.c
@@ -76,6 +76,7 @@ static void handle_9p_output(VirtIODevice *vdev, VirtQueue *vq)

pdu->id = out.id;
pdu->tag = le16_to_cpu(out.tag_le);
+ fprintf(stderr, "out %d %04x\n", pdu->id, pdu->tag);

qemu_co_queue_init(&pdu->complete);
pdu_submit(pdu);

I got these logs from the server & client with 9p tracepoints enabled:

https://gist.githubusercontent.com/dezgeg/02447100b3182167403099fe7de4d941/raw/3772e408ddf586fb662ac9148fc10943529a6b99/dmesg%2520with%25209p%2520trace
https://gist.githubusercontent.com/dezgeg/e1e0c7f354042e1d9bdf7e9135934a65/raw/3a0e3b4f7a5229fd0be032c6839b578d47a21ce4/qemu.log