mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 05:04:00 +08:00
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: Julian Anastasov <ja@ssi.bg> Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
parent
578bc3ef1e
commit
ed3ffc4e48
include/net
net/netfilter/ipvs
@ -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);
|
|||||||
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)
|
|||||||
/*
|
/*
|
||||||
* 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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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)
|
|||||||
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,
|
|||||||
/*
|
/*
|
||||||
* 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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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)
|
|||||||
* Release the mark variable
|
* Release the mark variable
|
||||||
*/
|
*/
|
||||||
kfree_rcu(mark, rcu_head);
|
kfree_rcu(mark, rcu_head);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user