diff options
author | Simon Horman <horms@verge.net.au> | 2010-08-25 22:54:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-08-26 16:21:28 -0400 |
commit | bd144550489270a32a531e84a2b4bb6882096236 (patch) | |
tree | 160721affa0d9c015199de76ec1c9018cdf5ce0f /net | |
parent | 8870f8427b8fe30b2684b9e569e5ce038faf41ac (diff) |
IPVS: convert __ip_vs_sched_lock to a spinlock
Also rename __ip_vs_sched_lock to ip_vs_sched_lock.
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/ipvs/ip_vs_sched.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/net/netfilter/ipvs/ip_vs_sched.c b/net/netfilter/ipvs/ip_vs_sched.c index bbc1ac795952..727e45b66953 100644 --- a/net/netfilter/ipvs/ip_vs_sched.c +++ b/net/netfilter/ipvs/ip_vs_sched.c | |||
@@ -35,7 +35,7 @@ | |||
35 | static LIST_HEAD(ip_vs_schedulers); | 35 | static LIST_HEAD(ip_vs_schedulers); |
36 | 36 | ||
37 | /* lock for service table */ | 37 | /* lock for service table */ |
38 | static DEFINE_RWLOCK(__ip_vs_sched_lock); | 38 | static DEFINE_SPINLOCK(ip_vs_sched_lock); |
39 | 39 | ||
40 | 40 | ||
41 | /* | 41 | /* |
@@ -108,7 +108,7 @@ static struct ip_vs_scheduler *ip_vs_sched_getbyname(const char *sched_name) | |||
108 | 108 | ||
109 | IP_VS_DBG(2, "%s(): sched_name \"%s\"\n", __func__, sched_name); | 109 | IP_VS_DBG(2, "%s(): sched_name \"%s\"\n", __func__, sched_name); |
110 | 110 | ||
111 | read_lock_bh(&__ip_vs_sched_lock); | 111 | spin_lock_bh(&ip_vs_sched_lock); |
112 | 112 | ||
113 | list_for_each_entry(sched, &ip_vs_schedulers, n_list) { | 113 | list_for_each_entry(sched, &ip_vs_schedulers, n_list) { |
114 | /* | 114 | /* |
@@ -122,14 +122,14 @@ static struct ip_vs_scheduler *ip_vs_sched_getbyname(const char *sched_name) | |||
122 | } | 122 | } |
123 | if (strcmp(sched_name, sched->name)==0) { | 123 | if (strcmp(sched_name, sched->name)==0) { |
124 | /* HIT */ | 124 | /* HIT */ |
125 | read_unlock_bh(&__ip_vs_sched_lock); | 125 | spin_unlock_bh(&ip_vs_sched_lock); |
126 | return sched; | 126 | return sched; |
127 | } | 127 | } |
128 | if (sched->module) | 128 | if (sched->module) |
129 | module_put(sched->module); | 129 | module_put(sched->module); |
130 | } | 130 | } |
131 | 131 | ||
132 | read_unlock_bh(&__ip_vs_sched_lock); | 132 | spin_unlock_bh(&ip_vs_sched_lock); |
133 | return NULL; | 133 | return NULL; |
134 | } | 134 | } |
135 | 135 | ||
@@ -184,10 +184,10 @@ int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler) | |||
184 | /* increase the module use count */ | 184 | /* increase the module use count */ |
185 | ip_vs_use_count_inc(); | 185 | ip_vs_use_count_inc(); |
186 | 186 | ||
187 | write_lock_bh(&__ip_vs_sched_lock); | 187 | spin_lock_bh(&ip_vs_sched_lock); |
188 | 188 | ||
189 | if (!list_empty(&scheduler->n_list)) { | 189 | if (!list_empty(&scheduler->n_list)) { |
190 | write_unlock_bh(&__ip_vs_sched_lock); | 190 | spin_unlock_bh(&ip_vs_sched_lock); |
191 | ip_vs_use_count_dec(); | 191 | ip_vs_use_count_dec(); |
192 | pr_err("%s(): [%s] scheduler already linked\n", | 192 | pr_err("%s(): [%s] scheduler already linked\n", |
193 | __func__, scheduler->name); | 193 | __func__, scheduler->name); |
@@ -200,7 +200,7 @@ int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler) | |||
200 | */ | 200 | */ |
201 | list_for_each_entry(sched, &ip_vs_schedulers, n_list) { | 201 | list_for_each_entry(sched, &ip_vs_schedulers, n_list) { |
202 | if (strcmp(scheduler->name, sched->name) == 0) { | 202 | if (strcmp(scheduler->name, sched->name) == 0) { |
203 | write_unlock_bh(&__ip_vs_sched_lock); | 203 | spin_unlock_bh(&ip_vs_sched_lock); |
204 | ip_vs_use_count_dec(); | 204 | ip_vs_use_count_dec(); |
205 | pr_err("%s(): [%s] scheduler already existed " | 205 | pr_err("%s(): [%s] scheduler already existed " |
206 | "in the system\n", __func__, scheduler->name); | 206 | "in the system\n", __func__, scheduler->name); |
@@ -211,7 +211,7 @@ int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler) | |||
211 | * Add it into the d-linked scheduler list | 211 | * Add it into the d-linked scheduler list |
212 | */ | 212 | */ |
213 | list_add(&scheduler->n_list, &ip_vs_schedulers); | 213 | list_add(&scheduler->n_list, &ip_vs_schedulers); |
214 | write_unlock_bh(&__ip_vs_sched_lock); | 214 | spin_unlock_bh(&ip_vs_sched_lock); |
215 | 215 | ||
216 | pr_info("[%s] scheduler registered.\n", scheduler->name); | 216 | pr_info("[%s] scheduler registered.\n", scheduler->name); |
217 | 217 | ||
@@ -229,9 +229,9 @@ int unregister_ip_vs_scheduler(struct ip_vs_scheduler *scheduler) | |||
229 | return -EINVAL; | 229 | return -EINVAL; |
230 | } | 230 | } |
231 | 231 | ||
232 | write_lock_bh(&__ip_vs_sched_lock); | 232 | spin_lock_bh(&ip_vs_sched_lock); |
233 | if (list_empty(&scheduler->n_list)) { | 233 | if (list_empty(&scheduler->n_list)) { |
234 | write_unlock_bh(&__ip_vs_sched_lock); | 234 | spin_unlock_bh(&ip_vs_sched_lock); |
235 | pr_err("%s(): [%s] scheduler is not in the list. failed\n", | 235 | pr_err("%s(): [%s] scheduler is not in the list. failed\n", |
236 | __func__, scheduler->name); | 236 | __func__, scheduler->name); |
237 | return -EINVAL; | 237 | return -EINVAL; |
@@ -241,7 +241,7 @@ int unregister_ip_vs_scheduler(struct ip_vs_scheduler *scheduler) | |||
241 | * Remove it from the d-linked scheduler list | 241 | * Remove it from the d-linked scheduler list |
242 | */ | 242 | */ |
243 | list_del(&scheduler->n_list); | 243 | list_del(&scheduler->n_list); |
244 | write_unlock_bh(&__ip_vs_sched_lock); | 244 | spin_unlock_bh(&ip_vs_sched_lock); |
245 | 245 | ||
246 | /* decrease the module use count */ | 246 | /* decrease the module use count */ |
247 | ip_vs_use_count_dec(); | 247 | ip_vs_use_count_dec(); |