aboutsummaryrefslogtreecommitdiffstats
path: root/net/8021q/vlan.c
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2008-04-16 03:48:04 -0400
committerDavid S. Miller <davem@davemloft.net>2008-04-16 03:48:04 -0400
commita9fde2607895667823e9d1172fc193087125ef68 (patch)
treecf5481c66e911dc43bd2c9463603562d35af4cfe /net/8021q/vlan.c
parent669f87baab90183e13b95480aecf8d7bac92ca3c (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/vlan.c')
-rw-r--r--net/8021q/vlan.c22
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) */
68static struct vlan_group *__vlan_find_group(int real_dev_ifindex) 68static 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)
86struct net_device *__find_vlan_dev(struct net_device *real_dev, 86struct 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
106static struct vlan_group *vlan_group_alloc(int ifindex) 106static 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