Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Nov 2009 11:43:53 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r199356 - stable/8/sys/kern
Message-ID:  <200911171143.nAHBhrGW005263@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Tue Nov 17 11:43:53 2009
New Revision: 199356
URL: http://svn.freebsd.org/changeset/base/199356

Log:
  MFC r198853:
  If socket buffer space appears to be lower then sum of count of
  already prepared bytes and next portion of transfer, inner loop of
  kern_sendfile() aborts, not preparing next mbuf for socket buffer, and
  not modifying any outer loop invariants. The thread loops in the outer
  loop forever.
  
  Instead of breaking from inner loop, prepare only bytes that fit into
  the socket buffer space.

Modified:
  stable/8/sys/kern/uipc_syscalls.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/netinet6/   (props changed)

Modified: stable/8/sys/kern/uipc_syscalls.c
==============================================================================
--- stable/8/sys/kern/uipc_syscalls.c	Tue Nov 17 11:39:15 2009	(r199355)
+++ stable/8/sys/kern/uipc_syscalls.c	Tue Nov 17 11:43:53 2009	(r199356)
@@ -2036,20 +2036,12 @@ retry_space:
 				rem = obj->un_pager.vnp.vnp_size -
 				    uap->offset - fsbytes - loopbytes;
 			xfsize = omin(rem, xfsize);
+			xfsize = omin(space - loopbytes, xfsize);
 			if (xfsize <= 0) {
 				VM_OBJECT_UNLOCK(obj);
 				done = 1;		/* all data sent */
 				break;
 			}
-			/*
-			 * Don't overflow the send buffer.
-			 * Stop here and send out what we've
-			 * already got.
-			 */
-			if (space < loopbytes + xfsize) {
-				VM_OBJECT_UNLOCK(obj);
-				break;
-			}
 
 			/*
 			 * Attempt to look up the page.  Allocate



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200911171143.nAHBhrGW005263>