diff options
author | David S. Miller <davem@davemloft.net> | 2010-12-27 01:37:05 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-12-27 01:37:05 -0500 |
commit | 17f7f4d9fcce8f1b75b5f735569309dee7665968 (patch) | |
tree | 14d7e49ca0053a0fcab3c33b5023bf3f90c5c08a /net/ipv4 | |
parent | 041110a439e21cd40709ead4ffbfa8034619ad77 (diff) | |
parent | d7c1255a3a21e98bdc64df8ccf005a174d7e6289 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
net/ipv4/fib_frontend.c
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/fib_frontend.c | 10 | ||||
-rw-r--r-- | net/ipv4/route.c | 7 | ||||
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 4 |
3 files changed, 14 insertions, 7 deletions
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index 9f8bb68911e4..1d2cdd43a878 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c | |||
@@ -159,13 +159,19 @@ struct net_device *__ip_dev_find(struct net *net, __be32 addr, bool devref) | |||
159 | { | 159 | { |
160 | struct flowi fl = { | 160 | struct flowi fl = { |
161 | .fl4_dst = addr, | 161 | .fl4_dst = addr, |
162 | .flags = FLOWI_FLAG_MATCH_ANY_IIF | ||
163 | }; | 162 | }; |
164 | struct fib_result res = { 0 }; | 163 | struct fib_result res = { 0 }; |
165 | struct net_device *dev = NULL; | 164 | struct net_device *dev = NULL; |
165 | struct fib_table *local_table; | ||
166 | |||
167 | #ifdef CONFIG_IP_MULTIPLE_TABLES | ||
168 | res.r = NULL; | ||
169 | #endif | ||
166 | 170 | ||
167 | rcu_read_lock(); | 171 | rcu_read_lock(); |
168 | if (fib_lookup(net, &fl, &res)) { | 172 | local_table = fib_get_table(net, RT_TABLE_LOCAL); |
173 | if (!local_table || | ||
174 | fib_table_lookup(local_table, &fl, &res, FIB_LOOKUP_NOREF)) { | ||
169 | rcu_read_unlock(); | 175 | rcu_read_unlock(); |
170 | return NULL; | 176 | return NULL; |
171 | } | 177 | } |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index d8b4f4d0d66e..f1defb7d88e8 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -2562,9 +2562,10 @@ static int ip_route_output_slow(struct net *net, struct rtable **rp, | |||
2562 | goto out; | 2562 | goto out; |
2563 | 2563 | ||
2564 | /* RACE: Check return value of inet_select_addr instead. */ | 2564 | /* RACE: Check return value of inet_select_addr instead. */ |
2565 | if (rcu_dereference(dev_out->ip_ptr) == NULL) | 2565 | if (!(dev_out->flags & IFF_UP) || !__in_dev_get_rcu(dev_out)) { |
2566 | goto out; /* Wrong error code */ | 2566 | err = -ENETUNREACH; |
2567 | 2567 | goto out; | |
2568 | } | ||
2568 | if (ipv4_is_local_multicast(oldflp->fl4_dst) || | 2569 | if (ipv4_is_local_multicast(oldflp->fl4_dst) || |
2569 | ipv4_is_lbcast(oldflp->fl4_dst)) { | 2570 | ipv4_is_lbcast(oldflp->fl4_dst)) { |
2570 | if (!fl.fl4_src) | 2571 | if (!fl.fl4_src) |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index f4011027543d..856f68466d49 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -2000,7 +2000,7 @@ static void *listening_get_next(struct seq_file *seq, void *cur) | |||
2000 | get_req: | 2000 | get_req: |
2001 | req = icsk->icsk_accept_queue.listen_opt->syn_table[st->sbucket]; | 2001 | req = icsk->icsk_accept_queue.listen_opt->syn_table[st->sbucket]; |
2002 | } | 2002 | } |
2003 | sk = sk_next(st->syn_wait_sk); | 2003 | sk = sk_nulls_next(st->syn_wait_sk); |
2004 | st->state = TCP_SEQ_STATE_LISTENING; | 2004 | st->state = TCP_SEQ_STATE_LISTENING; |
2005 | read_unlock_bh(&icsk->icsk_accept_queue.syn_wait_lock); | 2005 | read_unlock_bh(&icsk->icsk_accept_queue.syn_wait_lock); |
2006 | } else { | 2006 | } else { |
@@ -2009,7 +2009,7 @@ get_req: | |||
2009 | if (reqsk_queue_len(&icsk->icsk_accept_queue)) | 2009 | if (reqsk_queue_len(&icsk->icsk_accept_queue)) |
2010 | goto start_req; | 2010 | goto start_req; |
2011 | read_unlock_bh(&icsk->icsk_accept_queue.syn_wait_lock); | 2011 | read_unlock_bh(&icsk->icsk_accept_queue.syn_wait_lock); |
2012 | sk = sk_next(sk); | 2012 | sk = sk_nulls_next(sk); |
2013 | } | 2013 | } |
2014 | get_sk: | 2014 | get_sk: |
2015 | sk_nulls_for_each_from(sk, node) { | 2015 | sk_nulls_for_each_from(sk, node) { |