Merge tag 'clk-for-linus' of git://git.linaro.org/people/mturquette/linux
[cascardo/linux.git] / net / netfilter / nf_conntrack_core.c
index ac3af97..cf48755 100644 (file)
@@ -531,7 +531,7 @@ __nf_conntrack_confirm(struct sk_buff *skb)
        tstamp = nf_conn_tstamp_find(ct);
        if (tstamp) {
                if (skb->tstamp.tv64 == 0)
-                       __net_timestamp((struct sk_buff *)skb);
+                       __net_timestamp(skb);
 
                tstamp->start = ktime_to_ns(skb->tstamp);
        }
@@ -819,7 +819,8 @@ init_conntrack(struct net *net, struct nf_conn *tmpl,
                __set_bit(IPS_EXPECTED_BIT, &ct->status);
                ct->master = exp->master;
                if (exp->helper) {
-                       help = nf_ct_helper_ext_add(ct, GFP_ATOMIC);
+                       help = nf_ct_helper_ext_add(ct, exp->helper,
+                                                   GFP_ATOMIC);
                        if (help)
                                rcu_assign_pointer(help->helper, exp->helper);
                }
@@ -1333,7 +1334,6 @@ static void nf_conntrack_cleanup_init_net(void)
        while (untrack_refs() > 0)
                schedule();
 
-       nf_conntrack_proto_fini();
 #ifdef CONFIG_NF_CONNTRACK_ZONES
        nf_ct_extend_unregister(&nf_ct_zone_extend);
 #endif
@@ -1372,7 +1372,7 @@ void nf_conntrack_cleanup(struct net *net)
           netfilter framework.  Roll on, two-stage module
           delete... */
        synchronize_net();
-
+       nf_conntrack_proto_fini(net);
        nf_conntrack_cleanup_net(net);
 
        if (net_eq(net, &init_net)) {
@@ -1496,11 +1496,6 @@ static int nf_conntrack_init_init_net(void)
        printk(KERN_INFO "nf_conntrack version %s (%u buckets, %d max)\n",
               NF_CONNTRACK_VERSION, nf_conntrack_htable_size,
               nf_conntrack_max);
-
-       ret = nf_conntrack_proto_init();
-       if (ret < 0)
-               goto err_proto;
-
 #ifdef CONFIG_NF_CONNTRACK_ZONES
        ret = nf_ct_extend_register(&nf_ct_zone_extend);
        if (ret < 0)
@@ -1518,9 +1513,7 @@ static int nf_conntrack_init_init_net(void)
 
 #ifdef CONFIG_NF_CONNTRACK_ZONES
 err_extend:
-       nf_conntrack_proto_fini();
 #endif
-err_proto:
        return ret;
 }
 
@@ -1583,9 +1576,7 @@ static int nf_conntrack_init_net(struct net *net)
        ret = nf_conntrack_helper_init(net);
        if (ret < 0)
                goto err_helper;
-
        return 0;
-
 err_helper:
        nf_conntrack_timeout_fini(net);
 err_timeout:
@@ -1622,6 +1613,9 @@ int nf_conntrack_init(struct net *net)
                if (ret < 0)
                        goto out_init_net;
        }
+       ret = nf_conntrack_proto_init(net);
+       if (ret < 0)
+               goto out_proto;
        ret = nf_conntrack_init_net(net);
        if (ret < 0)
                goto out_net;
@@ -1637,6 +1631,8 @@ int nf_conntrack_init(struct net *net)
        return 0;
 
 out_net:
+       nf_conntrack_proto_fini(net);
+out_proto:
        if (net_eq(net, &init_net))
                nf_conntrack_cleanup_init_net();
 out_init_net: