svn commit: r183870 - in stable/7/sys: . kern netinet

Robert Watson rwatson at
Tue Oct 14 07:58:19 UTC 2008

Author: rwatson
Date: Tue Oct 14 07:58:18 2008
New Revision: 183870

  Merge r183662 and r183663 from head to stable/7:
    Don't pass curthread to sbreserve_locked() in tcp_do_segment(), as the
    netisr or ithread's socket buffer size limit is not the right limit to
    use.  Instead, pass NULL as the other two calls to sbreserve_locked()
    in the TCP input path (tcp_mss()) do.
    In practice, this is a no-op, as ithreads and the netisr run without a
    process limit on socket buffer use, and a NULL thread pointer leads to
    not using the process's limit, if any.  However, if tcp_input() is
    called in other contexts that do have limits, this may prevent the
    incorrect limit from being used.
    Rewrite sbreserve_locked()'s comment on NULL thread pointers, eliminating
    an XXXRW about the comment being stale.
  Approved by:	re (gnn)

  stable/7/sys/   (props changed)

Modified: stable/7/sys/kern/uipc_sockbuf.c
--- stable/7/sys/kern/uipc_sockbuf.c	Tue Oct 14 07:52:47 2008	(r183869)
+++ stable/7/sys/kern/uipc_sockbuf.c	Tue Oct 14 07:58:18 2008	(r183870)
@@ -283,10 +283,11 @@ sbreserve_locked(struct sockbuf *sb, u_l
-	 * td will only be NULL when we're in an interrupt (e.g. in
-	 * tcp_input()).
-	 *
-	 * XXXRW: This comment needs updating, as might the code.
+	 * When a thread is passed, we take into account the thread's socket
+	 * buffer size limit.  The caller will generally pass curthread, but
+	 * in the TCP input path, NULL will be passed to indicate that no
+	 * appropriate thread resource limits are available.  In that case,
+	 * we don't apply a process limit.
 	if (cc > sb_max_adj)
 		return (0);

Modified: stable/7/sys/netinet/tcp_input.c
--- stable/7/sys/netinet/tcp_input.c	Tue Oct 14 07:52:47 2008	(r183869)
+++ stable/7/sys/netinet/tcp_input.c	Tue Oct 14 07:58:18 2008	(r183870)
@@ -1215,7 +1215,7 @@ tcp_do_segment(struct mbuf *m, struct tc
 				if (newsize)
 					if (!sbreserve_locked(&so->so_rcv,
-					    newsize, so, curthread))
+					    newsize, so, NULL))
 						so->so_rcv.sb_flags &= ~SB_AUTOSIZE;
 				m_adj(m, drop_hdrlen);	/* delayed header drop */
 				sbappendstream_locked(&so->so_rcv, m);

More information about the svn-src-stable-7 mailing list