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

ipvs: rename functions related to dst_cache reset

Move and give better names to two functions:

- ip_vs_dst_reset to __ip_vs_dst_cache_reset
- __ip_vs_dev_reset to ip_vs_forget_dev
Signed-off-by: default avatarJulian Anastasov <ja@ssi.bg>
Signed-off by: Hans Schillstrom <hans@schillstrom.com>
Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
parent b8abdf09
...@@ -1427,7 +1427,6 @@ extern int ip_vs_dr_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, ...@@ -1427,7 +1427,6 @@ extern int ip_vs_dr_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
extern int ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, extern int ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
struct ip_vs_protocol *pp, int offset, struct ip_vs_protocol *pp, int offset,
unsigned int hooknum, struct ip_vs_iphdr *iph); unsigned int hooknum, struct ip_vs_iphdr *iph);
extern void ip_vs_dst_reset(struct ip_vs_dest *dest);
#ifdef CONFIG_IP_VS_IPV6 #ifdef CONFIG_IP_VS_IPV6
extern int ip_vs_bypass_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp, extern int ip_vs_bypass_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
......
...@@ -641,6 +641,17 @@ struct ip_vs_dest *ip_vs_find_dest(struct net *net, int af, ...@@ -641,6 +641,17 @@ struct ip_vs_dest *ip_vs_find_dest(struct net *net, int af,
return dest; return dest;
} }
/* Release dst_cache for dest in user context */
static void __ip_vs_dst_cache_reset(struct ip_vs_dest *dest)
{
struct dst_entry *old_dst;
old_dst = dest->dst_cache;
dest->dst_cache = NULL;
dst_release(old_dst);
dest->dst_saddr.ip = 0;
}
/* /*
* Lookup dest by {svc,addr,port} in the destination trash. * Lookup dest by {svc,addr,port} in the destination trash.
* The destination trash is used to hold the destinations that are removed * The destination trash is used to hold the destinations that are removed
...@@ -690,7 +701,7 @@ ip_vs_trash_get_dest(struct ip_vs_service *svc, const union nf_inet_addr *daddr, ...@@ -690,7 +701,7 @@ ip_vs_trash_get_dest(struct ip_vs_service *svc, const union nf_inet_addr *daddr,
IP_VS_DBG_ADDR(svc->af, &dest->addr), IP_VS_DBG_ADDR(svc->af, &dest->addr),
ntohs(dest->port)); ntohs(dest->port));
list_del(&dest->n_list); list_del(&dest->n_list);
ip_vs_dst_reset(dest); __ip_vs_dst_cache_reset(dest);
__ip_vs_unbind_svc(dest); __ip_vs_unbind_svc(dest);
free_percpu(dest->stats.cpustats); free_percpu(dest->stats.cpustats);
kfree(dest); kfree(dest);
...@@ -717,7 +728,7 @@ static void ip_vs_trash_cleanup(struct net *net) ...@@ -717,7 +728,7 @@ static void ip_vs_trash_cleanup(struct net *net)
list_for_each_entry_safe(dest, nxt, &ipvs->dest_trash, n_list) { list_for_each_entry_safe(dest, nxt, &ipvs->dest_trash, n_list) {
list_del(&dest->n_list); list_del(&dest->n_list);
ip_vs_dst_reset(dest); __ip_vs_dst_cache_reset(dest);
__ip_vs_unbind_svc(dest); __ip_vs_unbind_svc(dest);
free_percpu(dest->stats.cpustats); free_percpu(dest->stats.cpustats);
kfree(dest); kfree(dest);
...@@ -811,7 +822,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest, ...@@ -811,7 +822,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest,
dest->l_threshold = udest->l_threshold; dest->l_threshold = udest->l_threshold;
spin_lock_bh(&dest->dst_lock); spin_lock_bh(&dest->dst_lock);
ip_vs_dst_reset(dest); __ip_vs_dst_cache_reset(dest);
spin_unlock_bh(&dest->dst_lock); spin_unlock_bh(&dest->dst_lock);
if (add) if (add)
...@@ -1037,7 +1048,7 @@ static void __ip_vs_del_dest(struct net *net, struct ip_vs_dest *dest) ...@@ -1037,7 +1048,7 @@ static void __ip_vs_del_dest(struct net *net, struct ip_vs_dest *dest)
dest->vfwmark, dest->vfwmark,
IP_VS_DBG_ADDR(dest->af, &dest->addr), IP_VS_DBG_ADDR(dest->af, &dest->addr),
ntohs(dest->port)); ntohs(dest->port));
ip_vs_dst_reset(dest); __ip_vs_dst_cache_reset(dest);
/* simply decrease svc->refcnt here, let the caller check /* simply decrease svc->refcnt here, let the caller check
and release the service if nobody refers to it. and release the service if nobody refers to it.
Only user context can release destination and service, Only user context can release destination and service,
...@@ -1496,11 +1507,10 @@ void ip_vs_service_net_cleanup(struct net *net) ...@@ -1496,11 +1507,10 @@ void ip_vs_service_net_cleanup(struct net *net)
mutex_unlock(&__ip_vs_mutex); mutex_unlock(&__ip_vs_mutex);
LeaveFunction(2); LeaveFunction(2);
} }
/*
* Release dst hold by dst_cache /* Put all references for device (dst_cache) */
*/
static inline void static inline void
__ip_vs_dev_reset(struct ip_vs_dest *dest, struct net_device *dev) ip_vs_forget_dev(struct ip_vs_dest *dest, struct net_device *dev)
{ {
spin_lock_bh(&dest->dst_lock); spin_lock_bh(&dest->dst_lock);
if (dest->dst_cache && dest->dst_cache->dev == dev) { if (dest->dst_cache && dest->dst_cache->dev == dev) {
...@@ -1509,7 +1519,7 @@ __ip_vs_dev_reset(struct ip_vs_dest *dest, struct net_device *dev) ...@@ -1509,7 +1519,7 @@ __ip_vs_dev_reset(struct ip_vs_dest *dest, struct net_device *dev)
IP_VS_DBG_ADDR(dest->af, &dest->addr), IP_VS_DBG_ADDR(dest->af, &dest->addr),
ntohs(dest->port), ntohs(dest->port),
atomic_read(&dest->refcnt)); atomic_read(&dest->refcnt));
ip_vs_dst_reset(dest); __ip_vs_dst_cache_reset(dest);
} }
spin_unlock_bh(&dest->dst_lock); spin_unlock_bh(&dest->dst_lock);
...@@ -1537,7 +1547,7 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event, ...@@ -1537,7 +1547,7 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event,
if (net_eq(svc->net, net)) { if (net_eq(svc->net, net)) {
list_for_each_entry(dest, &svc->destinations, list_for_each_entry(dest, &svc->destinations,
n_list) { n_list) {
__ip_vs_dev_reset(dest, dev); ip_vs_forget_dev(dest, dev);
} }
} }
} }
...@@ -1546,7 +1556,7 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event, ...@@ -1546,7 +1556,7 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event,
if (net_eq(svc->net, net)) { if (net_eq(svc->net, net)) {
list_for_each_entry(dest, &svc->destinations, list_for_each_entry(dest, &svc->destinations,
n_list) { n_list) {
__ip_vs_dev_reset(dest, dev); ip_vs_forget_dev(dest, dev);
} }
} }
...@@ -1554,7 +1564,7 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event, ...@@ -1554,7 +1564,7 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event,
} }
list_for_each_entry(dest, &ipvs->dest_trash, n_list) { list_for_each_entry(dest, &ipvs->dest_trash, n_list) {
__ip_vs_dev_reset(dest, dev); ip_vs_forget_dev(dest, dev);
} }
mutex_unlock(&__ip_vs_mutex); mutex_unlock(&__ip_vs_mutex);
LeaveFunction(2); LeaveFunction(2);
......
...@@ -362,20 +362,6 @@ __ip_vs_get_out_rt_v6(struct sk_buff *skb, struct ip_vs_dest *dest, ...@@ -362,20 +362,6 @@ __ip_vs_get_out_rt_v6(struct sk_buff *skb, struct ip_vs_dest *dest,
#endif #endif
/*
* Release dest->dst_cache before a dest is removed
*/
void
ip_vs_dst_reset(struct ip_vs_dest *dest)
{
struct dst_entry *old_dst;
old_dst = dest->dst_cache;
dest->dst_cache = NULL;
dst_release(old_dst);
dest->dst_saddr.ip = 0;
}
/* return NF_ACCEPT to allow forwarding or other NF_xxx on error */ /* return NF_ACCEPT to allow forwarding or other NF_xxx on error */
static inline int ip_vs_tunnel_xmit_prepare(struct sk_buff *skb, static inline int ip_vs_tunnel_xmit_prepare(struct sk_buff *skb,
struct ip_vs_conn *cp) struct ip_vs_conn *cp)
......
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