[NETNS][DST] dst: pass the dst_ops as parameter to the gc functions
The garbage collection function receive the dst_ops structure as parameter. This is useful for the next incoming patchset because it will need the dst_ops (there will be several instances) and the network namespace pointer (contained in the dst_ops). The protocols which do not take care of the namespaces will not be impacted by this change (expect for the function signature), they do just ignore the parameter. Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a6501e080c
commit
569d36452e
@ -89,7 +89,7 @@ struct dst_ops
|
|||||||
__be16 protocol;
|
__be16 protocol;
|
||||||
unsigned gc_thresh;
|
unsigned gc_thresh;
|
||||||
|
|
||||||
int (*gc)(void);
|
int (*gc)(struct dst_ops *ops);
|
||||||
struct dst_entry * (*check)(struct dst_entry *, __u32 cookie);
|
struct dst_entry * (*check)(struct dst_entry *, __u32 cookie);
|
||||||
void (*destroy)(struct dst_entry *);
|
void (*destroy)(struct dst_entry *);
|
||||||
void (*ifdown)(struct dst_entry *,
|
void (*ifdown)(struct dst_entry *,
|
||||||
|
@ -165,7 +165,7 @@ void * dst_alloc(struct dst_ops * ops)
|
|||||||
struct dst_entry * dst;
|
struct dst_entry * dst;
|
||||||
|
|
||||||
if (ops->gc && atomic_read(&ops->entries) > ops->gc_thresh) {
|
if (ops->gc && atomic_read(&ops->entries) > ops->gc_thresh) {
|
||||||
if (ops->gc())
|
if (ops->gc(ops))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
dst = kmem_cache_zalloc(ops->kmem_cachep, GFP_ATOMIC);
|
dst = kmem_cache_zalloc(ops->kmem_cachep, GFP_ATOMIC);
|
||||||
|
@ -107,7 +107,7 @@ static const int dn_rt_mtu_expires = 10 * 60 * HZ;
|
|||||||
|
|
||||||
static unsigned long dn_rt_deadline;
|
static unsigned long dn_rt_deadline;
|
||||||
|
|
||||||
static int dn_dst_gc(void);
|
static int dn_dst_gc(struct dst_ops *ops);
|
||||||
static struct dst_entry *dn_dst_check(struct dst_entry *, __u32);
|
static struct dst_entry *dn_dst_check(struct dst_entry *, __u32);
|
||||||
static struct dst_entry *dn_dst_negative_advice(struct dst_entry *);
|
static struct dst_entry *dn_dst_negative_advice(struct dst_entry *);
|
||||||
static void dn_dst_link_failure(struct sk_buff *);
|
static void dn_dst_link_failure(struct sk_buff *);
|
||||||
@ -185,7 +185,7 @@ static void dn_dst_check_expire(unsigned long dummy)
|
|||||||
mod_timer(&dn_route_timer, now + decnet_dst_gc_interval * HZ);
|
mod_timer(&dn_route_timer, now + decnet_dst_gc_interval * HZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dn_dst_gc(void)
|
static int dn_dst_gc(struct dst_ops *ops)
|
||||||
{
|
{
|
||||||
struct dn_route *rt, **rtp;
|
struct dn_route *rt, **rtp;
|
||||||
int i;
|
int i;
|
||||||
|
@ -154,7 +154,7 @@ static void ipv4_dst_ifdown(struct dst_entry *dst,
|
|||||||
static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst);
|
static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst);
|
||||||
static void ipv4_link_failure(struct sk_buff *skb);
|
static void ipv4_link_failure(struct sk_buff *skb);
|
||||||
static void ip_rt_update_pmtu(struct dst_entry *dst, u32 mtu);
|
static void ip_rt_update_pmtu(struct dst_entry *dst, u32 mtu);
|
||||||
static int rt_garbage_collect(void);
|
static int rt_garbage_collect(struct dst_ops *ops);
|
||||||
|
|
||||||
|
|
||||||
static struct dst_ops ipv4_dst_ops = {
|
static struct dst_ops ipv4_dst_ops = {
|
||||||
@ -820,7 +820,7 @@ static void rt_secret_rebuild(unsigned long dummy)
|
|||||||
and when load increases it reduces to limit cache size.
|
and when load increases it reduces to limit cache size.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int rt_garbage_collect(void)
|
static int rt_garbage_collect(struct dst_ops *ops)
|
||||||
{
|
{
|
||||||
static unsigned long expire = RT_GC_TIMEOUT;
|
static unsigned long expire = RT_GC_TIMEOUT;
|
||||||
static unsigned long last_gc;
|
static unsigned long last_gc;
|
||||||
@ -1035,7 +1035,7 @@ restart:
|
|||||||
int saved_int = ip_rt_gc_min_interval;
|
int saved_int = ip_rt_gc_min_interval;
|
||||||
ip_rt_gc_elasticity = 1;
|
ip_rt_gc_elasticity = 1;
|
||||||
ip_rt_gc_min_interval = 0;
|
ip_rt_gc_min_interval = 0;
|
||||||
rt_garbage_collect();
|
rt_garbage_collect(&ipv4_dst_ops);
|
||||||
ip_rt_gc_min_interval = saved_int;
|
ip_rt_gc_min_interval = saved_int;
|
||||||
ip_rt_gc_elasticity = saved_elasticity;
|
ip_rt_gc_elasticity = saved_elasticity;
|
||||||
goto restart;
|
goto restart;
|
||||||
|
@ -185,7 +185,7 @@ _decode_session4(struct sk_buff *skb, struct flowi *fl, int reverse)
|
|||||||
fl->fl4_tos = iph->tos;
|
fl->fl4_tos = iph->tos;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int xfrm4_garbage_collect(void)
|
static inline int xfrm4_garbage_collect(struct dst_ops *ops)
|
||||||
{
|
{
|
||||||
xfrm4_policy_afinfo.garbage_collect();
|
xfrm4_policy_afinfo.garbage_collect();
|
||||||
return (atomic_read(&xfrm4_dst_ops.entries) > xfrm4_dst_ops.gc_thresh*2);
|
return (atomic_read(&xfrm4_dst_ops.entries) > xfrm4_dst_ops.gc_thresh*2);
|
||||||
|
@ -79,7 +79,7 @@ static struct dst_entry *ip6_negative_advice(struct dst_entry *);
|
|||||||
static void ip6_dst_destroy(struct dst_entry *);
|
static void ip6_dst_destroy(struct dst_entry *);
|
||||||
static void ip6_dst_ifdown(struct dst_entry *,
|
static void ip6_dst_ifdown(struct dst_entry *,
|
||||||
struct net_device *dev, int how);
|
struct net_device *dev, int how);
|
||||||
static int ip6_dst_gc(void);
|
static int ip6_dst_gc(struct dst_ops *ops);
|
||||||
|
|
||||||
static int ip6_pkt_discard(struct sk_buff *skb);
|
static int ip6_pkt_discard(struct sk_buff *skb);
|
||||||
static int ip6_pkt_discard_out(struct sk_buff *skb);
|
static int ip6_pkt_discard_out(struct sk_buff *skb);
|
||||||
@ -983,7 +983,7 @@ int ndisc_dst_gc(int *more)
|
|||||||
return freed;
|
return freed;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ip6_dst_gc(void)
|
static int ip6_dst_gc(struct dst_ops *ops)
|
||||||
{
|
{
|
||||||
static unsigned expire = 30*HZ;
|
static unsigned expire = 30*HZ;
|
||||||
static unsigned long last_gc;
|
static unsigned long last_gc;
|
||||||
|
@ -212,7 +212,7 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int xfrm6_garbage_collect(void)
|
static inline int xfrm6_garbage_collect(struct dst_ops *ops)
|
||||||
{
|
{
|
||||||
xfrm6_policy_afinfo.garbage_collect();
|
xfrm6_policy_afinfo.garbage_collect();
|
||||||
return (atomic_read(&xfrm6_dst_ops.entries) > xfrm6_dst_ops.gc_thresh*2);
|
return (atomic_read(&xfrm6_dst_ops.entries) > xfrm6_dst_ops.gc_thresh*2);
|
||||||
|
Loading…
Reference in New Issue
Block a user