]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/net/ip_vs.h
Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux...
[karo-tx-linux.git] / include / net / ip_vs.h
index 7bdfa7d783639d8b65c18bd7f5a6ea5fa4fbb7da..4f4f786255efe16725cbdea7bb29362ea6023185 100644 (file)
@@ -12,6 +12,8 @@
 #include <linux/list.h>                 /* for struct list_head */
 #include <linux/spinlock.h>             /* for struct rwlock_t */
 #include <linux/atomic.h>               /* for struct atomic_t */
+#include <linux/refcount.h>             /* for struct refcount_t */
+
 #include <linux/compiler.h>
 #include <linux/timer.h>
 #include <linux/bug.h>
@@ -525,7 +527,7 @@ struct ip_vs_conn {
        struct netns_ipvs       *ipvs;
 
        /* counter and timer */
-       atomic_t                refcnt;         /* reference count */
+       refcount_t              refcnt;         /* reference count */
        struct timer_list       timer;          /* Expiration timer */
        volatile unsigned long  timeout;        /* timeout */
 
@@ -667,7 +669,7 @@ struct ip_vs_dest {
        atomic_t                conn_flags;     /* flags to copy to conn */
        atomic_t                weight;         /* server weight */
 
-       atomic_t                refcnt;         /* reference counter */
+       refcount_t              refcnt;         /* reference counter */
        struct ip_vs_stats      stats;          /* statistics */
        unsigned long           idle_start;     /* start time, jiffies */
 
@@ -1211,14 +1213,14 @@ struct ip_vs_conn * ip_vs_conn_out_get_proto(struct netns_ipvs *ipvs, int af,
  */
 static inline bool __ip_vs_conn_get(struct ip_vs_conn *cp)
 {
-       return atomic_inc_not_zero(&cp->refcnt);
+       return refcount_inc_not_zero(&cp->refcnt);
 }
 
 /* put back the conn without restarting its timer */
 static inline void __ip_vs_conn_put(struct ip_vs_conn *cp)
 {
        smp_mb__before_atomic();
-       atomic_dec(&cp->refcnt);
+       refcount_dec(&cp->refcnt);
 }
 void ip_vs_conn_put(struct ip_vs_conn *cp);
 void ip_vs_conn_fill_cport(struct ip_vs_conn *cp, __be16 cport);
@@ -1347,8 +1349,6 @@ int ip_vs_protocol_init(void);
 void ip_vs_protocol_cleanup(void);
 void ip_vs_protocol_timeout_change(struct netns_ipvs *ipvs, int flags);
 int *ip_vs_create_timeout_table(int *table, int size);
-int ip_vs_set_state_timeout(int *table, int num, const char *const *names,
-                           const char *name, int to);
 void ip_vs_tcpudp_debug_packet(int af, struct ip_vs_protocol *pp,
                               const struct sk_buff *skb, int offset,
                               const char *msg);
@@ -1410,18 +1410,18 @@ void ip_vs_try_bind_dest(struct ip_vs_conn *cp);
 
 static inline void ip_vs_dest_hold(struct ip_vs_dest *dest)
 {
-       atomic_inc(&dest->refcnt);
+       refcount_inc(&dest->refcnt);
 }
 
 static inline void ip_vs_dest_put(struct ip_vs_dest *dest)
 {
        smp_mb__before_atomic();
-       atomic_dec(&dest->refcnt);
+       refcount_dec(&dest->refcnt);
 }
 
 static inline void ip_vs_dest_put_and_free(struct ip_vs_dest *dest)
 {
-       if (atomic_dec_and_test(&dest->refcnt))
+       if (refcount_dec_and_test(&dest->refcnt))
                kfree(dest);
 }
 
@@ -1553,13 +1553,9 @@ static inline void ip_vs_notrack(struct sk_buff *skb)
        enum ip_conntrack_info ctinfo;
        struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
 
-       if (!ct || !nf_ct_is_untracked(ct)) {
-               struct nf_conn *untracked;
-
+       if (ct) {
                nf_conntrack_put(&ct->ct_general);
-               untracked = nf_ct_untracked_get();
-               nf_conntrack_get(&untracked->ct_general);
-               nf_ct_set(skb, untracked, IP_CT_NEW);
+               nf_ct_set(skb, NULL, IP_CT_UNTRACKED);
        }
 #endif
 }
@@ -1618,7 +1614,7 @@ static inline bool ip_vs_conn_uses_conntrack(struct ip_vs_conn *cp,
        if (!(cp->flags & IP_VS_CONN_F_NFCT))
                return false;
        ct = nf_ct_get(skb, &ctinfo);
-       if (ct && !nf_ct_is_untracked(ct))
+       if (ct)
                return true;
 #endif
        return false;