Commit 569d3645 authored by Daniel Lezcano's avatar Daniel Lezcano Committed by David S. Miller

[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: default avatarDaniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a6501e08
...@@ -89,7 +89,7 @@ struct dst_ops ...@@ -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) ...@@ -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; ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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 @@ static int rt_intern_hash(unsigned hash, struct rtable *rt, struct rtable **rp) ...@@ -1035,7 +1035,7 @@ static int rt_intern_hash(unsigned hash, struct rtable *rt, struct rtable **rp)
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) ...@@ -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 *); ...@@ -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) ...@@ -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) ...@@ -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);
......
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