diff options
author | YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org> | 2013-01-30 04:27:58 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-01-30 22:41:13 -0500 |
commit | c33e7b05f1411b97cd0260ae682fc1cdb27bfaa4 (patch) | |
tree | d00958e4600cbef4a45b4622df6b3a9c4e205fa4 /net/ipv6 | |
parent | 18367681a10bd29c3f2305e6b7b984de5b33d548 (diff) |
ipv6 anycast: Convert ipv6_sk_ac_lock to spinlock.
Since all users are write-lock, it does not make sense to use
rwlock here. Use simple spinlock.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/anycast.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c index 757a810d8f15..921b8b398a8c 100644 --- a/net/ipv6/anycast.c +++ b/net/ipv6/anycast.c | |||
@@ -47,7 +47,7 @@ | |||
47 | static int ipv6_dev_ac_dec(struct net_device *dev, const struct in6_addr *addr); | 47 | static int ipv6_dev_ac_dec(struct net_device *dev, const struct in6_addr *addr); |
48 | 48 | ||
49 | /* Big ac list lock for all the sockets */ | 49 | /* Big ac list lock for all the sockets */ |
50 | static DEFINE_RWLOCK(ipv6_sk_ac_lock); | 50 | static DEFINE_SPINLOCK(ipv6_sk_ac_lock); |
51 | 51 | ||
52 | 52 | ||
53 | /* | 53 | /* |
@@ -128,10 +128,10 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, const struct in6_addr *addr) | |||
128 | 128 | ||
129 | err = ipv6_dev_ac_inc(dev, addr); | 129 | err = ipv6_dev_ac_inc(dev, addr); |
130 | if (!err) { | 130 | if (!err) { |
131 | write_lock_bh(&ipv6_sk_ac_lock); | 131 | spin_lock_bh(&ipv6_sk_ac_lock); |
132 | pac->acl_next = np->ipv6_ac_list; | 132 | pac->acl_next = np->ipv6_ac_list; |
133 | np->ipv6_ac_list = pac; | 133 | np->ipv6_ac_list = pac; |
134 | write_unlock_bh(&ipv6_sk_ac_lock); | 134 | spin_unlock_bh(&ipv6_sk_ac_lock); |
135 | pac = NULL; | 135 | pac = NULL; |
136 | } | 136 | } |
137 | 137 | ||
@@ -152,7 +152,7 @@ int ipv6_sock_ac_drop(struct sock *sk, int ifindex, const struct in6_addr *addr) | |||
152 | struct ipv6_ac_socklist *pac, *prev_pac; | 152 | struct ipv6_ac_socklist *pac, *prev_pac; |
153 | struct net *net = sock_net(sk); | 153 | struct net *net = sock_net(sk); |
154 | 154 | ||
155 | write_lock_bh(&ipv6_sk_ac_lock); | 155 | spin_lock_bh(&ipv6_sk_ac_lock); |
156 | prev_pac = NULL; | 156 | prev_pac = NULL; |
157 | for (pac = np->ipv6_ac_list; pac; pac = pac->acl_next) { | 157 | for (pac = np->ipv6_ac_list; pac; pac = pac->acl_next) { |
158 | if ((ifindex == 0 || pac->acl_ifindex == ifindex) && | 158 | if ((ifindex == 0 || pac->acl_ifindex == ifindex) && |
@@ -161,7 +161,7 @@ int ipv6_sock_ac_drop(struct sock *sk, int ifindex, const struct in6_addr *addr) | |||
161 | prev_pac = pac; | 161 | prev_pac = pac; |
162 | } | 162 | } |
163 | if (!pac) { | 163 | if (!pac) { |
164 | write_unlock_bh(&ipv6_sk_ac_lock); | 164 | spin_unlock_bh(&ipv6_sk_ac_lock); |
165 | return -ENOENT; | 165 | return -ENOENT; |
166 | } | 166 | } |
167 | if (prev_pac) | 167 | if (prev_pac) |
@@ -169,7 +169,7 @@ int ipv6_sock_ac_drop(struct sock *sk, int ifindex, const struct in6_addr *addr) | |||
169 | else | 169 | else |
170 | np->ipv6_ac_list = pac->acl_next; | 170 | np->ipv6_ac_list = pac->acl_next; |
171 | 171 | ||
172 | write_unlock_bh(&ipv6_sk_ac_lock); | 172 | spin_unlock_bh(&ipv6_sk_ac_lock); |
173 | 173 | ||
174 | rcu_read_lock(); | 174 | rcu_read_lock(); |
175 | dev = dev_get_by_index_rcu(net, pac->acl_ifindex); | 175 | dev = dev_get_by_index_rcu(net, pac->acl_ifindex); |
@@ -192,10 +192,10 @@ void ipv6_sock_ac_close(struct sock *sk) | |||
192 | if (!np->ipv6_ac_list) | 192 | if (!np->ipv6_ac_list) |
193 | return; | 193 | return; |
194 | 194 | ||
195 | write_lock_bh(&ipv6_sk_ac_lock); | 195 | spin_lock_bh(&ipv6_sk_ac_lock); |
196 | pac = np->ipv6_ac_list; | 196 | pac = np->ipv6_ac_list; |
197 | np->ipv6_ac_list = NULL; | 197 | np->ipv6_ac_list = NULL; |
198 | write_unlock_bh(&ipv6_sk_ac_lock); | 198 | spin_unlock_bh(&ipv6_sk_ac_lock); |
199 | 199 | ||
200 | prev_index = 0; | 200 | prev_index = 0; |
201 | rcu_read_lock(); | 201 | rcu_read_lock(); |