diff options
author | YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org> | 2013-01-14 04:28:27 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-01-14 15:04:59 -0500 |
commit | 605928337866c6369ae60509fa2b10af325a25eb (patch) | |
tree | 7b786dbdffded3418e38c88ffa5394c51b8aba38 | |
parent | a66f566afc3a06f7588cd7a2c93125fce494162b (diff) |
ipv6 netevent: Remove old_neigh from netevent_redirect.
The only user is cxgb3 driver.
old_neigh is used to check device change, but it must not happen
on redirect. In this sense, we can remove old_neigh argument.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c | 35 | ||||
-rw-r--r-- | include/net/netevent.h | 3 | ||||
-rw-r--r-- | net/ipv6/route.c | 3 |
3 files changed, 13 insertions, 28 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c index 91d02eb51b8b..4232767862b5 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c +++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c | |||
@@ -64,9 +64,8 @@ static const unsigned int MAX_ATIDS = 64 * 1024; | |||
64 | static const unsigned int ATID_BASE = 0x10000; | 64 | static const unsigned int ATID_BASE = 0x10000; |
65 | 65 | ||
66 | static void cxgb_neigh_update(struct neighbour *neigh); | 66 | static void cxgb_neigh_update(struct neighbour *neigh); |
67 | static void cxgb_redirect(struct dst_entry *old, struct neighbour *old_neigh, | 67 | static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new, |
68 | struct dst_entry *new, struct neighbour *new_neigh, | 68 | struct neighbour *neigh, const void *daddr); |
69 | const void *daddr); | ||
70 | 69 | ||
71 | static inline int offload_activated(struct t3cdev *tdev) | 70 | static inline int offload_activated(struct t3cdev *tdev) |
72 | { | 71 | { |
@@ -970,10 +969,9 @@ static int nb_callback(struct notifier_block *self, unsigned long event, | |||
970 | } | 969 | } |
971 | case (NETEVENT_REDIRECT):{ | 970 | case (NETEVENT_REDIRECT):{ |
972 | struct netevent_redirect *nr = ctx; | 971 | struct netevent_redirect *nr = ctx; |
973 | cxgb_redirect(nr->old, nr->old_neigh, | 972 | cxgb_redirect(nr->old, nr->new, nr->neigh, |
974 | nr->new, nr->new_neigh, | ||
975 | nr->daddr); | 973 | nr->daddr); |
976 | cxgb_neigh_update(nr->new_neigh); | 974 | cxgb_neigh_update(nr->neigh); |
977 | break; | 975 | break; |
978 | } | 976 | } |
979 | default: | 977 | default: |
@@ -1109,11 +1107,11 @@ static void set_l2t_ix(struct t3cdev *tdev, u32 tid, struct l2t_entry *e) | |||
1109 | tdev->send(tdev, skb); | 1107 | tdev->send(tdev, skb); |
1110 | } | 1108 | } |
1111 | 1109 | ||
1112 | static void cxgb_redirect(struct dst_entry *old, struct neighbour *old_neigh, | 1110 | static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new, |
1113 | struct dst_entry *new, struct neighbour *new_neigh, | 1111 | struct neighbour *neigh, |
1114 | const void *daddr) | 1112 | const void *daddr) |
1115 | { | 1113 | { |
1116 | struct net_device *olddev, *newdev; | 1114 | struct net_device *dev; |
1117 | struct tid_info *ti; | 1115 | struct tid_info *ti; |
1118 | struct t3cdev *tdev; | 1116 | struct t3cdev *tdev; |
1119 | u32 tid; | 1117 | u32 tid; |
@@ -1121,26 +1119,15 @@ static void cxgb_redirect(struct dst_entry *old, struct neighbour *old_neigh, | |||
1121 | struct l2t_entry *e; | 1119 | struct l2t_entry *e; |
1122 | struct t3c_tid_entry *te; | 1120 | struct t3c_tid_entry *te; |
1123 | 1121 | ||
1124 | olddev = old_neigh->dev; | 1122 | dev = neigh->dev; |
1125 | newdev = new_neigh->dev; | ||
1126 | 1123 | ||
1127 | if (!is_offloading(olddev)) | 1124 | if (!is_offloading(dev)) |
1128 | return; | ||
1129 | if (!is_offloading(newdev)) { | ||
1130 | pr_warn("%s: Redirect to non-offload device ignored\n", | ||
1131 | __func__); | ||
1132 | return; | 1125 | return; |
1133 | } | 1126 | tdev = dev2t3cdev(dev); |
1134 | tdev = dev2t3cdev(olddev); | ||
1135 | BUG_ON(!tdev); | 1127 | BUG_ON(!tdev); |
1136 | if (tdev != dev2t3cdev(newdev)) { | ||
1137 | pr_warn("%s: Redirect to different offload device ignored\n", | ||
1138 | __func__); | ||
1139 | return; | ||
1140 | } | ||
1141 | 1128 | ||
1142 | /* Add new L2T entry */ | 1129 | /* Add new L2T entry */ |
1143 | e = t3_l2t_get(tdev, new, newdev, daddr); | 1130 | e = t3_l2t_get(tdev, new, dev, daddr); |
1144 | if (!e) { | 1131 | if (!e) { |
1145 | pr_err("%s: couldn't allocate new l2t entry!\n", __func__); | 1132 | pr_err("%s: couldn't allocate new l2t entry!\n", __func__); |
1146 | return; | 1133 | return; |
diff --git a/include/net/netevent.h b/include/net/netevent.h index 3ce4988c9c08..fe630dde35c3 100644 --- a/include/net/netevent.h +++ b/include/net/netevent.h | |||
@@ -16,9 +16,8 @@ struct neighbour; | |||
16 | 16 | ||
17 | struct netevent_redirect { | 17 | struct netevent_redirect { |
18 | struct dst_entry *old; | 18 | struct dst_entry *old; |
19 | struct neighbour *old_neigh; | ||
20 | struct dst_entry *new; | 19 | struct dst_entry *new; |
21 | struct neighbour *new_neigh; | 20 | struct neighbour *neigh; |
22 | const void *daddr; | 21 | const void *daddr; |
23 | }; | 22 | }; |
24 | 23 | ||
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 34f392f050c1..7c34c01b515b 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -1803,10 +1803,9 @@ static void rt6_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_bu | |||
1803 | goto out; | 1803 | goto out; |
1804 | 1804 | ||
1805 | netevent.old = &rt->dst; | 1805 | netevent.old = &rt->dst; |
1806 | netevent.old_neigh = old_neigh; | ||
1807 | netevent.new = &nrt->dst; | 1806 | netevent.new = &nrt->dst; |
1808 | netevent.new_neigh = neigh; | ||
1809 | netevent.daddr = &msg->dest; | 1807 | netevent.daddr = &msg->dest; |
1808 | netevent.neigh = neigh; | ||
1810 | call_netevent_notifiers(NETEVENT_REDIRECT, &netevent); | 1809 | call_netevent_notifiers(NETEVENT_REDIRECT, &netevent); |
1811 | 1810 | ||
1812 | if (rt->rt6i_flags & RTF_CACHE) { | 1811 | if (rt->rt6i_flags & RTF_CACHE) { |