netfilter: don't use INIT_RCU_HEAD()
[safe/jmp/linux-2.6] / net / netfilter / nf_conntrack_proto_gre.c
index 4ab62ad..d899b1a 100644 (file)
@@ -43,7 +43,7 @@
 #define GRE_TIMEOUT            (30 * HZ)
 #define GRE_STREAM_TIMEOUT     (180 * HZ)
 
-static int proto_gre_net_id;
+static int proto_gre_net_id __read_mostly;
 struct netns_proto_gre {
        rwlock_t                keymap_lock;
        struct list_head        keymap_list;
@@ -176,7 +176,7 @@ static bool gre_invert_tuple(struct nf_conntrack_tuple *tuple,
 static bool gre_pkt_to_tuple(const struct sk_buff *skb, unsigned int dataoff,
                             struct nf_conntrack_tuple *tuple)
 {
-       struct net *net = dev_net(skb->dev ? skb->dev : skb->dst->dev);
+       struct net *net = dev_net(skb->dev ? skb->dev : skb_dst(skb)->dev);
        const struct gre_hdr_pptp *pgrehdr;
        struct gre_hdr_pptp _pgrehdr;
        __be16 srckey;
@@ -219,8 +219,7 @@ static int gre_print_tuple(struct seq_file *s,
 }
 
 /* print private data for conntrack */
-static int gre_print_conntrack(struct seq_file *s,
-                              const struct nf_conn *ct)
+static int gre_print_conntrack(struct seq_file *s, struct nf_conn *ct)
 {
        return seq_printf(s, "timeout=%u, stream_timeout=%u ",
                          (ct->proto.gre.timeout / HZ),
@@ -242,7 +241,7 @@ static int gre_packet(struct nf_conn *ct,
                                   ct->proto.gre.stream_timeout);
                /* Also, more likely to be important, and not a probe. */
                set_bit(IPS_ASSURED_BIT, &ct->status);
-               nf_conntrack_event_cache(IPCT_STATUS, ct);
+               nf_conntrack_event_cache(IPCT_ASSURED, ct);
        } else
                nf_ct_refresh_acct(ct, ctinfo, skb,
                                   ct->proto.gre.timeout);
@@ -293,6 +292,7 @@ static struct nf_conntrack_l4proto nf_conntrack_l4proto_gre4 __read_mostly = {
        .me              = THIS_MODULE,
 #if defined(CONFIG_NF_CT_NETLINK) || defined(CONFIG_NF_CT_NETLINK_MODULE)
        .tuple_to_nlattr = nf_ct_port_tuple_to_nlattr,
+       .nlattr_tuple_size = nf_ct_port_nlattr_tuple_size,
        .nlattr_to_tuple = nf_ct_port_nlattr_to_tuple,
        .nla_policy      = nf_ct_port_nla_policy,
 #endif
@@ -300,32 +300,24 @@ static struct nf_conntrack_l4proto nf_conntrack_l4proto_gre4 __read_mostly = {
 
 static int proto_gre_net_init(struct net *net)
 {
-       struct netns_proto_gre *net_gre;
-       int rv;
+       struct netns_proto_gre *net_gre = net_generic(net, proto_gre_net_id);
 
-       net_gre = kmalloc(sizeof(struct netns_proto_gre), GFP_KERNEL);
-       if (!net_gre)
-               return -ENOMEM;
        rwlock_init(&net_gre->keymap_lock);
        INIT_LIST_HEAD(&net_gre->keymap_list);
 
-       rv = net_assign_generic(net, proto_gre_net_id, net_gre);
-       if (rv < 0)
-               kfree(net_gre);
-       return rv;
+       return 0;
 }
 
 static void proto_gre_net_exit(struct net *net)
 {
-       struct netns_proto_gre *net_gre = net_generic(net, proto_gre_net_id);
-
        nf_ct_gre_keymap_flush(net);
-       kfree(net_gre);
 }
 
 static struct pernet_operations proto_gre_net_ops = {
        .init = proto_gre_net_init,
        .exit = proto_gre_net_exit,
+       .id   = &proto_gre_net_id,
+       .size = sizeof(struct netns_proto_gre),
 };
 
 static int __init nf_ct_proto_gre_init(void)
@@ -335,16 +327,16 @@ static int __init nf_ct_proto_gre_init(void)
        rv = nf_conntrack_l4proto_register(&nf_conntrack_l4proto_gre4);
        if (rv < 0)
                return rv;
-       rv = register_pernet_gen_subsys(&proto_gre_net_id, &proto_gre_net_ops);
+       rv = register_pernet_subsys(&proto_gre_net_ops);
        if (rv < 0)
                nf_conntrack_l4proto_unregister(&nf_conntrack_l4proto_gre4);
        return rv;
 }
 
-static void nf_ct_proto_gre_fini(void)
+static void __exit nf_ct_proto_gre_fini(void)
 {
        nf_conntrack_l4proto_unregister(&nf_conntrack_l4proto_gre4);
-       unregister_pernet_gen_subsys(proto_gre_net_id, &proto_gre_net_ops);
+       unregister_pernet_subsys(&proto_gre_net_ops);
 }
 
 module_init(nf_ct_proto_gre_init);