diff options
-rw-r--r-- | hw/9pfs/9p-local.c | 3 | ||||
-rw-r--r-- | hw/9pfs/9p.c | 12 | ||||
-rw-r--r-- | tests/virtio-9p-test.c | 24 |
3 files changed, 26 insertions, 13 deletions
diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c index 845675e7a1..7de07e1ba6 100644 --- a/hw/9pfs/9p-local.c +++ b/hw/9pfs/9p-local.c @@ -436,8 +436,7 @@ static ssize_t local_pwritev(FsContext *ctx, V9fsFidOpenState *fs, const struct iovec *iov, int iovcnt, off_t offset) { - ssize_t ret -; + ssize_t ret; #ifdef CONFIG_PREADV ret = pwritev(fs->fd, iov, iovcnt, offset); #else diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index 06b6e7ec66..99e94723b9 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -1582,7 +1582,7 @@ out_nofid: v9fs_string_free(&name); } -static void v9fs_fsync(void *opaque) +static void coroutine_fn v9fs_fsync(void *opaque) { int err; int32_t fid; @@ -1666,7 +1666,7 @@ static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu, if (is_write) { pdu->s->transport->init_out_iov_from_pdu(pdu, &iov, &niov); } else { - pdu->s->transport->init_in_iov_from_pdu(pdu, &iov, &niov, size); + pdu->s->transport->init_in_iov_from_pdu(pdu, &iov, &niov, size + skip); } qemu_iovec_init_external(&elem, iov, niov); @@ -1696,8 +1696,8 @@ static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp, } offset += err; - v9fs_init_qiov_from_pdu(&qiov_full, pdu, 0, read_count, false); - err = v9fs_pack(qiov_full.iov, qiov_full.niov, offset, + v9fs_init_qiov_from_pdu(&qiov_full, pdu, offset, read_count, false); + err = v9fs_pack(qiov_full.iov, qiov_full.niov, 0, ((char *)fidp->fs.xattr.value) + off, read_count); qemu_iovec_destroy(&qiov_full); @@ -2348,7 +2348,7 @@ out_nofid: v9fs_string_free(&symname); } -static void v9fs_flush(void *opaque) +static void coroutine_fn v9fs_flush(void *opaque) { ssize_t err; int16_t tag; @@ -3465,7 +3465,7 @@ int v9fs_device_realize_common(V9fsState *s, Error **errp) /* initialize pdu allocator */ QLIST_INIT(&s->free_list); QLIST_INIT(&s->active_list); - for (i = 0; i < (MAX_REQ - 1); i++) { + for (i = 0; i < MAX_REQ; i++) { QLIST_INSERT_HEAD(&s->free_list, &s->pdus[i], next); s->pdus[i].s = s; s->pdus[i].idx = i; diff --git a/tests/virtio-9p-test.c b/tests/virtio-9p-test.c index 060407b20e..9556291567 100644 --- a/tests/virtio-9p-test.c +++ b/tests/virtio-9p-test.c @@ -236,6 +236,16 @@ static void v9fs_req_send(P9Req *req) req->t_off = 0; } +static const char *rmessage_name(uint8_t id) +{ + return + id == P9_RLERROR ? "RLERROR" : + id == P9_RVERSION ? "RVERSION" : + id == P9_RATTACH ? "RATTACH" : + id == P9_RWALK ? "RWALK" : + "<unknown>"; +} + static void v9fs_req_recv(P9Req *req, uint8_t id) { QVirtIO9P *v9p = req->v9p; @@ -258,11 +268,15 @@ static void v9fs_req_recv(P9Req *req, uint8_t id) g_assert_cmpint(hdr.size, <=, P9_MAX_SIZE); g_assert_cmpint(hdr.tag, ==, req->tag); - if (hdr.id != id && hdr.id == P9_RLERROR) { - uint32_t err; - v9fs_uint32_read(req, &err); - g_printerr("Received Rlerror (%d) instead of Response %d\n", err, id); - g_assert_not_reached(); + if (hdr.id != id) { + g_printerr("Received response %d (%s) instead of %d (%s)\n", + hdr.id, rmessage_name(hdr.id), id, rmessage_name(id)); + + if (hdr.id == P9_RLERROR) { + uint32_t err; + v9fs_uint32_read(req, &err); + g_printerr("Rlerror has errno %d (%s)\n", err, strerror(err)); + } } g_assert_cmpint(hdr.id, ==, id); } |