aboutsummaryrefslogtreecommitdiffstats
path: root/net/x25
diff options
context:
space:
mode:
authorSasha Levin <sasha.levin@oracle.com>2013-02-27 20:06:00 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-27 22:10:24 -0500
commitb67bfe0d42cac56c512dd5da4b1b347a23f4b70a (patch)
tree3d465aea12b97683f26ffa38eba8744469de9997 /net/x25
parent1e142b29e210b5dfb2deeb6ce2210b60af16d2a6 (diff)
hlist: drop the node parameter from iterators
I'm not sure why, but the hlist for each entry iterators were conceived list_for_each_entry(pos, head, member) The hlist ones were greedy and wanted an extra parameter: hlist_for_each_entry(tpos, pos, head, member) Why did they need an extra pos parameter? I'm not quite sure. Not only they don't really need it, it also prevents the iterator from looking exactly like the list iterator, which is unfortunate. Besides the semantic patch, there was some manual work required: - Fix up the actual hlist iterators in linux/list.h - Fix up the declaration of other iterators based on the hlist ones. - A very small amount of places were using the 'node' parameter, this was modified to use 'obj->member' instead. - Coccinelle didn't handle the hlist_for_each_entry_safe iterator properly, so those had to be fixed up manually. The semantic patch which is mostly the work of Peter Senna Tschudin is here: @@ iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host; type T; expression a,c,d,e; identifier b; statement S; @@ -T b; <+... when != b ( hlist_for_each_entry(a, - b, c, d) S | hlist_for_each_entry_continue(a, - b, c) S | hlist_for_each_entry_from(a, - b, c) S | hlist_for_each_entry_rcu(a, - b, c, d) S | hlist_for_each_entry_rcu_bh(a, - b, c, d) S | hlist_for_each_entry_continue_rcu_bh(a, - b, c) S | for_each_busy_worker(a, c, - b, d) S | ax25_uid_for_each(a, - b, c) S | ax25_for_each(a, - b, c) S | inet_bind_bucket_for_each(a, - b, c) S | sctp_for_each_hentry(a, - b, c) S | sk_for_each(a, - b, c) S | sk_for_each_rcu(a, - b, c) S | sk_for_each_from -(a, b) +(a) S + sk_for_each_from(a) S | sk_for_each_safe(a, - b, c, d) S | sk_for_each_bound(a, - b, c) S | hlist_for_each_entry_safe(a, - b, c, d, e) S | hlist_for_each_entry_continue_rcu(a, - b, c) S | nr_neigh_for_each(a, - b, c) S | nr_neigh_for_each_safe(a, - b, c, d) S | nr_node_for_each(a, - b, c) S | nr_node_for_each_safe(a, - b, c, d) S | - for_each_gfn_sp(a, c, d, b) S + for_each_gfn_sp(a, c, d) S | - for_each_gfn_indirect_valid_sp(a, c, d, b) S + for_each_gfn_indirect_valid_sp(a, c, d) S | for_each_host(a, - b, c) S | for_each_host_safe(a, - b, c, d) S | for_each_mesh_entry(a, - b, c, d) S ) ...+> [akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c] [akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c] [akpm@linux-foundation.org: checkpatch fixes] [akpm@linux-foundation.org: fix warnings] [akpm@linux-foudnation.org: redo intrusive kvm changes] Tested-by: Peter Senna Tschudin <peter.senna@gmail.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Sasha Levin <sasha.levin@oracle.com> Cc: Wu Fengguang <fengguang.wu@intel.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Gleb Natapov <gleb@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'net/x25')
-rw-r--r--net/x25/af_x25.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
index a306bc66000e..37ca9694aabe 100644
--- a/net/x25/af_x25.c
+++ b/net/x25/af_x25.c
@@ -208,11 +208,10 @@ static void x25_remove_socket(struct sock *sk)
208static void x25_kill_by_device(struct net_device *dev) 208static void x25_kill_by_device(struct net_device *dev)
209{ 209{
210 struct sock *s; 210 struct sock *s;
211 struct hlist_node *node;
212 211
213 write_lock_bh(&x25_list_lock); 212 write_lock_bh(&x25_list_lock);
214 213
215 sk_for_each(s, node, &x25_list) 214 sk_for_each(s, &x25_list)
216 if (x25_sk(s)->neighbour && x25_sk(s)->neighbour->dev == dev) 215 if (x25_sk(s)->neighbour && x25_sk(s)->neighbour->dev == dev)
217 x25_disconnect(s, ENETUNREACH, 0, 0); 216 x25_disconnect(s, ENETUNREACH, 0, 0);
218 217
@@ -280,12 +279,11 @@ static struct sock *x25_find_listener(struct x25_address *addr,
280{ 279{
281 struct sock *s; 280 struct sock *s;
282 struct sock *next_best; 281 struct sock *next_best;
283 struct hlist_node *node;
284 282
285 read_lock_bh(&x25_list_lock); 283 read_lock_bh(&x25_list_lock);
286 next_best = NULL; 284 next_best = NULL;
287 285
288 sk_for_each(s, node, &x25_list) 286 sk_for_each(s, &x25_list)
289 if ((!strcmp(addr->x25_addr, 287 if ((!strcmp(addr->x25_addr,
290 x25_sk(s)->source_addr.x25_addr) || 288 x25_sk(s)->source_addr.x25_addr) ||
291 !strcmp(addr->x25_addr, 289 !strcmp(addr->x25_addr,
@@ -323,9 +321,8 @@ found:
323static struct sock *__x25_find_socket(unsigned int lci, struct x25_neigh *nb) 321static struct sock *__x25_find_socket(unsigned int lci, struct x25_neigh *nb)
324{ 322{
325 struct sock *s; 323 struct sock *s;
326 struct hlist_node *node;
327 324
328 sk_for_each(s, node, &x25_list) 325 sk_for_each(s, &x25_list)
329 if (x25_sk(s)->lci == lci && x25_sk(s)->neighbour == nb) { 326 if (x25_sk(s)->lci == lci && x25_sk(s)->neighbour == nb) {
330 sock_hold(s); 327 sock_hold(s);
331 goto found; 328 goto found;
@@ -1782,11 +1779,10 @@ static struct notifier_block x25_dev_notifier = {
1782void x25_kill_by_neigh(struct x25_neigh *nb) 1779void x25_kill_by_neigh(struct x25_neigh *nb)
1783{ 1780{
1784 struct sock *s; 1781 struct sock *s;
1785 struct hlist_node *node;
1786 1782
1787 write_lock_bh(&x25_list_lock); 1783 write_lock_bh(&x25_list_lock);
1788 1784
1789 sk_for_each(s, node, &x25_list) 1785 sk_for_each(s, &x25_list)
1790 if (x25_sk(s)->neighbour == nb) 1786 if (x25_sk(s)->neighbour == nb)
1791 x25_disconnect(s, ENETUNREACH, 0, 0); 1787 x25_disconnect(s, ENETUNREACH, 0, 0);
1792 1788