svn commit: r356978 - head/sys/netinet

Gleb Smirnoff glebius at FreeBSD.org
Wed Jan 22 06:01:26 UTC 2020


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;


More information about the svn-src-head mailing list