diff options
author | Alexey Dobriyan <adobriyan@gmail.com> | 2008-11-25 20:37:23 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-25 20:37:23 -0500 |
commit | ddcfd79680c1dc74eb5f24aa70785c11bf7eec8f (patch) | |
tree | f1d762f6b1cf6bcec289fe558a26dcb4e37ffb29 | |
parent | 3dd0b4997a1d4f3a3666e400cc75b0279ce96849 (diff) |
netns xfrm: dst garbage-collecting in netns
Pass netns pointer to struct xfrm_policy_afinfo::garbage_collect()
[This needs more thoughts on what to do with dst_ops]
[Currently stub to init_net]
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/net/xfrm.h | 2 | ||||
-rw-r--r-- | net/ipv4/xfrm4_policy.c | 2 | ||||
-rw-r--r-- | net/ipv6/xfrm6_policy.c | 2 | ||||
-rw-r--r-- | net/xfrm/xfrm_policy.c | 4 |
4 files changed, 5 insertions, 5 deletions
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 36c8cffdf4e2..bd2515005ae2 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
@@ -265,7 +265,7 @@ struct xfrm_dst; | |||
265 | struct xfrm_policy_afinfo { | 265 | struct xfrm_policy_afinfo { |
266 | unsigned short family; | 266 | unsigned short family; |
267 | struct dst_ops *dst_ops; | 267 | struct dst_ops *dst_ops; |
268 | void (*garbage_collect)(void); | 268 | void (*garbage_collect)(struct net *net); |
269 | struct dst_entry *(*dst_lookup)(int tos, xfrm_address_t *saddr, | 269 | struct dst_entry *(*dst_lookup)(int tos, xfrm_address_t *saddr, |
270 | xfrm_address_t *daddr); | 270 | xfrm_address_t *daddr); |
271 | int (*get_saddr)(xfrm_address_t *saddr, xfrm_address_t *daddr); | 271 | int (*get_saddr)(xfrm_address_t *saddr, xfrm_address_t *daddr); |
diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c index 84dbb5a03cc2..a881ca38dddb 100644 --- a/net/ipv4/xfrm4_policy.c +++ b/net/ipv4/xfrm4_policy.c | |||
@@ -187,7 +187,7 @@ _decode_session4(struct sk_buff *skb, struct flowi *fl, int reverse) | |||
187 | 187 | ||
188 | static inline int xfrm4_garbage_collect(struct dst_ops *ops) | 188 | static inline int xfrm4_garbage_collect(struct dst_ops *ops) |
189 | { | 189 | { |
190 | xfrm4_policy_afinfo.garbage_collect(); | 190 | xfrm4_policy_afinfo.garbage_collect(&init_net); |
191 | return (atomic_read(&xfrm4_dst_ops.entries) > xfrm4_dst_ops.gc_thresh*2); | 191 | return (atomic_read(&xfrm4_dst_ops.entries) > xfrm4_dst_ops.gc_thresh*2); |
192 | } | 192 | } |
193 | 193 | ||
diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c index 3b67ce7786ec..2df8a78fc3df 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c | |||
@@ -220,7 +220,7 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse) | |||
220 | 220 | ||
221 | static inline int xfrm6_garbage_collect(struct dst_ops *ops) | 221 | static inline int xfrm6_garbage_collect(struct dst_ops *ops) |
222 | { | 222 | { |
223 | xfrm6_policy_afinfo.garbage_collect(); | 223 | xfrm6_policy_afinfo.garbage_collect(&init_net); |
224 | return (atomic_read(&xfrm6_dst_ops.entries) > xfrm6_dst_ops.gc_thresh*2); | 224 | return (atomic_read(&xfrm6_dst_ops.entries) > xfrm6_dst_ops.gc_thresh*2); |
225 | } | 225 | } |
226 | 226 | ||
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 49e089826f45..7ebbdd63fca0 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
@@ -2173,9 +2173,9 @@ static int unused_bundle(struct dst_entry *dst) | |||
2173 | return !atomic_read(&dst->__refcnt); | 2173 | return !atomic_read(&dst->__refcnt); |
2174 | } | 2174 | } |
2175 | 2175 | ||
2176 | static void __xfrm_garbage_collect(void) | 2176 | static void __xfrm_garbage_collect(struct net *net) |
2177 | { | 2177 | { |
2178 | xfrm_prune_bundles(&init_net, unused_bundle); | 2178 | xfrm_prune_bundles(net, unused_bundle); |
2179 | } | 2179 | } |
2180 | 2180 | ||
2181 | static int xfrm_flush_bundles(struct net *net) | 2181 | static int xfrm_flush_bundles(struct net *net) |