Merge tag 'pci-v4.12-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaa...
[linux-2.6-microblaze.git] / net / netfilter / nf_conntrack_expect.c
index d800730..e03d16e 100644 (file)
@@ -103,6 +103,17 @@ nf_ct_exp_equal(const struct nf_conntrack_tuple *tuple,
               nf_ct_zone_equal_any(i->master, zone);
 }
 
+bool nf_ct_remove_expect(struct nf_conntrack_expect *exp)
+{
+       if (del_timer(&exp->timeout)) {
+               nf_ct_unlink_expect(exp);
+               nf_ct_expect_put(exp);
+               return true;
+       }
+       return false;
+}
+EXPORT_SYMBOL_GPL(nf_ct_remove_expect);
+
 struct nf_conntrack_expect *
 __nf_ct_expect_find(struct net *net,
                    const struct nf_conntrack_zone *zone,
@@ -133,7 +144,7 @@ nf_ct_expect_find_get(struct net *net,
 
        rcu_read_lock();
        i = __nf_ct_expect_find(net, zone, tuple);
-       if (i && !atomic_inc_not_zero(&i->use))
+       if (i && !refcount_inc_not_zero(&i->use))
                i = NULL;
        rcu_read_unlock();
 
@@ -186,7 +197,7 @@ nf_ct_find_expectation(struct net *net,
                return NULL;
 
        if (exp->flags & NF_CT_EXPECT_PERMANENT) {
-               atomic_inc(&exp->use);
+               refcount_inc(&exp->use);
                return exp;
        } else if (del_timer(&exp->timeout)) {
                nf_ct_unlink_expect(exp);
@@ -211,10 +222,7 @@ void nf_ct_remove_expectations(struct nf_conn *ct)
 
        spin_lock_bh(&nf_conntrack_expect_lock);
        hlist_for_each_entry_safe(exp, next, &help->expectations, lnode) {
-               if (del_timer(&exp->timeout)) {
-                       nf_ct_unlink_expect(exp);
-                       nf_ct_expect_put(exp);
-               }
+               nf_ct_remove_expect(exp);
        }
        spin_unlock_bh(&nf_conntrack_expect_lock);
 }
@@ -255,10 +263,7 @@ static inline int expect_matches(const struct nf_conntrack_expect *a,
 void nf_ct_unexpect_related(struct nf_conntrack_expect *exp)
 {
        spin_lock_bh(&nf_conntrack_expect_lock);
-       if (del_timer(&exp->timeout)) {
-               nf_ct_unlink_expect(exp);
-               nf_ct_expect_put(exp);
-       }
+       nf_ct_remove_expect(exp);
        spin_unlock_bh(&nf_conntrack_expect_lock);
 }
 EXPORT_SYMBOL_GPL(nf_ct_unexpect_related);
@@ -275,7 +280,7 @@ struct nf_conntrack_expect *nf_ct_expect_alloc(struct nf_conn *me)
                return NULL;
 
        new->master = me;
-       atomic_set(&new->use, 1);
+       refcount_set(&new->use, 1);
        return new;
 }
 EXPORT_SYMBOL_GPL(nf_ct_expect_alloc);
@@ -348,7 +353,7 @@ static void nf_ct_expect_free_rcu(struct rcu_head *head)
 
 void nf_ct_expect_put(struct nf_conntrack_expect *exp)
 {
-       if (atomic_dec_and_test(&exp->use))
+       if (refcount_dec_and_test(&exp->use))
                call_rcu(&exp->rcu, nf_ct_expect_free_rcu);
 }
 EXPORT_SYMBOL_GPL(nf_ct_expect_put);
@@ -361,7 +366,7 @@ static void nf_ct_expect_insert(struct nf_conntrack_expect *exp)
        unsigned int h = nf_ct_expect_dst_hash(net, &exp->tuple);
 
        /* two references : one for hash insert, one for the timer */
-       atomic_add(2, &exp->use);
+       refcount_add(2, &exp->use);
 
        hlist_add_head_rcu(&exp->lnode, &master_help->expectations);
        master_help->expecting[exp->class]++;
@@ -394,10 +399,8 @@ static void evict_oldest_expect(struct nf_conn *master,
                        last = exp;
        }
 
-       if (last && del_timer(&last->timeout)) {
-               nf_ct_unlink_expect(last);
-               nf_ct_expect_put(last);
-       }
+       if (last)
+               nf_ct_remove_expect(last);
 }
 
 static inline int __nf_ct_expect_check(struct nf_conntrack_expect *expect)
@@ -419,11 +422,8 @@ static inline int __nf_ct_expect_check(struct nf_conntrack_expect *expect)
        h = nf_ct_expect_dst_hash(net, &expect->tuple);
        hlist_for_each_entry_safe(i, next, &nf_ct_expect_hash[h], hnode) {
                if (expect_matches(i, expect)) {
-                       if (del_timer(&i->timeout)) {
-                               nf_ct_unlink_expect(i);
-                               nf_ct_expect_put(i);
+                       if (nf_ct_remove_expect(expect))
                                break;
-                       }
                } else if (expect_clash(i, expect)) {
                        ret = -EBUSY;
                        goto out;
@@ -549,7 +549,7 @@ static int exp_seq_show(struct seq_file *s, void *v)
                seq_printf(s, "%ld ", timer_pending(&expect->timeout)
                           ? (long)(expect->timeout.expires - jiffies)/HZ : 0);
        else
-               seq_printf(s, "- ");
+               seq_puts(s, "- ");
        seq_printf(s, "l3proto = %u proto=%u ",
                   expect->tuple.src.l3num,
                   expect->tuple.dst.protonum);
@@ -559,7 +559,7 @@ static int exp_seq_show(struct seq_file *s, void *v)
                                       expect->tuple.dst.protonum));
 
        if (expect->flags & NF_CT_EXPECT_PERMANENT) {
-               seq_printf(s, "PERMANENT");
+               seq_puts(s, "PERMANENT");
                delim = ",";
        }
        if (expect->flags & NF_CT_EXPECT_INACTIVE) {