diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2007-11-14 00:34:06 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 17:53:37 -0500 |
commit | 352e512c32b634768303a43768245a0363cebbe7 (patch) | |
tree | 97509ac130ecbe2084808271ccc459918a9d5fc1 /net/ipv4/route.c | |
parent | b4ce92775c2e7ff9cf79cca4e0a19c8c5fd6287b (diff) |
[NET]: Eliminate duplicate copies of dst_discard
We have a number of copies of dst_discard scattered around the place
which all do the same thing, namely free a packet on the input or
output paths.
This patch deletes all of them except dst_discard and points all the
users to it.
The only non-trivial bit is decnet where it returns an error.
However, conceptually this is identical to the blackhole functions
used in IPv4 and IPv6 which do not return errors. So they should
either all return errors or all return zero. For now I've stuck with
the majority and picked zero as the return value.
It doesn't really matter in practice since few if any driver would
react differently depending on a zero return value or NET_RX_DROP.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/route.c')
-rw-r--r-- | net/ipv4/route.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 49e008568ddf..137b8eb666b7 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -92,6 +92,7 @@ | |||
92 | #include <linux/jhash.h> | 92 | #include <linux/jhash.h> |
93 | #include <linux/rcupdate.h> | 93 | #include <linux/rcupdate.h> |
94 | #include <linux/times.h> | 94 | #include <linux/times.h> |
95 | #include <net/dst.h> | ||
95 | #include <net/net_namespace.h> | 96 | #include <net/net_namespace.h> |
96 | #include <net/protocol.h> | 97 | #include <net/protocol.h> |
97 | #include <net/ip.h> | 98 | #include <net/ip.h> |
@@ -2357,12 +2358,6 @@ static struct dst_ops ipv4_dst_blackhole_ops = { | |||
2357 | }; | 2358 | }; |
2358 | 2359 | ||
2359 | 2360 | ||
2360 | static int ipv4_blackhole_output(struct sk_buff *skb) | ||
2361 | { | ||
2362 | kfree_skb(skb); | ||
2363 | return 0; | ||
2364 | } | ||
2365 | |||
2366 | static int ipv4_dst_blackhole(struct rtable **rp, struct flowi *flp, struct sock *sk) | 2361 | static int ipv4_dst_blackhole(struct rtable **rp, struct flowi *flp, struct sock *sk) |
2367 | { | 2362 | { |
2368 | struct rtable *ort = *rp; | 2363 | struct rtable *ort = *rp; |
@@ -2374,8 +2369,8 @@ static int ipv4_dst_blackhole(struct rtable **rp, struct flowi *flp, struct sock | |||
2374 | 2369 | ||
2375 | atomic_set(&new->__refcnt, 1); | 2370 | atomic_set(&new->__refcnt, 1); |
2376 | new->__use = 1; | 2371 | new->__use = 1; |
2377 | new->input = ipv4_blackhole_output; | 2372 | new->input = dst_discard; |
2378 | new->output = ipv4_blackhole_output; | 2373 | new->output = dst_discard; |
2379 | memcpy(new->metrics, ort->u.dst.metrics, RTAX_MAX*sizeof(u32)); | 2374 | memcpy(new->metrics, ort->u.dst.metrics, RTAX_MAX*sizeof(u32)); |
2380 | 2375 | ||
2381 | new->dev = ort->u.dst.dev; | 2376 | new->dev = ort->u.dst.dev; |