svn commit: r184853 - in stable/7/sys: . modules/cxgb netinet
Robert Watson
rwatson at FreeBSD.org
Tue Nov 11 09:12:27 PST 2008
Author: rwatson
Date: Tue Nov 11 17:12:26 2008
New Revision: 184853
URL: http://svn.freebsd.org/changeset/base/184853
Log:
Merge r184304 from head to stable/7:
In both dropwithreset paths in tcp_input.c, drop the tcbinfo lock
sooner to decomplicate locking and eliminate the need for a rather
chatty comment about why we have to handle the global lock in a
special way for the benefit of ipfw and pf cred rules.
Approved by: re (kib)
Modified:
stable/7/sys/ (props changed)
stable/7/sys/modules/cxgb/ (props changed)
stable/7/sys/netinet/tcp_input.c
Modified: stable/7/sys/netinet/tcp_input.c
==============================================================================
--- stable/7/sys/netinet/tcp_input.c Tue Nov 11 17:10:24 2008 (r184852)
+++ stable/7/sys/netinet/tcp_input.c Tue Nov 11 17:12:26 2008 (r184853)
@@ -849,19 +849,12 @@ findpcb:
dropwithreset:
INP_INFO_WLOCK_ASSERT(&tcbinfo);
+ INP_INFO_WUNLOCK(&tcbinfo);
- /*
- * If inp is non-NULL, we call tcp_dropwithreset() holding both inpcb
- * and global locks. However, if NULL, we must hold neither as
- * firewalls may acquire the global lock in order to look for a
- * matching inpcb.
- */
if (inp != NULL) {
tcp_dropwithreset(m, th, tp, tlen, rstreason);
INP_WUNLOCK(inp);
- }
- INP_INFO_WUNLOCK(&tcbinfo);
- if (inp == NULL)
+ } else
tcp_dropwithreset(m, th, NULL, tlen, rstreason);
m = NULL; /* mbuf chain got consumed. */
goto drop;
@@ -2414,19 +2407,12 @@ dropafterack:
dropwithreset:
KASSERT(headlocked, ("%s: dropwithreset: head not locked", __func__));
+ INP_INFO_WUNLOCK(&tcbinfo);
- /*
- * If tp is non-NULL, we call tcp_dropwithreset() holding both inpcb
- * and global locks. However, if NULL, we must hold neither as
- * firewalls may acquire the global lock in order to look for a
- * matching inpcb.
- */
if (tp != NULL) {
tcp_dropwithreset(m, th, tp, tlen, rstreason);
INP_WUNLOCK(tp->t_inpcb);
- }
- INP_INFO_WUNLOCK(&tcbinfo);
- if (tp == NULL)
+ } else
tcp_dropwithreset(m, th, NULL, tlen, rstreason);
return;
More information about the svn-src-stable-7
mailing list