diff options
| author | Patrick McHardy <kaber@trash.net> | 2010-04-20 16:02:01 +0200 | 
|---|---|---|
| committer | Patrick McHardy <kaber@trash.net> | 2010-04-20 16:02:01 +0200 | 
| commit | 62910554656cdcd6b6f84a5154c4155aae4ca231 (patch) | |
| tree | dcf14004f6fd2ef7154362ff948bfeba0f3ea92d /net/ipv4/udp.c | |
| parent | 22265a5c3c103cf8c50be62e6c90d045eb649e6d (diff) | |
| parent | ab9304717f7624c41927f442e6b6d418b2d8b3e4 (diff) | |
| download | olio-linux-3.10-62910554656cdcd6b6f84a5154c4155aae4ca231.tar.xz olio-linux-3.10-62910554656cdcd6b6f84a5154c4155aae4ca231.zip  | |
Merge branch 'master' of /repos/git/net-next-2.6
Conflicts:
	Documentation/feature-removal-schedule.txt
	net/ipv6/netfilter/ip6t_REJECT.c
	net/netfilter/xt_limit.c
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net/ipv4/udp.c')
| -rw-r--r-- | net/ipv4/udp.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 7af756d0f93..666b963496f 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -95,6 +95,7 @@  #include <linux/mm.h>  #include <linux/inet.h>  #include <linux/netdevice.h> +#include <linux/slab.h>  #include <net/tcp_states.h>  #include <linux/skbuff.h>  #include <linux/proc_fs.h> @@ -471,8 +472,8 @@ static struct sock *__udp4_lib_lookup(struct net *net, __be32 saddr,  			if (hslot->count < hslot2->count)  				goto begin; -			result = udp4_lib_lookup2(net, INADDR_ANY, sport, -						  daddr, hnum, dif, +			result = udp4_lib_lookup2(net, saddr, sport, +						  INADDR_ANY, hnum, dif,  						  hslot2, slot2);  		}  		rcu_read_unlock(); @@ -1216,6 +1217,7 @@ int udp_disconnect(struct sock *sk, int flags)  	sk->sk_state = TCP_CLOSE;  	inet->inet_daddr = 0;  	inet->inet_dport = 0; +	inet_rps_save_rxhash(sk, 0);  	sk->sk_bound_dev_if = 0;  	if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))  		inet_reset_saddr(sk); @@ -1257,8 +1259,12 @@ EXPORT_SYMBOL(udp_lib_unhash);  static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)  { -	int rc = sock_queue_rcv_skb(sk, skb); +	int rc; + +	if (inet_sk(sk)->inet_daddr) +		inet_rps_save_rxhash(sk, skb->rxhash); +	rc = sock_queue_rcv_skb(sk, skb);  	if (rc < 0) {  		int is_udplite = IS_UDPLITE(sk);  |