Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-next-2.6
[pandora-kernel.git] / net / netfilter / nf_conntrack_netlink.c
index ccc5ef1..00e8c27 100644 (file)
@@ -1133,7 +1133,7 @@ ctnetlink_create_conntrack(struct nlattr *cda[],
        int err = -EINVAL;
        struct nf_conntrack_helper *helper;
 
-       ct = nf_conntrack_alloc(&init_net, otuple, rtuple, GFP_KERNEL);
+       ct = nf_conntrack_alloc(&init_net, otuple, rtuple, GFP_ATOMIC);
        if (ct == NULL || IS_ERR(ct))
                return -ENOMEM;
 
@@ -1220,7 +1220,7 @@ ctnetlink_create_conntrack(struct nlattr *cda[],
                }
        }
 
-       nf_ct_acct_ext_add(ct, GFP_KERNEL);
+       nf_ct_acct_ext_add(ct, GFP_ATOMIC);
 
 #if defined(CONFIG_NF_CONNTRACK_MARK)
        if (cda[CTA_MARK])
@@ -1297,7 +1297,6 @@ ctnetlink_new_conntrack(struct sock *ctnl, struct sk_buff *skb,
                        nf_conntrack_get(&master_ct->ct_general);
                }
 
-               spin_unlock_bh(&nf_conntrack_lock);
                err = -ENOENT;
                if (nlh->nlmsg_flags & NLM_F_CREATE)
                        err = ctnetlink_create_conntrack(cda,
@@ -1306,6 +1305,7 @@ ctnetlink_new_conntrack(struct sock *ctnl, struct sk_buff *skb,
                                                         master_ct,
                                                         NETLINK_CB(skb).pid,
                                                         nlmsg_report(nlh));
+               spin_unlock_bh(&nf_conntrack_lock);
                if (err < 0 && master_ct)
                        nf_ct_put(master_ct);