aboutsummaryrefslogtreecommitdiffstats
path: root/net/decnet/dn_table.c
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/dn_table.c
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/dn_table.c')
-rw-r--r--net/decnet/dn_table.c13
1 files changed, 5 insertions, 8 deletions
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);