]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/net/dst.h
mm, THP, swap: move anonymous THP split logic to vmscan
[karo-tx-linux.git] / include / net / dst.h
index cfc0437841665d7ed46a714915c50d723c24901c..f73611ec401754d4f52b5310a24da53566dafce6 100644 (file)
@@ -31,9 +31,9 @@
 struct sk_buff;
 
 struct dst_entry {
+       struct net_device       *dev;
        struct rcu_head         rcu_head;
        struct dst_entry        *child;
-       struct net_device       *dev;
        struct  dst_ops         *ops;
        unsigned long           _metrics;
        unsigned long           expires;
@@ -51,13 +51,11 @@ struct dst_entry {
 #define DST_HOST               0x0001
 #define DST_NOXFRM             0x0002
 #define DST_NOPOLICY           0x0004
-#define DST_NOHASH             0x0008
-#define DST_NOCACHE            0x0010
-#define DST_NOCOUNT            0x0020
-#define DST_FAKE_RTABLE                0x0040
-#define DST_XFRM_TUNNEL                0x0080
-#define DST_XFRM_QUEUE         0x0100
-#define DST_METADATA           0x0200
+#define DST_NOCOUNT            0x0008
+#define DST_FAKE_RTABLE                0x0010
+#define DST_XFRM_TUNNEL                0x0020
+#define DST_XFRM_QUEUE         0x0040
+#define DST_METADATA           0x0080
 
        short                   error;
 
@@ -253,7 +251,7 @@ static inline void dst_hold(struct dst_entry *dst)
         * __pad_to_align_refcnt declaration in struct dst_entry
         */
        BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
-       atomic_inc(&dst->__refcnt);
+       WARN_ON(atomic_inc_not_zero(&dst->__refcnt) == 0);
 }
 
 static inline void dst_use(struct dst_entry *dst, unsigned long time)
@@ -278,6 +276,8 @@ static inline struct dst_entry *dst_clone(struct dst_entry *dst)
 
 void dst_release(struct dst_entry *dst);
 
+void dst_release_immediate(struct dst_entry *dst);
+
 static inline void refdst_drop(unsigned long refdst)
 {
        if (!(refdst & SKB_DST_NOREF))
@@ -334,10 +334,7 @@ static inline void skb_dst_force(struct sk_buff *skb)
  */
 static inline bool dst_hold_safe(struct dst_entry *dst)
 {
-       if (dst->flags & DST_NOCACHE)
-               return atomic_inc_not_zero(&dst->__refcnt);
-       dst_hold(dst);
-       return true;
+       return atomic_inc_not_zero(&dst->__refcnt);
 }
 
 /**
@@ -423,26 +420,8 @@ void *dst_alloc(struct dst_ops *ops, struct net_device *dev, int initial_ref,
 void dst_init(struct dst_entry *dst, struct dst_ops *ops,
              struct net_device *dev, int initial_ref, int initial_obsolete,
              unsigned short flags);
-void __dst_free(struct dst_entry *dst);
 struct dst_entry *dst_destroy(struct dst_entry *dst);
-
-static inline void dst_free(struct dst_entry *dst)
-{
-       if (dst->obsolete > 0)
-               return;
-       if (!atomic_read(&dst->__refcnt)) {
-               dst = dst_destroy(dst);
-               if (!dst)
-                       return;
-       }
-       __dst_free(dst);
-}
-
-static inline void dst_rcu_free(struct rcu_head *head)
-{
-       struct dst_entry *dst = container_of(head, struct dst_entry, rcu_head);
-       dst_free(dst);
-}
+void dst_dev_put(struct dst_entry *dst);
 
 static inline void dst_confirm(struct dst_entry *dst)
 {
@@ -505,8 +484,6 @@ static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie)
        return dst;
 }
 
-void dst_subsys_init(void);
-
 /* Flags for xfrm_lookup flags argument. */
 enum {
        XFRM_LOOKUP_ICMP = 1 << 0,