aboutsummaryrefslogtreecommitdiffstats
path: root/net/ax25/ax25_uid.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/ax25/ax25_uid.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/ax25/ax25_uid.c')
-rw-r--r--net/ax25/ax25_uid.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/net/ax25/ax25_uid.c b/net/ax25/ax25_uid.c
index 957999e43ff7..71c4badbc807 100644
--- a/net/ax25/ax25_uid.c
+++ b/net/ax25/ax25_uid.c
@@ -54,10 +54,9 @@ EXPORT_SYMBOL(ax25_uid_policy);
54ax25_uid_assoc *ax25_findbyuid(kuid_t uid) 54ax25_uid_assoc *ax25_findbyuid(kuid_t uid)
55{ 55{
56 ax25_uid_assoc *ax25_uid, *res = NULL; 56 ax25_uid_assoc *ax25_uid, *res = NULL;
57 struct hlist_node *node;
58 57
59 read_lock(&ax25_uid_lock); 58 read_lock(&ax25_uid_lock);
60 ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { 59 ax25_uid_for_each(ax25_uid, &ax25_uid_list) {
61 if (uid_eq(ax25_uid->uid, uid)) { 60 if (uid_eq(ax25_uid->uid, uid)) {
62 ax25_uid_hold(ax25_uid); 61 ax25_uid_hold(ax25_uid);
63 res = ax25_uid; 62 res = ax25_uid;
@@ -74,7 +73,6 @@ EXPORT_SYMBOL(ax25_findbyuid);
74int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax) 73int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
75{ 74{
76 ax25_uid_assoc *ax25_uid; 75 ax25_uid_assoc *ax25_uid;
77 struct hlist_node *node;
78 ax25_uid_assoc *user; 76 ax25_uid_assoc *user;
79 unsigned long res; 77 unsigned long res;
80 78
@@ -82,7 +80,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
82 case SIOCAX25GETUID: 80 case SIOCAX25GETUID:
83 res = -ENOENT; 81 res = -ENOENT;
84 read_lock(&ax25_uid_lock); 82 read_lock(&ax25_uid_lock);
85 ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { 83 ax25_uid_for_each(ax25_uid, &ax25_uid_list) {
86 if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) { 84 if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) {
87 res = from_kuid_munged(current_user_ns(), ax25_uid->uid); 85 res = from_kuid_munged(current_user_ns(), ax25_uid->uid);
88 break; 86 break;
@@ -126,7 +124,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
126 124
127 ax25_uid = NULL; 125 ax25_uid = NULL;
128 write_lock(&ax25_uid_lock); 126 write_lock(&ax25_uid_lock);
129 ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { 127 ax25_uid_for_each(ax25_uid, &ax25_uid_list) {
130 if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) 128 if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0)
131 break; 129 break;
132 } 130 }
@@ -212,11 +210,10 @@ const struct file_operations ax25_uid_fops = {
212void __exit ax25_uid_free(void) 210void __exit ax25_uid_free(void)
213{ 211{
214 ax25_uid_assoc *ax25_uid; 212 ax25_uid_assoc *ax25_uid;
215 struct hlist_node *node;
216 213
217 write_lock(&ax25_uid_lock); 214 write_lock(&ax25_uid_lock);
218again: 215again:
219 ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { 216 ax25_uid_for_each(ax25_uid, &ax25_uid_list) {
220 hlist_del_init(&ax25_uid->uid_node); 217 hlist_del_init(&ax25_uid->uid_node);
221 ax25_uid_put(ax25_uid); 218 ax25_uid_put(ax25_uid);
222 goto again; 219 goto again;