diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2008-07-25 04:45:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-25 13:53:27 -0400 |
commit | 696adfe84c11c571a1e0863460ff0ec142b4e5a9 (patch) | |
tree | f00042d0c69211955ec6ef3a5d4a5c49ec7f8890 /net | |
parent | 2fc9c4e18f94431e7eb77d97edb2a995b46fba55 (diff) |
list_for_each_rcu must die: networking
All uses of list_for_each_rcu() can be profitably replaced by the
easier-to-use list_for_each_entry_rcu(). This patch makes this change for
networking, in preparation for removing the list_for_each_rcu() API
entirely.
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/802/psnap.c | 4 | ||||
-rw-r--r-- | net/ipv4/af_inet.c | 9 | ||||
-rw-r--r-- | net/ipv6/af_inet6.c | 9 |
3 files changed, 7 insertions, 15 deletions
diff --git a/net/802/psnap.c b/net/802/psnap.c index ea4643931446..b3cfe5a14fca 100644 --- a/net/802/psnap.c +++ b/net/802/psnap.c | |||
@@ -31,11 +31,9 @@ static struct llc_sap *snap_sap; | |||
31 | */ | 31 | */ |
32 | static struct datalink_proto *find_snap_client(unsigned char *desc) | 32 | static struct datalink_proto *find_snap_client(unsigned char *desc) |
33 | { | 33 | { |
34 | struct list_head *entry; | ||
35 | struct datalink_proto *proto = NULL, *p; | 34 | struct datalink_proto *proto = NULL, *p; |
36 | 35 | ||
37 | list_for_each_rcu(entry, &snap_list) { | 36 | list_for_each_entry_rcu(p, &snap_list, node) { |
38 | p = list_entry(entry, struct datalink_proto, node); | ||
39 | if (!memcmp(p->type, desc, 5)) { | 37 | if (!memcmp(p->type, desc, 5)) { |
40 | proto = p; | 38 | proto = p; |
41 | break; | 39 | break; |
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index dd919d84285f..f440a9f54924 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c | |||
@@ -264,7 +264,6 @@ static inline int inet_netns_ok(struct net *net, int protocol) | |||
264 | static int inet_create(struct net *net, struct socket *sock, int protocol) | 264 | static int inet_create(struct net *net, struct socket *sock, int protocol) |
265 | { | 265 | { |
266 | struct sock *sk; | 266 | struct sock *sk; |
267 | struct list_head *p; | ||
268 | struct inet_protosw *answer; | 267 | struct inet_protosw *answer; |
269 | struct inet_sock *inet; | 268 | struct inet_sock *inet; |
270 | struct proto *answer_prot; | 269 | struct proto *answer_prot; |
@@ -281,13 +280,12 @@ static int inet_create(struct net *net, struct socket *sock, int protocol) | |||
281 | sock->state = SS_UNCONNECTED; | 280 | sock->state = SS_UNCONNECTED; |
282 | 281 | ||
283 | /* Look for the requested type/protocol pair. */ | 282 | /* Look for the requested type/protocol pair. */ |
284 | answer = NULL; | ||
285 | lookup_protocol: | 283 | lookup_protocol: |
286 | err = -ESOCKTNOSUPPORT; | 284 | err = -ESOCKTNOSUPPORT; |
287 | rcu_read_lock(); | 285 | rcu_read_lock(); |
288 | list_for_each_rcu(p, &inetsw[sock->type]) { | 286 | list_for_each_entry_rcu(answer, &inetsw[sock->type], list) { |
289 | answer = list_entry(p, struct inet_protosw, list); | ||
290 | 287 | ||
288 | err = 0; | ||
291 | /* Check the non-wild match. */ | 289 | /* Check the non-wild match. */ |
292 | if (protocol == answer->protocol) { | 290 | if (protocol == answer->protocol) { |
293 | if (protocol != IPPROTO_IP) | 291 | if (protocol != IPPROTO_IP) |
@@ -302,10 +300,9 @@ lookup_protocol: | |||
302 | break; | 300 | break; |
303 | } | 301 | } |
304 | err = -EPROTONOSUPPORT; | 302 | err = -EPROTONOSUPPORT; |
305 | answer = NULL; | ||
306 | } | 303 | } |
307 | 304 | ||
308 | if (unlikely(answer == NULL)) { | 305 | if (unlikely(err)) { |
309 | if (try_loading_module < 2) { | 306 | if (try_loading_module < 2) { |
310 | rcu_read_unlock(); | 307 | rcu_read_unlock(); |
311 | /* | 308 | /* |
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 3d828bc4b1cf..60461ad7fa6f 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c | |||
@@ -83,7 +83,6 @@ static int inet6_create(struct net *net, struct socket *sock, int protocol) | |||
83 | struct inet_sock *inet; | 83 | struct inet_sock *inet; |
84 | struct ipv6_pinfo *np; | 84 | struct ipv6_pinfo *np; |
85 | struct sock *sk; | 85 | struct sock *sk; |
86 | struct list_head *p; | ||
87 | struct inet_protosw *answer; | 86 | struct inet_protosw *answer; |
88 | struct proto *answer_prot; | 87 | struct proto *answer_prot; |
89 | unsigned char answer_flags; | 88 | unsigned char answer_flags; |
@@ -97,13 +96,12 @@ static int inet6_create(struct net *net, struct socket *sock, int protocol) | |||
97 | build_ehash_secret(); | 96 | build_ehash_secret(); |
98 | 97 | ||
99 | /* Look for the requested type/protocol pair. */ | 98 | /* Look for the requested type/protocol pair. */ |
100 | answer = NULL; | ||
101 | lookup_protocol: | 99 | lookup_protocol: |
102 | err = -ESOCKTNOSUPPORT; | 100 | err = -ESOCKTNOSUPPORT; |
103 | rcu_read_lock(); | 101 | rcu_read_lock(); |
104 | list_for_each_rcu(p, &inetsw6[sock->type]) { | 102 | list_for_each_entry_rcu(answer, &inetsw6[sock->type], list) { |
105 | answer = list_entry(p, struct inet_protosw, list); | ||
106 | 103 | ||
104 | err = 0; | ||
107 | /* Check the non-wild match. */ | 105 | /* Check the non-wild match. */ |
108 | if (protocol == answer->protocol) { | 106 | if (protocol == answer->protocol) { |
109 | if (protocol != IPPROTO_IP) | 107 | if (protocol != IPPROTO_IP) |
@@ -118,10 +116,9 @@ lookup_protocol: | |||
118 | break; | 116 | break; |
119 | } | 117 | } |
120 | err = -EPROTONOSUPPORT; | 118 | err = -EPROTONOSUPPORT; |
121 | answer = NULL; | ||
122 | } | 119 | } |
123 | 120 | ||
124 | if (!answer) { | 121 | if (err) { |
125 | if (try_loading_module < 2) { | 122 | if (try_loading_module < 2) { |
126 | rcu_read_unlock(); | 123 | rcu_read_unlock(); |
127 | /* | 124 | /* |