Date: Wed, 22 Jan 2020 06:01:26 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r356978 - head/sys/netinet Message-ID: <202001220601.00M61QVQ027811@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Wed Jan 22 06:01:26 2020 New Revision: 356978 URL: https://svnweb.freebsd.org/changeset/base/356978 Log: tcp_usr_attach() doesn't need network epoch. in_pcbfree() and in_pcbdetach() perform all necessary synchronization themselves. Modified: head/sys/netinet/tcp_usrreq.c Modified: head/sys/netinet/tcp_usrreq.c ============================================================================== --- head/sys/netinet/tcp_usrreq.c Wed Jan 22 05:58:29 2020 (r356977) +++ head/sys/netinet/tcp_usrreq.c Wed Jan 22 06:01:26 2020 (r356978) @@ -151,7 +151,6 @@ static void tcp_fill_info(struct tcpcb *, struct tcp_i static int tcp_usr_attach(struct socket *so, int proto, struct thread *td) { - struct epoch_tracker et; struct inpcb *inp; struct tcpcb *tp = NULL; int error; @@ -169,12 +168,9 @@ tcp_usr_attach(struct socket *so, int proto, struct th so->so_rcv.sb_flags |= SB_AUTOSIZE; so->so_snd.sb_flags |= SB_AUTOSIZE; - NET_EPOCH_ENTER(et); error = in_pcballoc(so, &V_tcbinfo); - if (error) { - NET_EPOCH_EXIT(et); + if (error) goto out; - } inp = sotoinpcb(so); #ifdef INET6 if (inp->inp_vflag & INP_IPV6PROTO) { @@ -188,15 +184,13 @@ tcp_usr_attach(struct socket *so, int proto, struct th inp->inp_vflag |= INP_IPV4; tp = tcp_newtcpcb(inp); if (tp == NULL) { + error = ENOBUFS; in_pcbdetach(inp); in_pcbfree(inp); - NET_EPOCH_EXIT(et); - error = ENOBUFS; goto out; } tp->t_state = TCPS_CLOSED; INP_WUNLOCK(inp); - NET_EPOCH_EXIT(et); TCPSTATES_INC(TCPS_CLOSED); if ((so->so_options & SO_LINGER) && so->so_linger == 0) so->so_linger = TCP_LINGERTIME;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202001220601.00M61QVQ027811>