summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/skbuff.h14
-rw-r--r--include/linux/sysctl.h1
-rw-r--r--include/net/dst.h1
3 files changed, 7 insertions, 9 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index a6b744bccdc8..23e0b48b79a4 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -353,15 +353,11 @@ static inline struct sk_buff *skb_get(struct sk_buff *skb)
*/
static inline void kfree_skb(struct sk_buff *skb)
{
- if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users))
- __kfree_skb(skb);
-}
-
-/* Use this if you didn't touch the skb state [for fast switching] */
-static inline void kfree_skb_fast(struct sk_buff *skb)
-{
- if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users))
- kfree_skbmem(skb);
+ if (likely(atomic_read(&skb->users) == 1))
+ smp_rmb();
+ else if (likely(!atomic_dec_and_test(&skb->users)))
+ return;
+ __kfree_skb(skb);
}
/**
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 86488d26260a..06bdf80154fb 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -365,6 +365,7 @@ enum {
NET_IPV4_ROUTE_MIN_PMTU=16,
NET_IPV4_ROUTE_MIN_ADVMSS=17,
NET_IPV4_ROUTE_SECRET_INTERVAL=18,
+ NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS=19,
};
enum
diff --git a/include/net/dst.h b/include/net/dst.h
index 7ffb470d0e9a..d214a5781c17 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -147,6 +147,7 @@ void dst_release(struct dst_entry * dst)
{
if (dst) {
WARN_ON(atomic_read(&dst->__refcnt) < 1);
+ smp_mb__before_atomic_dec();
atomic_dec(&dst->__refcnt);
}
}