From owner-p4-projects@FreeBSD.ORG Fri Nov 30 19:39:13 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A235816A468; Fri, 30 Nov 2007 19:39:13 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4EEA116A478 for ; Fri, 30 Nov 2007 19:39:13 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 1BC7913C457 for ; Fri, 30 Nov 2007 19:39:13 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id lAUJdDGJ072907 for ; Fri, 30 Nov 2007 19:39:13 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id lAUJdDYa072904 for perforce@freebsd.org; Fri, 30 Nov 2007 19:39:13 GMT (envelope-from kmacy@freebsd.org) Date: Fri, 30 Nov 2007 19:39:13 GMT Message-Id: <200711301939.lAUJdDYa072904@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 129838 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Nov 2007 19:39:14 -0000 http://perforce.freebsd.org/chv.cgi?CH=129838 Change 129838 by kmacy@kmacy:storage:toestack on 2007/11/30 19:38:12 add missing locking unhook tcpcb when releasing resources queue tid release if appropriate Affected files ... .. //depot/projects/toestack/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c#28 edit Differences ... ==== //depot/projects/toestack/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c#28 (text+ko) ==== @@ -82,6 +82,8 @@ #include #include + + /* * For ULP connections HW may add headers, e.g., for digests, that aren't part * of the messages sent by the host but that are part of the TCP payload and @@ -866,7 +868,11 @@ l2t_release(L2DATA(cdev), toep->tp_l2t); toep->tp_l2t = NULL; } - + + toep->tp_tp = NULL; + tp->t_toe = NULL; + tp->t_flags &= ~TF_TOE; + if (tp->t_state == TCPS_SYN_SENT) { free_atid(cdev, tid); #ifdef notyet @@ -1094,7 +1100,10 @@ active_open_failed(struct socket *so, struct mbuf *m) { struct cpl_act_open_rpl *rpl = cplhdr(m); - + struct inpcb *inp = sotoinpcb(so); + + INP_INFO_WLOCK(&tcbinfo); + INP_LOCK(inp); /* * Don't handle connection retry for now */ @@ -1109,6 +1118,8 @@ } else #endif fail_act_open(so, act_open_rpl_status_to_errno(rpl->status)); + INP_UNLOCK(inp); + INP_INFO_WUNLOCK(&tcbinfo); m_free(m); } @@ -1133,16 +1144,10 @@ so = toeptoso(toep); -#ifdef notyet struct cpl_act_open_rpl *rpl = cplhdr(m); if (cdev->type != T3A && act_open_has_tid(rpl->status)) - cxgb_release_tid(cdev, GET_TID(rpl)); - - cxgb3_queue_tid_release(cdev, GET_TID(rpl)); -#else - printf("%s UNIMPLEMENTED\n", __FUNCTION__); -#endif + cxgb_queue_tid_release(cdev, GET_TID(rpl)); active_open_failed(so, m); return (0); @@ -2190,11 +2195,9 @@ if ((tp->t_state == TCPS_SYN_RECEIVED) && !abort_syn_rcv(so, m)) return; - INP_INFO_WLOCK(&tcbinfo); INP_LOCK(tp->t_inpcb); t3_release_offload_resources(so); tcp_close(tp); - INP_INFO_WUNLOCK(&tcbinfo); INP_UNLOCK(tp->t_inpcb); } @@ -2217,15 +2220,22 @@ } printf("aborting tid=%d\n", toep->tp_tid); + INP_INFO_WLOCK(&tcbinfo); if (toep->tp_flags & TP_SYN_RCVD) { printf("abort for unestablished connection :-(\n"); return (0); } - + if (toep->tp_tp == NULL) { + printf("disconnected toepcb\n"); + /* should be freed momentarily */ + return (0); + } + so = toeptoso(toep); VALIDATE_SOCK(so); toepcb_hold(toep); process_abort_req(so, m, TOE_DEV(so)); + INP_INFO_WUNLOCK(&tcbinfo); toepcb_release(toep); return (0); }