net: avoid a pair of dst_hold()/dst_release() in ip_append_data()
authorEric Dumazet <dada1@cosmosbay.com>
Mon, 24 Nov 2008 23:52:46 +0000 (15:52 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Nov 2008 23:52:46 +0000 (15:52 -0800)
commit2e77d89b2fa8e3f8325b8ce7893ec3645f41aff5
treeae40aa75449f705bd166630f9bcb5f41373d8248
parent4db0acf3c0afbbbb2ae35a65f8896ca6655a47ec
net: avoid a pair of dst_hold()/dst_release() in ip_append_data()

We can reduce pressure on dst entry refcount that slowdown UDP transmit
path on SMP machines. This pressure is visible on RTP servers when
delivering content to mediagateways, especially big ones, handling
thousand of streams. Several cpus send UDP frames to the same
destination, hence use the same dst entry.

This patch makes ip_append_data() eventually steal the refcount its
callers had to take on the dst entry.

This doesnt avoid all refcounting, but still gives speedups on SMP,
on UDP/RAW transmit path

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ip.h
net/ipv4/icmp.c
net/ipv4/ip_output.c
net/ipv4/raw.c
net/ipv4/udp.c