aboutsummaryrefslogtreecommitdiffstats
path: root/net/ax25
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
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')
-rw-r--r--net/ax25/af_ax25.c15
-rw-r--r--net/ax25/ax25_ds_subr.c6
-rw-r--r--net/ax25/ax25_ds_timer.c3
-rw-r--r--net/ax25/ax25_iface.c3
-rw-r--r--net/ax25/ax25_uid.c11
5 files changed, 13 insertions, 25 deletions
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
index 69a06c47b648..7b11f8bc5071 100644
--- a/net/ax25/af_ax25.c
+++ b/net/ax25/af_ax25.c
@@ -81,14 +81,13 @@ static void ax25_kill_by_device(struct net_device *dev)
81{ 81{
82 ax25_dev *ax25_dev; 82 ax25_dev *ax25_dev;
83 ax25_cb *s; 83 ax25_cb *s;
84 struct hlist_node *node;
85 84
86 if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL) 85 if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
87 return; 86 return;
88 87
89 spin_lock_bh(&ax25_list_lock); 88 spin_lock_bh(&ax25_list_lock);
90again: 89again:
91 ax25_for_each(s, node, &ax25_list) { 90 ax25_for_each(s, &ax25_list) {
92 if (s->ax25_dev == ax25_dev) { 91 if (s->ax25_dev == ax25_dev) {
93 s->ax25_dev = NULL; 92 s->ax25_dev = NULL;
94 spin_unlock_bh(&ax25_list_lock); 93 spin_unlock_bh(&ax25_list_lock);
@@ -158,10 +157,9 @@ struct sock *ax25_find_listener(ax25_address *addr, int digi,
158 struct net_device *dev, int type) 157 struct net_device *dev, int type)
159{ 158{
160 ax25_cb *s; 159 ax25_cb *s;
161 struct hlist_node *node;
162 160
163 spin_lock(&ax25_list_lock); 161 spin_lock(&ax25_list_lock);
164 ax25_for_each(s, node, &ax25_list) { 162 ax25_for_each(s, &ax25_list) {
165 if ((s->iamdigi && !digi) || (!s->iamdigi && digi)) 163 if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
166 continue; 164 continue;
167 if (s->sk && !ax25cmp(&s->source_addr, addr) && 165 if (s->sk && !ax25cmp(&s->source_addr, addr) &&
@@ -187,10 +185,9 @@ struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
187{ 185{
188 struct sock *sk = NULL; 186 struct sock *sk = NULL;
189 ax25_cb *s; 187 ax25_cb *s;
190 struct hlist_node *node;
191 188
192 spin_lock(&ax25_list_lock); 189 spin_lock(&ax25_list_lock);
193 ax25_for_each(s, node, &ax25_list) { 190 ax25_for_each(s, &ax25_list) {
194 if (s->sk && !ax25cmp(&s->source_addr, my_addr) && 191 if (s->sk && !ax25cmp(&s->source_addr, my_addr) &&
195 !ax25cmp(&s->dest_addr, dest_addr) && 192 !ax25cmp(&s->dest_addr, dest_addr) &&
196 s->sk->sk_type == type) { 193 s->sk->sk_type == type) {
@@ -213,10 +210,9 @@ ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr,
213 ax25_digi *digi, struct net_device *dev) 210 ax25_digi *digi, struct net_device *dev)
214{ 211{
215 ax25_cb *s; 212 ax25_cb *s;
216 struct hlist_node *node;
217 213
218 spin_lock_bh(&ax25_list_lock); 214 spin_lock_bh(&ax25_list_lock);
219 ax25_for_each(s, node, &ax25_list) { 215 ax25_for_each(s, &ax25_list) {
220 if (s->sk && s->sk->sk_type != SOCK_SEQPACKET) 216 if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
221 continue; 217 continue;
222 if (s->ax25_dev == NULL) 218 if (s->ax25_dev == NULL)
@@ -248,10 +244,9 @@ void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
248{ 244{
249 ax25_cb *s; 245 ax25_cb *s;
250 struct sk_buff *copy; 246 struct sk_buff *copy;
251 struct hlist_node *node;
252 247
253 spin_lock(&ax25_list_lock); 248 spin_lock(&ax25_list_lock);
254 ax25_for_each(s, node, &ax25_list) { 249 ax25_for_each(s, &ax25_list) {
255 if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 && 250 if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
256 s->sk->sk_type == SOCK_RAW && 251 s->sk->sk_type == SOCK_RAW &&
257 s->sk->sk_protocol == proto && 252 s->sk->sk_protocol == proto &&
diff --git a/net/ax25/ax25_ds_subr.c b/net/ax25/ax25_ds_subr.c
index 5ea7fd3e2af9..e05bd57b5afd 100644
--- a/net/ax25/ax25_ds_subr.c
+++ b/net/ax25/ax25_ds_subr.c
@@ -39,7 +39,6 @@ void ax25_ds_nr_error_recovery(ax25_cb *ax25)
39void ax25_ds_enquiry_response(ax25_cb *ax25) 39void ax25_ds_enquiry_response(ax25_cb *ax25)
40{ 40{
41 ax25_cb *ax25o; 41 ax25_cb *ax25o;
42 struct hlist_node *node;
43 42
44 /* Please note that neither DK4EG's nor DG2FEF's 43 /* Please note that neither DK4EG's nor DG2FEF's
45 * DAMA spec mention the following behaviour as seen 44 * DAMA spec mention the following behaviour as seen
@@ -80,7 +79,7 @@ void ax25_ds_enquiry_response(ax25_cb *ax25)
80 ax25_ds_set_timer(ax25->ax25_dev); 79 ax25_ds_set_timer(ax25->ax25_dev);
81 80
82 spin_lock(&ax25_list_lock); 81 spin_lock(&ax25_list_lock);
83 ax25_for_each(ax25o, node, &ax25_list) { 82 ax25_for_each(ax25o, &ax25_list) {
84 if (ax25o == ax25) 83 if (ax25o == ax25)
85 continue; 84 continue;
86 85
@@ -159,10 +158,9 @@ static int ax25_check_dama_slave(ax25_dev *ax25_dev)
159{ 158{
160 ax25_cb *ax25; 159 ax25_cb *ax25;
161 int res = 0; 160 int res = 0;
162 struct hlist_node *node;
163 161
164 spin_lock(&ax25_list_lock); 162 spin_lock(&ax25_list_lock);
165 ax25_for_each(ax25, node, &ax25_list) 163 ax25_for_each(ax25, &ax25_list)
166 if (ax25->ax25_dev == ax25_dev && (ax25->condition & AX25_COND_DAMA_MODE) && ax25->state > AX25_STATE_1) { 164 if (ax25->ax25_dev == ax25_dev && (ax25->condition & AX25_COND_DAMA_MODE) && ax25->state > AX25_STATE_1) {
167 res = 1; 165 res = 1;
168 break; 166 break;
diff --git a/net/ax25/ax25_ds_timer.c b/net/ax25/ax25_ds_timer.c
index 993c439b4f71..951cd57bb07d 100644
--- a/net/ax25/ax25_ds_timer.c
+++ b/net/ax25/ax25_ds_timer.c
@@ -70,7 +70,6 @@ static void ax25_ds_timeout(unsigned long arg)
70{ 70{
71 ax25_dev *ax25_dev = (struct ax25_dev *) arg; 71 ax25_dev *ax25_dev = (struct ax25_dev *) arg;
72 ax25_cb *ax25; 72 ax25_cb *ax25;
73 struct hlist_node *node;
74 73
75 if (ax25_dev == NULL || !ax25_dev->dama.slave) 74 if (ax25_dev == NULL || !ax25_dev->dama.slave)
76 return; /* Yikes! */ 75 return; /* Yikes! */
@@ -81,7 +80,7 @@ static void ax25_ds_timeout(unsigned long arg)
81 } 80 }
82 81
83 spin_lock(&ax25_list_lock); 82 spin_lock(&ax25_list_lock);
84 ax25_for_each(ax25, node, &ax25_list) { 83 ax25_for_each(ax25, &ax25_list) {
85 if (ax25->ax25_dev != ax25_dev || !(ax25->condition & AX25_COND_DAMA_MODE)) 84 if (ax25->ax25_dev != ax25_dev || !(ax25->condition & AX25_COND_DAMA_MODE))
86 continue; 85 continue;
87 86
diff --git a/net/ax25/ax25_iface.c b/net/ax25/ax25_iface.c
index 7d5f24b82cc8..7f16e8a931b2 100644
--- a/net/ax25/ax25_iface.c
+++ b/net/ax25/ax25_iface.c
@@ -193,10 +193,9 @@ int ax25_listen_mine(ax25_address *callsign, struct net_device *dev)
193void ax25_link_failed(ax25_cb *ax25, int reason) 193void ax25_link_failed(ax25_cb *ax25, int reason)
194{ 194{
195 struct ax25_linkfail *lf; 195 struct ax25_linkfail *lf;
196 struct hlist_node *node;
197 196
198 spin_lock_bh(&linkfail_lock); 197 spin_lock_bh(&linkfail_lock);
199 hlist_for_each_entry(lf, node, &ax25_linkfail_list, lf_node) 198 hlist_for_each_entry(lf, &ax25_linkfail_list, lf_node)
200 lf->func(ax25, reason); 199 lf->func(ax25, reason);
201 spin_unlock_bh(&linkfail_lock); 200 spin_unlock_bh(&linkfail_lock);
202} 201}
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;