csk->atid = cxgb3_alloc_atid(t3dev, &t3_client, csk);
        if (csk->atid < 0) {
                pr_err("NO atid available.\n");
-               goto rel_resource;
+               return -EINVAL;
        }
        cxgbi_sock_set_flag(csk, CTPF_HAS_ATID);
        cxgbi_sock_get(csk);
 
        skb = alloc_wr(sizeof(struct cpl_act_open_req), 0, GFP_KERNEL);
-       if (!skb)
-               goto rel_resource;
+       if (!skb) {
+               cxgb3_free_atid(t3dev, csk->atid);
+               cxgbi_sock_put(csk);
+               return -ENOMEM;
+       }
        skb->sk = (struct sock *)csk;
        set_arp_failure_handler(skb, act_open_arp_failure);
        csk->snd_win = cxgb3i_snd_win;
        cxgbi_sock_set_state(csk, CTP_ACTIVE_OPEN);
        send_act_open_req(csk, skb, csk->l2t);
        return 0;
-
-rel_resource:
-       if (skb)
-               __kfree_skb(skb);
-       return -EINVAL;
 }
 
 cxgb3_cpl_handler_func cxgb3i_cpl_handlers[NUM_CPL_CMDS] = {