{
        struct nf_conn *ct;
        int err = -EINVAL;
-       struct nf_conn_help *help;
        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;
  
                                goto out_unlock;
                        }
                        master_ct = nf_ct_tuplehash_to_ctrack(master_h);
-                       atomic_inc(&master_ct->ct_general.use);
+                       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,
                                                         &otuple,
                                                         &rtuple,
-                                                        master_ct);
+                                                        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);