linux-stable/net
Alex Copot aacd9289af tcp: bind() use stronger condition for bind_conflict
We must try harder to get unique (addr, port) pairs when
doing port autoselection for sockets with SO_REUSEADDR
option set.

We achieve this by adding a relaxation parameter to
inet_csk_bind_conflict. When 'relax' parameter is off
we return a conflict whenever the current searched
pair (addr, port) is not unique.

This tries to address the problems reported in patch:
	8d238b25b1
	Revert "tcp: bind() fix when many ports are bound"

Tests where ran for creating and binding(0) many sockets
on 100 IPs. The results are, on average:

	* 60000 sockets, 600 ports / IP:
		* 0.210 s, 620 (IP, port) duplicates without patch
		* 0.219 s, no duplicates with patch
	* 100000 sockets, 1000 ports / IP:
		* 0.371 s, 1720 duplicates without patch
		* 0.373 s, no duplicates with patch
	* 200000 sockets, 2000 ports / IP:
		* 0.766 s, 6900 duplicates without patch
		* 0.768 s, no duplicates with patch
	* 500000 sockets, 5000 ports / IP:
		* 2.227 s, 41500 duplicates without patch
		* 2.284 s, no duplicates with patch

Signed-off-by: Alex Copot <alex.mihai.c@gmail.com>
Signed-off-by: Daniel Baluta <dbaluta@ixiacom.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-04-14 15:28:55 -04:00
..
9p
802 net/garp: fix GID rbtree ordering 2012-04-13 13:10:33 -04:00
8021q
appletalk
atm pppoatm: Fix excessive queue bloat 2012-04-13 13:03:45 -04:00
ax25
batman-adv batman-adv: add bridge loop avoidance compile option 2012-04-11 14:29:00 +02:00
bluetooth Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth 2012-04-09 15:47:49 -04:00
bridge Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-12 19:41:23 -04:00
caif caif: set traffic class for caif packets 2012-04-13 11:37:36 -04:00
can
ceph
core neighbour: Make neigh_table_init_no_netlink() static. 2012-04-13 14:00:44 -04:00
dcb
dccp inet: makes syn_ack_timeout mandatory 2012-04-14 15:24:26 -04:00
decnet Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
dns_resolver
dsa
econet
ethernet
ieee802154
ipv4 tcp: bind() use stronger condition for bind_conflict 2012-04-14 15:28:55 -04:00
ipv6 tcp: bind() use stronger condition for bind_conflict 2012-04-14 15:28:55 -04:00
ipx
irda
iucv
key net/key/af_key.c: add missing kfree_skb 2012-04-13 11:01:44 -04:00
l2tp udp: intoduce udp_encap_needed static_key 2012-04-13 13:39:37 -04:00
lapb
llc
mac80211 Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless 2012-04-12 13:49:28 -04:00
netfilter Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-12 19:41:23 -04:00
netlabel
netlink Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
netrom
nfc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-12 19:41:23 -04:00
openvswitch Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
packet
phonet Phonet: missing headers (sparse) 2012-04-13 14:03:16 -04:00
rds
rfkill
rose
rxrpc
sched
sctp
sunrpc
tipc
unix
wanrouter
wimax
wireless Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-12 19:41:23 -04:00
x25
xfrm
compat.c
Kconfig
Makefile
nonet.c
socket.c tcp: tcp_sendpages() should call tcp_push() once 2012-04-05 19:04:27 -04:00
sysctl_net.c