diff options
-rw-r--r-- | net/bridge/br_netlink.c | 2 | ||||
-rw-r--r-- | net/core/fib_rules.c | 4 | ||||
-rw-r--r-- | net/core/rtnetlink.c | 2 | ||||
-rw-r--r-- | net/decnet/dn_dev.c | 3 | ||||
-rw-r--r-- | net/ipv4/devinet.c | 12 | ||||
-rw-r--r-- | net/ipv6/addrconf.c | 2 |
6 files changed, 3 insertions, 22 deletions
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c index 5e84ade129ca..35facc0c11c2 100644 --- a/net/bridge/br_netlink.c +++ b/net/bridge/br_netlink.c | |||
@@ -109,7 +109,6 @@ static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) | |||
109 | struct net_device *dev; | 109 | struct net_device *dev; |
110 | int idx; | 110 | int idx; |
111 | 111 | ||
112 | read_lock(&dev_base_lock); | ||
113 | for (dev = dev_base, idx = 0; dev; dev = dev->next) { | 112 | for (dev = dev_base, idx = 0; dev; dev = dev->next) { |
114 | /* not a bridge port */ | 113 | /* not a bridge port */ |
115 | if (dev->br_port == NULL || idx < cb->args[0]) | 114 | if (dev->br_port == NULL || idx < cb->args[0]) |
@@ -122,7 +121,6 @@ static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) | |||
122 | skip: | 121 | skip: |
123 | ++idx; | 122 | ++idx; |
124 | } | 123 | } |
125 | read_unlock(&dev_base_lock); | ||
126 | 124 | ||
127 | cb->args[0] = idx; | 125 | cb->args[0] = idx; |
128 | 126 | ||
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index cb2dae19531b..8c5474e16683 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c | |||
@@ -495,8 +495,7 @@ static int dump_rules(struct sk_buff *skb, struct netlink_callback *cb, | |||
495 | int idx = 0; | 495 | int idx = 0; |
496 | struct fib_rule *rule; | 496 | struct fib_rule *rule; |
497 | 497 | ||
498 | rcu_read_lock(); | 498 | list_for_each_entry(rule, ops->rules_list, list) { |
499 | list_for_each_entry_rcu(rule, ops->rules_list, list) { | ||
500 | if (idx < cb->args[1]) | 499 | if (idx < cb->args[1]) |
501 | goto skip; | 500 | goto skip; |
502 | 501 | ||
@@ -507,7 +506,6 @@ static int dump_rules(struct sk_buff *skb, struct netlink_callback *cb, | |||
507 | skip: | 506 | skip: |
508 | idx++; | 507 | idx++; |
509 | } | 508 | } |
510 | rcu_read_unlock(); | ||
511 | cb->args[1] = idx; | 509 | cb->args[1] = idx; |
512 | rules_ops_put(ops); | 510 | rules_ops_put(ops); |
513 | 511 | ||
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 62f5c7f98d17..bc95fab0b0ce 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -543,7 +543,6 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) | |||
543 | int s_idx = cb->args[0]; | 543 | int s_idx = cb->args[0]; |
544 | struct net_device *dev; | 544 | struct net_device *dev; |
545 | 545 | ||
546 | read_lock(&dev_base_lock); | ||
547 | for (dev=dev_base, idx=0; dev; dev = dev->next, idx++) { | 546 | for (dev=dev_base, idx=0; dev; dev = dev->next, idx++) { |
548 | if (idx < s_idx) | 547 | if (idx < s_idx) |
549 | continue; | 548 | continue; |
@@ -552,7 +551,6 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) | |||
552 | cb->nlh->nlmsg_seq, 0, NLM_F_MULTI) <= 0) | 551 | cb->nlh->nlmsg_seq, 0, NLM_F_MULTI) <= 0) |
553 | break; | 552 | break; |
554 | } | 553 | } |
555 | read_unlock(&dev_base_lock); | ||
556 | cb->args[0] = idx; | 554 | cb->args[0] = idx; |
557 | 555 | ||
558 | return skb->len; | 556 | return skb->len; |
diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c index 61be2caddc57..5c2a9951b638 100644 --- a/net/decnet/dn_dev.c +++ b/net/decnet/dn_dev.c | |||
@@ -799,7 +799,6 @@ static int dn_nl_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) | |||
799 | skip_ndevs = cb->args[0]; | 799 | skip_ndevs = cb->args[0]; |
800 | skip_naddr = cb->args[1]; | 800 | skip_naddr = cb->args[1]; |
801 | 801 | ||
802 | read_lock(&dev_base_lock); | ||
803 | for (dev = dev_base, idx = 0; dev; dev = dev->next, idx++) { | 802 | for (dev = dev_base, idx = 0; dev; dev = dev->next, idx++) { |
804 | if (idx < skip_ndevs) | 803 | if (idx < skip_ndevs) |
805 | continue; | 804 | continue; |
@@ -824,8 +823,6 @@ static int dn_nl_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) | |||
824 | } | 823 | } |
825 | } | 824 | } |
826 | done: | 825 | done: |
827 | read_unlock(&dev_base_lock); | ||
828 | |||
829 | cb->args[0] = idx; | 826 | cb->args[0] = idx; |
830 | cb->args[1] = dn_idx; | 827 | cb->args[1] = dn_idx; |
831 | 828 | ||
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 9bdc79564cc6..088888db8b3d 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -1182,17 +1182,13 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) | |||
1182 | int s_ip_idx, s_idx = cb->args[0]; | 1182 | int s_ip_idx, s_idx = cb->args[0]; |
1183 | 1183 | ||
1184 | s_ip_idx = ip_idx = cb->args[1]; | 1184 | s_ip_idx = ip_idx = cb->args[1]; |
1185 | read_lock(&dev_base_lock); | ||
1186 | for (dev = dev_base, idx = 0; dev; dev = dev->next, idx++) { | 1185 | for (dev = dev_base, idx = 0; dev; dev = dev->next, idx++) { |
1187 | if (idx < s_idx) | 1186 | if (idx < s_idx) |
1188 | continue; | 1187 | continue; |
1189 | if (idx > s_idx) | 1188 | if (idx > s_idx) |
1190 | s_ip_idx = 0; | 1189 | s_ip_idx = 0; |
1191 | rcu_read_lock(); | 1190 | if ((in_dev = __in_dev_get_rtnl(dev)) == NULL) |
1192 | if ((in_dev = __in_dev_get_rcu(dev)) == NULL) { | ||
1193 | rcu_read_unlock(); | ||
1194 | continue; | 1191 | continue; |
1195 | } | ||
1196 | 1192 | ||
1197 | for (ifa = in_dev->ifa_list, ip_idx = 0; ifa; | 1193 | for (ifa = in_dev->ifa_list, ip_idx = 0; ifa; |
1198 | ifa = ifa->ifa_next, ip_idx++) { | 1194 | ifa = ifa->ifa_next, ip_idx++) { |
@@ -1200,16 +1196,12 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) | |||
1200 | continue; | 1196 | continue; |
1201 | if (inet_fill_ifaddr(skb, ifa, NETLINK_CB(cb->skb).pid, | 1197 | if (inet_fill_ifaddr(skb, ifa, NETLINK_CB(cb->skb).pid, |
1202 | cb->nlh->nlmsg_seq, | 1198 | cb->nlh->nlmsg_seq, |
1203 | RTM_NEWADDR, NLM_F_MULTI) <= 0) { | 1199 | RTM_NEWADDR, NLM_F_MULTI) <= 0) |
1204 | rcu_read_unlock(); | ||
1205 | goto done; | 1200 | goto done; |
1206 | } | ||
1207 | } | 1201 | } |
1208 | rcu_read_unlock(); | ||
1209 | } | 1202 | } |
1210 | 1203 | ||
1211 | done: | 1204 | done: |
1212 | read_unlock(&dev_base_lock); | ||
1213 | cb->args[0] = idx; | 1205 | cb->args[0] = idx; |
1214 | cb->args[1] = ip_idx; | 1206 | cb->args[1] = ip_idx; |
1215 | 1207 | ||
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index eecba1886b49..1486f76f7878 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -3224,7 +3224,6 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb, | |||
3224 | 3224 | ||
3225 | s_idx = cb->args[0]; | 3225 | s_idx = cb->args[0]; |
3226 | s_ip_idx = ip_idx = cb->args[1]; | 3226 | s_ip_idx = ip_idx = cb->args[1]; |
3227 | read_lock(&dev_base_lock); | ||
3228 | 3227 | ||
3229 | for (dev = dev_base, idx = 0; dev; dev = dev->next, idx++) { | 3228 | for (dev = dev_base, idx = 0; dev; dev = dev->next, idx++) { |
3230 | if (idx < s_idx) | 3229 | if (idx < s_idx) |
@@ -3286,7 +3285,6 @@ done: | |||
3286 | read_unlock_bh(&idev->lock); | 3285 | read_unlock_bh(&idev->lock); |
3287 | in6_dev_put(idev); | 3286 | in6_dev_put(idev); |
3288 | } | 3287 | } |
3289 | read_unlock(&dev_base_lock); | ||
3290 | cb->args[0] = idx; | 3288 | cb->args[0] = idx; |
3291 | cb->args[1] = ip_idx; | 3289 | cb->args[1] = ip_idx; |
3292 | return skb->len; | 3290 | return skb->len; |