|
@@ -406,6 +406,7 @@ p9_virtio_zc_request(struct p9_client *client, struct p9_req_t *req,
|
|
|
p9_debug(P9_DEBUG_TRANS, "virtio request\n");
|
|
|
|
|
|
if (uodata) {
|
|
|
+ __le32 sz;
|
|
|
int n = p9_get_mapped_pages(chan, &out_pages, uodata,
|
|
|
outlen, &offs, &need_drop);
|
|
|
if (n < 0)
|
|
@@ -416,6 +417,12 @@ p9_virtio_zc_request(struct p9_client *client, struct p9_req_t *req,
|
|
|
memcpy(&req->tc->sdata[req->tc->size - 4], &v, 4);
|
|
|
outlen = n;
|
|
|
}
|
|
|
+ /* The size field of the message must include the length of the
|
|
|
+ * header and the length of the data. We didn't actually know
|
|
|
+ * the length of the data until this point so add it in now.
|
|
|
+ */
|
|
|
+ sz = cpu_to_le32(req->tc->size + outlen);
|
|
|
+ memcpy(&req->tc->sdata[0], &sz, sizeof(sz));
|
|
|
} else if (uidata) {
|
|
|
int n = p9_get_mapped_pages(chan, &in_pages, uidata,
|
|
|
inlen, &offs, &need_drop);
|