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 | |
| 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>
| -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 | /* |
