20 #define KMSG_COMPONENT "IPVS"
21 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
23 #include <linux/module.h>
26 #include <asm/string.h>
28 #include <linux/sysctl.h>
55 pr_err(
"%s(): init error\n", __func__);
76 pr_err(
"%s(): done error\n", __func__);
89 static struct ip_vs_scheduler *ip_vs_sched_getbyname(
const char *sched_name)
93 IP_VS_DBG(2,
"%s(): sched_name \"%s\"\n", __func__, sched_name);
95 spin_lock_bh(&ip_vs_sched_lock);
109 spin_unlock_bh(&ip_vs_sched_lock);
113 module_put(sched->
module);
116 spin_unlock_bh(&ip_vs_sched_lock);
131 sched = ip_vs_sched_getbyname(sched_name);
137 request_module(
"ip_vs_%s", sched_name);
138 sched = ip_vs_sched_getbyname(sched_name);
146 if (scheduler && scheduler->
module)
147 module_put(scheduler->
module);
160 #ifdef CONFIG_IP_VS_IPV6
183 pr_err(
"%s(): NULL arg\n", __func__);
187 if (!scheduler->
name) {
188 pr_err(
"%s(): NULL scheduler_name\n", __func__);
195 spin_lock_bh(&ip_vs_sched_lock);
197 if (!list_empty(&scheduler->
n_list)) {
198 spin_unlock_bh(&ip_vs_sched_lock);
200 pr_err(
"%s(): [%s] scheduler already linked\n",
201 __func__, scheduler->
name);
211 spin_unlock_bh(&ip_vs_sched_lock);
213 pr_err(
"%s(): [%s] scheduler already existed "
214 "in the system\n", __func__, scheduler->
name);
221 list_add(&scheduler->
n_list, &ip_vs_schedulers);
222 spin_unlock_bh(&ip_vs_sched_lock);
224 pr_info(
"[%s] scheduler registered.\n", scheduler->
name);
236 pr_err(
"%s(): NULL arg\n", __func__);
240 spin_lock_bh(&ip_vs_sched_lock);
241 if (list_empty(&scheduler->
n_list)) {
242 spin_unlock_bh(&ip_vs_sched_lock);
243 pr_err(
"%s(): [%s] scheduler is not in the list. failed\n",
244 __func__, scheduler->
name);
252 spin_unlock_bh(&ip_vs_sched_lock);
257 pr_info(
"[%s] scheduler unregistered.\n", scheduler->
name);