diff options
| author | Pavel Emelyanov <xemul@openvz.org> | 2008-04-16 03:48:04 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-04-16 03:48:04 -0400 |
| commit | a9fde2607895667823e9d1172fc193087125ef68 (patch) | |
| tree | cf5481c66e911dc43bd2c9463603562d35af4cfe /net/8021q | |
| parent | 669f87baab90183e13b95480aecf8d7bac92ca3c (diff) | |
[VLAN]: Tag vlan_group_device with net device, not ifindex.
Currently vlan group is searched using one key - the ifindex.
We'll have to lookup the vlan_group by two keys - ifindex and
net. Turning the vlan_group lookup key to struct net_device
pointer will make this process easier.
Besides, this will eliminate one more place in the networking,
that assumes that indexes are unique in the kernel.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Acked-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/8021q')
| -rw-r--r-- | net/8021q/vlan.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 5975ec3be7f3..cf8d810a130d 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
| @@ -65,14 +65,14 @@ static inline unsigned int vlan_grp_hashfn(unsigned int idx) | |||
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | /* Must be invoked with RCU read lock (no preempt) */ | 67 | /* Must be invoked with RCU read lock (no preempt) */ |
| 68 | static struct vlan_group *__vlan_find_group(int real_dev_ifindex) | 68 | static struct vlan_group *__vlan_find_group(struct net_device *real_dev) |
| 69 | { | 69 | { |
| 70 | struct vlan_group *grp; | 70 | struct vlan_group *grp; |
| 71 | struct hlist_node *n; | 71 | struct hlist_node *n; |
| 72 | int hash = vlan_grp_hashfn(real_dev_ifindex); | 72 | int hash = vlan_grp_hashfn(real_dev->ifindex); |
| 73 | 73 | ||
| 74 | hlist_for_each_entry_rcu(grp, n, &vlan_group_hash[hash], hlist) { | 74 | hlist_for_each_entry_rcu(grp, n, &vlan_group_hash[hash], hlist) { |
| 75 | if (grp->real_dev_ifindex == real_dev_ifindex) | 75 | if (grp->real_dev == real_dev) |
| 76 | return grp; | 76 | return grp; |
| 77 | } | 77 | } |
| 78 | 78 | ||
| @@ -86,7 +86,7 @@ static struct vlan_group *__vlan_find_group(int real_dev_ifindex) | |||
| 86 | struct net_device *__find_vlan_dev(struct net_device *real_dev, | 86 | struct net_device *__find_vlan_dev(struct net_device *real_dev, |
| 87 | unsigned short VID) | 87 | unsigned short VID) |
| 88 | { | 88 | { |
| 89 | struct vlan_group *grp = __vlan_find_group(real_dev->ifindex); | 89 | struct vlan_group *grp = __vlan_find_group(real_dev); |
| 90 | 90 | ||
| 91 | if (grp) | 91 | if (grp) |
| 92 | return vlan_group_get_device(grp, VID); | 92 | return vlan_group_get_device(grp, VID); |
| @@ -103,7 +103,7 @@ static void vlan_group_free(struct vlan_group *grp) | |||
| 103 | kfree(grp); | 103 | kfree(grp); |
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | static struct vlan_group *vlan_group_alloc(int ifindex) | 106 | static struct vlan_group *vlan_group_alloc(struct net_device *real_dev) |
| 107 | { | 107 | { |
| 108 | struct vlan_group *grp; | 108 | struct vlan_group *grp; |
| 109 | 109 | ||
| @@ -111,9 +111,9 @@ static struct vlan_group *vlan_group_alloc(int ifindex) | |||
| 111 | if (!grp) | 111 | if (!grp) |
| 112 | return NULL; | 112 | return NULL; |
| 113 | 113 | ||
| 114 | grp->real_dev_ifindex = ifindex; | 114 | grp->real_dev = real_dev; |
| 115 | hlist_add_head_rcu(&grp->hlist, | 115 | hlist_add_head_rcu(&grp->hlist, |
| 116 | &vlan_group_hash[vlan_grp_hashfn(ifindex)]); | 116 | &vlan_group_hash[vlan_grp_hashfn(real_dev->ifindex)]); |
| 117 | return grp; | 117 | return grp; |
| 118 | } | 118 | } |
| 119 | 119 | ||
| @@ -151,7 +151,7 @@ void unregister_vlan_dev(struct net_device *dev) | |||
| 151 | 151 | ||
| 152 | ASSERT_RTNL(); | 152 | ASSERT_RTNL(); |
| 153 | 153 | ||
| 154 | grp = __vlan_find_group(real_dev->ifindex); | 154 | grp = __vlan_find_group(real_dev); |
| 155 | BUG_ON(!grp); | 155 | BUG_ON(!grp); |
| 156 | 156 | ||
| 157 | vlan_proc_rem_dev(dev); | 157 | vlan_proc_rem_dev(dev); |
| @@ -246,9 +246,9 @@ int register_vlan_dev(struct net_device *dev) | |||
| 246 | struct vlan_group *grp, *ngrp = NULL; | 246 | struct vlan_group *grp, *ngrp = NULL; |
| 247 | int err; | 247 | int err; |
| 248 | 248 | ||
| 249 | grp = __vlan_find_group(real_dev->ifindex); | 249 | grp = __vlan_find_group(real_dev); |
| 250 | if (!grp) { | 250 | if (!grp) { |
| 251 | ngrp = grp = vlan_group_alloc(real_dev->ifindex); | 251 | ngrp = grp = vlan_group_alloc(real_dev); |
| 252 | if (!grp) | 252 | if (!grp) |
| 253 | return -ENOBUFS; | 253 | return -ENOBUFS; |
| 254 | } | 254 | } |
| @@ -412,7 +412,7 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, | |||
| 412 | goto out; | 412 | goto out; |
| 413 | } | 413 | } |
| 414 | 414 | ||
| 415 | grp = __vlan_find_group(dev->ifindex); | 415 | grp = __vlan_find_group(dev); |
| 416 | if (!grp) | 416 | if (!grp) |
| 417 | goto out; | 417 | goto out; |
| 418 | 418 | ||
