]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/ipv4/ip_fragment.c
memcg: bad page if page_cgroup when free
[linux-2.6-omap-h63xx.git] / net / ipv4 / ip_fragment.c
index 00646ed451f522a8c185321fa13f28351eff6b80..a2e92f9709db8459bd573e82c6842b6d9ea1d715 100644 (file)
@@ -441,7 +441,7 @@ static int ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
                return ip_frag_reasm(qp, prev, dev);
 
        write_lock(&ip4_frags.lock);
-       list_move_tail(&qp->q.lru_list, &ip4_frags.lru_list);
+       list_move_tail(&qp->q.lru_list, &qp->q.net->lru_list);
        write_unlock(&ip4_frags.lock);
        return -EINPROGRESS;
 
@@ -713,9 +713,20 @@ static int ipv4_frags_init_net(struct net *net)
        return ip4_frags_ctl_register(net);
 }
 
+static void ipv4_frags_exit_net(struct net *net)
+{
+       ip4_frags_ctl_unregister(net);
+       inet_frags_exit_net(&net->ipv4.frags, &ip4_frags);
+}
+
+static struct pernet_operations ip4_frags_ops = {
+       .init = ipv4_frags_init_net,
+       .exit = ipv4_frags_exit_net,
+};
+
 void __init ipfrag_init(void)
 {
-       ipv4_frags_init_net(&init_net);
+       register_pernet_subsys(&ip4_frags_ops);
        ip4_frags.hashfn = ip4_hashfn;
        ip4_frags.constructor = ip4_frag_init;
        ip4_frags.destructor = ip4_frag_free;