aboutsummaryrefslogtreecommitdiffstats
path: root/net/decnet
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/decnet
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/decnet')
-rw-r--r--net/decnet/af_decnet.c9
-rw-r--r--net/decnet/dn_table.c13
2 files changed, 8 insertions, 14 deletions
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
index c4a2def5b7bd..c21f200eed93 100644
--- a/net/decnet/af_decnet.c
+++ b/net/decnet/af_decnet.c
@@ -175,12 +175,11 @@ static struct hlist_head *dn_find_list(struct sock *sk)
175static int check_port(__le16 port) 175static int check_port(__le16 port)
176{ 176{
177 struct sock *sk; 177 struct sock *sk;
178 struct hlist_node *node;
179 178
180 if (port == 0) 179 if (port == 0)
181 return -1; 180 return -1;
182 181
183 sk_for_each(sk, node, &dn_sk_hash[le16_to_cpu(port) & DN_SK_HASH_MASK]) { 182 sk_for_each(sk, &dn_sk_hash[le16_to_cpu(port) & DN_SK_HASH_MASK]) {
184 struct dn_scp *scp = DN_SK(sk); 183 struct dn_scp *scp = DN_SK(sk);
185 if (scp->addrloc == port) 184 if (scp->addrloc == port)
186 return -1; 185 return -1;
@@ -374,11 +373,10 @@ int dn_username2sockaddr(unsigned char *data, int len, struct sockaddr_dn *sdn,
374struct sock *dn_sklist_find_listener(struct sockaddr_dn *addr) 373struct sock *dn_sklist_find_listener(struct sockaddr_dn *addr)
375{ 374{
376 struct hlist_head *list = listen_hash(addr); 375 struct hlist_head *list = listen_hash(addr);
377 struct hlist_node *node;
378 struct sock *sk; 376 struct sock *sk;
379 377
380 read_lock(&dn_hash_lock); 378 read_lock(&dn_hash_lock);
381 sk_for_each(sk, node, list) { 379 sk_for_each(sk, list) {
382 struct dn_scp *scp = DN_SK(sk); 380 struct dn_scp *scp = DN_SK(sk);
383 if (sk->sk_state != TCP_LISTEN) 381 if (sk->sk_state != TCP_LISTEN)
384 continue; 382 continue;
@@ -414,11 +412,10 @@ struct sock *dn_find_by_skb(struct sk_buff *skb)
414{ 412{
415 struct dn_skb_cb *cb = DN_SKB_CB(skb); 413 struct dn_skb_cb *cb = DN_SKB_CB(skb);
416 struct sock *sk; 414 struct sock *sk;
417 struct hlist_node *node;
418 struct dn_scp *scp; 415 struct dn_scp *scp;
419 416
420 read_lock(&dn_hash_lock); 417 read_lock(&dn_hash_lock);
421 sk_for_each(sk, node, &dn_sk_hash[le16_to_cpu(cb->dst_port) & DN_SK_HASH_MASK]) { 418 sk_for_each(sk, &dn_sk_hash[le16_to_cpu(cb->dst_port) & DN_SK_HASH_MASK]) {
422 scp = DN_SK(sk); 419 scp = DN_SK(sk);
423 if (cb->src != dn_saddr2dn(&scp->peer)) 420 if (cb->src != dn_saddr2dn(&scp->peer))
424 continue; 421 continue;
diff --git a/net/decnet/dn_table.c b/net/decnet/dn_table.c
index f968c1b58f47..6c2445bcaba1 100644
--- a/net/decnet/dn_table.c
+++ b/net/decnet/dn_table.c
@@ -483,7 +483,6 @@ int dn_fib_dump(struct sk_buff *skb, struct netlink_callback *cb)
483 unsigned int h, s_h; 483 unsigned int h, s_h;
484 unsigned int e = 0, s_e; 484 unsigned int e = 0, s_e;
485 struct dn_fib_table *tb; 485 struct dn_fib_table *tb;
486 struct hlist_node *node;
487 int dumped = 0; 486 int dumped = 0;
488 487
489 if (!net_eq(net, &init_net)) 488 if (!net_eq(net, &init_net))
@@ -498,7 +497,7 @@ int dn_fib_dump(struct sk_buff *skb, struct netlink_callback *cb)
498 497
499 for (h = s_h; h < DN_FIB_TABLE_HASHSZ; h++, s_h = 0) { 498 for (h = s_h; h < DN_FIB_TABLE_HASHSZ; h++, s_h = 0) {
500 e = 0; 499 e = 0;
501 hlist_for_each_entry(tb, node, &dn_fib_table_hash[h], hlist) { 500 hlist_for_each_entry(tb, &dn_fib_table_hash[h], hlist) {
502 if (e < s_e) 501 if (e < s_e)
503 goto next; 502 goto next;
504 if (dumped) 503 if (dumped)
@@ -828,7 +827,6 @@ out:
828struct dn_fib_table *dn_fib_get_table(u32 n, int create) 827struct dn_fib_table *dn_fib_get_table(u32 n, int create)
829{ 828{
830 struct dn_fib_table *t; 829 struct dn_fib_table *t;
831 struct hlist_node *node;
832 unsigned int h; 830 unsigned int h;
833 831
834 if (n < RT_TABLE_MIN) 832 if (n < RT_TABLE_MIN)
@@ -839,7 +837,7 @@ struct dn_fib_table *dn_fib_get_table(u32 n, int create)
839 837
840 h = n & (DN_FIB_TABLE_HASHSZ - 1); 838 h = n & (DN_FIB_TABLE_HASHSZ - 1);
841 rcu_read_lock(); 839 rcu_read_lock();
842 hlist_for_each_entry_rcu(t, node, &dn_fib_table_hash[h], hlist) { 840 hlist_for_each_entry_rcu(t, &dn_fib_table_hash[h], hlist) {
843 if (t->n == n) { 841 if (t->n == n) {
844 rcu_read_unlock(); 842 rcu_read_unlock();
845 return t; 843 return t;
@@ -885,11 +883,10 @@ void dn_fib_flush(void)
885{ 883{
886 int flushed = 0; 884 int flushed = 0;
887 struct dn_fib_table *tb; 885 struct dn_fib_table *tb;
888 struct hlist_node *node;
889 unsigned int h; 886 unsigned int h;
890 887
891 for (h = 0; h < DN_FIB_TABLE_HASHSZ; h++) { 888 for (h = 0; h < DN_FIB_TABLE_HASHSZ; h++) {
892 hlist_for_each_entry(tb, node, &dn_fib_table_hash[h], hlist) 889 hlist_for_each_entry(tb, &dn_fib_table_hash[h], hlist)
893 flushed += tb->flush(tb); 890 flushed += tb->flush(tb);
894 } 891 }
895 892
@@ -908,12 +905,12 @@ void __init dn_fib_table_init(void)
908void __exit dn_fib_table_cleanup(void) 905void __exit dn_fib_table_cleanup(void)
909{ 906{
910 struct dn_fib_table *t; 907 struct dn_fib_table *t;
911 struct hlist_node *node, *next; 908 struct hlist_node *next;
912 unsigned int h; 909 unsigned int h;
913 910
914 write_lock(&dn_fib_tables_lock); 911 write_lock(&dn_fib_tables_lock);
915 for (h = 0; h < DN_FIB_TABLE_HASHSZ; h++) { 912 for (h = 0; h < DN_FIB_TABLE_HASHSZ; h++) {
916 hlist_for_each_entry_safe(t, node, next, &dn_fib_table_hash[h], 913 hlist_for_each_entry_safe(t, next, &dn_fib_table_hash[h],
917 hlist) { 914 hlist) {
918 hlist_del(&t->hlist); 915 hlist_del(&t->hlist);
919 kfree(t); 916 kfree(t);