Extract the skb metadata budget check from virtio_transport_inc_rx_pkt() into virtio_transport_rx_buf_full(). The helper retains the existing condition and will be reused by a following RX batching change. Signed-off-by: Jia Jia --- net/vmw_vsock/virtio_transport_common.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index 43325d7aebbb1..2a9cfed085515 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -576,11 +576,17 @@ virtio_transport_collapse_rx_queue(struct virtio_vsock_sock *vvs, skb_queue_splice(&new_queue, &vvs->rx_queue); } -static bool virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs, - u32 len) +static bool +virtio_transport_rx_buf_full(struct virtio_vsock_sock *vvs) { u64 skb_overhead = (skb_queue_len(&vvs->rx_queue) + 1) * SKB_TRUESIZE(0); + return skb_overhead > vvs->buf_alloc; +} + +static bool virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs, + u32 len) +{ /* Allow at most buf_alloc * 2 total budget (payload + overhead), * similar to how SO_RCVBUF is doubled to reserve space for sk_buff * metadata. Check payload against buf_alloc to be sure the other @@ -588,7 +594,7 @@ static bool virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs, * queue growth. */ if ((u64)vvs->buf_used + len > vvs->buf_alloc || - skb_overhead > vvs->buf_alloc) + virtio_transport_rx_buf_full(vvs)) return false; vvs->rx_bytes += len; -- 2.53.0