Add and implement the response_buffer_size callback for the Xen transport. Returns the size of the response buffer from the rings in_sg, as limit for 9p server while generating a response for supplied PDU.
Signed-off-by: Christian Schoenebeck <[email protected]> --- hw/9pfs/xen-9p-backend.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/9pfs/xen-9p-backend.c b/hw/9pfs/xen-9p-backend.c index 94654022fe..258a1f2ec7 100644 --- a/hw/9pfs/xen-9p-backend.c +++ b/hw/9pfs/xen-9p-backend.c @@ -256,6 +256,16 @@ static size_t xen_9p_msize_limit(V9fsState *s) return XEN_FLEX_RING_SIZE(xen_9pfs->rings[0].ring_order); } +static size_t xen_9pfs_response_buffer_size(V9fsPDU *pdu) +{ + Xen9pfsDev *priv = container_of(pdu->s, Xen9pfsDev, state); + Xen9pfsRing *ring = &priv->rings[pdu->tag % priv->num_rings]; + int num; + + xen_9pfs_in_sg(ring, ring->sg, &num, pdu->idx, 0); + return iov_size(ring->sg, num); +} + static const V9fsTransport xen_9p_transport = { .pdu_vmarshal = xen_9pfs_pdu_vmarshal, .pdu_vunmarshal = xen_9pfs_pdu_vunmarshal, @@ -263,6 +273,7 @@ static const V9fsTransport xen_9p_transport = { .init_out_iov_from_pdu = xen_9pfs_init_out_iov_from_pdu, .push_and_notify = xen_9pfs_push_and_notify, .msize_limit = xen_9p_msize_limit, + .response_buffer_size = xen_9pfs_response_buffer_size, }; static int xen_9pfs_init(struct XenLegacyDevice *xendev) -- 2.47.3
