Commit ed3ffc4e authored by Julian Anastasov's avatar Julian Anastasov Committed by Pablo Neira Ayuso

ipvs: do not expect result from done_service

This method releases the scheduler state,
it can not fail. Such change will help to properly
replace the scheduler in following patch.
Signed-off-by: default avatarJulian Anastasov <ja@ssi.bg>
Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
parent 578bc3ef
...@@ -806,7 +806,7 @@ struct ip_vs_scheduler { ...@@ -806,7 +806,7 @@ struct ip_vs_scheduler {
/* scheduler initializing service */ /* scheduler initializing service */
int (*init_service)(struct ip_vs_service *svc); int (*init_service)(struct ip_vs_service *svc);
/* scheduling service finish */ /* scheduling service finish */
int (*done_service)(struct ip_vs_service *svc); void (*done_service)(struct ip_vs_service *svc);
/* scheduler updating service */ /* scheduler updating service */
int (*update_service)(struct ip_vs_service *svc); int (*update_service)(struct ip_vs_service *svc);
/* dest is linked */ /* dest is linked */
...@@ -1392,7 +1392,7 @@ extern int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler); ...@@ -1392,7 +1392,7 @@ extern int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler);
extern int unregister_ip_vs_scheduler(struct ip_vs_scheduler *scheduler); extern int unregister_ip_vs_scheduler(struct ip_vs_scheduler *scheduler);
extern int ip_vs_bind_scheduler(struct ip_vs_service *svc, extern int ip_vs_bind_scheduler(struct ip_vs_service *svc,
struct ip_vs_scheduler *scheduler); struct ip_vs_scheduler *scheduler);
extern int ip_vs_unbind_scheduler(struct ip_vs_service *svc); extern void ip_vs_unbind_scheduler(struct ip_vs_service *svc);
extern struct ip_vs_scheduler *ip_vs_scheduler_get(const char *sched_name); extern struct ip_vs_scheduler *ip_vs_scheduler_get(const char *sched_name);
extern void ip_vs_scheduler_put(struct ip_vs_scheduler *scheduler); extern void ip_vs_scheduler_put(struct ip_vs_scheduler *scheduler);
extern struct ip_vs_conn * extern struct ip_vs_conn *
......
...@@ -1334,10 +1334,7 @@ ip_vs_edit_service(struct ip_vs_service *svc, struct ip_vs_service_user_kern *u) ...@@ -1334,10 +1334,7 @@ ip_vs_edit_service(struct ip_vs_service *svc, struct ip_vs_service_user_kern *u)
/* /*
* Unbind the old scheduler * Unbind the old scheduler
*/ */
if ((ret = ip_vs_unbind_scheduler(svc))) { ip_vs_unbind_scheduler(svc);
old_sched = sched;
goto out_unlock;
}
/* /*
* Bind the new scheduler * Bind the new scheduler
......
...@@ -174,7 +174,7 @@ static int ip_vs_dh_init_svc(struct ip_vs_service *svc) ...@@ -174,7 +174,7 @@ static int ip_vs_dh_init_svc(struct ip_vs_service *svc)
} }
static int ip_vs_dh_done_svc(struct ip_vs_service *svc) static void ip_vs_dh_done_svc(struct ip_vs_service *svc)
{ {
struct ip_vs_dh_state *s = svc->sched_data; struct ip_vs_dh_state *s = svc->sched_data;
...@@ -185,8 +185,6 @@ static int ip_vs_dh_done_svc(struct ip_vs_service *svc) ...@@ -185,8 +185,6 @@ static int ip_vs_dh_done_svc(struct ip_vs_service *svc)
kfree_rcu(s, rcu_head); kfree_rcu(s, rcu_head);
IP_VS_DBG(6, "DH hash table (memory=%Zdbytes) released\n", IP_VS_DBG(6, "DH hash table (memory=%Zdbytes) released\n",
sizeof(struct ip_vs_dh_bucket)*IP_VS_DH_TAB_SIZE); sizeof(struct ip_vs_dh_bucket)*IP_VS_DH_TAB_SIZE);
return 0;
} }
......
...@@ -388,7 +388,7 @@ static int ip_vs_lblc_init_svc(struct ip_vs_service *svc) ...@@ -388,7 +388,7 @@ static int ip_vs_lblc_init_svc(struct ip_vs_service *svc)
} }
static int ip_vs_lblc_done_svc(struct ip_vs_service *svc) static void ip_vs_lblc_done_svc(struct ip_vs_service *svc)
{ {
struct ip_vs_lblc_table *tbl = svc->sched_data; struct ip_vs_lblc_table *tbl = svc->sched_data;
...@@ -402,8 +402,6 @@ static int ip_vs_lblc_done_svc(struct ip_vs_service *svc) ...@@ -402,8 +402,6 @@ static int ip_vs_lblc_done_svc(struct ip_vs_service *svc)
kfree_rcu(tbl, rcu_head); kfree_rcu(tbl, rcu_head);
IP_VS_DBG(6, "LBLC hash table (memory=%Zdbytes) released\n", IP_VS_DBG(6, "LBLC hash table (memory=%Zdbytes) released\n",
sizeof(*tbl)); sizeof(*tbl));
return 0;
} }
......
...@@ -555,7 +555,7 @@ static int ip_vs_lblcr_init_svc(struct ip_vs_service *svc) ...@@ -555,7 +555,7 @@ static int ip_vs_lblcr_init_svc(struct ip_vs_service *svc)
} }
static int ip_vs_lblcr_done_svc(struct ip_vs_service *svc) static void ip_vs_lblcr_done_svc(struct ip_vs_service *svc)
{ {
struct ip_vs_lblcr_table *tbl = svc->sched_data; struct ip_vs_lblcr_table *tbl = svc->sched_data;
...@@ -569,8 +569,6 @@ static int ip_vs_lblcr_done_svc(struct ip_vs_service *svc) ...@@ -569,8 +569,6 @@ static int ip_vs_lblcr_done_svc(struct ip_vs_service *svc)
kfree_rcu(tbl, rcu_head); kfree_rcu(tbl, rcu_head);
IP_VS_DBG(6, "LBLCR hash table (memory=%Zdbytes) released\n", IP_VS_DBG(6, "LBLCR hash table (memory=%Zdbytes) released\n",
sizeof(*tbl)); sizeof(*tbl));
return 0;
} }
......
...@@ -64,22 +64,17 @@ int ip_vs_bind_scheduler(struct ip_vs_service *svc, ...@@ -64,22 +64,17 @@ int ip_vs_bind_scheduler(struct ip_vs_service *svc,
/* /*
* Unbind a service with its scheduler * Unbind a service with its scheduler
*/ */
int ip_vs_unbind_scheduler(struct ip_vs_service *svc) void ip_vs_unbind_scheduler(struct ip_vs_service *svc)
{ {
struct ip_vs_scheduler *sched = svc->scheduler; struct ip_vs_scheduler *sched = svc->scheduler;
if (!sched) if (!sched)
return 0; return;
if (sched->done_service) { if (sched->done_service)
if (sched->done_service(svc) != 0) { sched->done_service(svc);
pr_err("%s(): done error\n", __func__);
return -EINVAL;
}
}
svc->scheduler = NULL; svc->scheduler = NULL;
return 0;
} }
......
...@@ -187,7 +187,7 @@ static int ip_vs_sh_init_svc(struct ip_vs_service *svc) ...@@ -187,7 +187,7 @@ static int ip_vs_sh_init_svc(struct ip_vs_service *svc)
} }
static int ip_vs_sh_done_svc(struct ip_vs_service *svc) static void ip_vs_sh_done_svc(struct ip_vs_service *svc)
{ {
struct ip_vs_sh_state *s = svc->sched_data; struct ip_vs_sh_state *s = svc->sched_data;
...@@ -198,8 +198,6 @@ static int ip_vs_sh_done_svc(struct ip_vs_service *svc) ...@@ -198,8 +198,6 @@ static int ip_vs_sh_done_svc(struct ip_vs_service *svc)
kfree_rcu(s, rcu_head); kfree_rcu(s, rcu_head);
IP_VS_DBG(6, "SH hash table (memory=%Zdbytes) released\n", IP_VS_DBG(6, "SH hash table (memory=%Zdbytes) released\n",
sizeof(struct ip_vs_sh_bucket)*IP_VS_SH_TAB_SIZE); sizeof(struct ip_vs_sh_bucket)*IP_VS_SH_TAB_SIZE);
return 0;
} }
......
...@@ -129,7 +129,7 @@ static int ip_vs_wrr_init_svc(struct ip_vs_service *svc) ...@@ -129,7 +129,7 @@ static int ip_vs_wrr_init_svc(struct ip_vs_service *svc)
} }
static int ip_vs_wrr_done_svc(struct ip_vs_service *svc) static void ip_vs_wrr_done_svc(struct ip_vs_service *svc)
{ {
struct ip_vs_wrr_mark *mark = svc->sched_data; struct ip_vs_wrr_mark *mark = svc->sched_data;
...@@ -137,8 +137,6 @@ static int ip_vs_wrr_done_svc(struct ip_vs_service *svc) ...@@ -137,8 +137,6 @@ static int ip_vs_wrr_done_svc(struct ip_vs_service *svc)
* Release the mark variable * Release the mark variable
*/ */
kfree_rcu(mark, rcu_head); kfree_rcu(mark, rcu_head);
return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment