• Paolo Abeni's avatar
    udp: implement memory accounting helpers · f970bd9e
    Paolo Abeni authored
    Avoid using the generic helpers.
    Use the receive queue spin lock to protect the memory
    accounting operation, both on enqueue and on dequeue.
    
    On dequeue perform partial memory reclaiming, trying to
    leave a quantum of forward allocated memory.
    
    On enqueue use a custom helper, to allow some optimizations:
    - use a plain spin_lock() variant instead of the slightly
      costly spin_lock_irqsave(),
    - avoid dst_force check, since the calling code has already
      dropped the skb dst
    - avoid orphaning the skb, since skb_steal_sock() already did
      the work for us
    
    The above needs custom memory reclaiming on shutdown, provided
    by the udp_destruct_sock().
    
    v5 -> v6:
      - don't orphan the skb on enqueue
    
    v4 -> v5:
      - replace the mem_lock with the receive queue spin lock
      - ensure that the bh is always allowed to enqueue at least
        a skb, even if sk_rcvbuf is exceeded
    
    v3 -> v4:
      - reworked memory accunting, simplifying the schema
      - provide an helper for both memory scheduling and enqueuing
    
    v1 -> v2:
      - use a udp specific destrctor to perform memory reclaiming
      - remove a couple of helpers, unneeded after the above cleanup
      - do not reclaim memory on dequeue if not under memory
        pressure
      - reworked the fwd accounting schema to avoid potential
        integer overflow
    Acked-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f970bd9e
udp.c 66.2 KB