svn commit: r199356 - stable/8/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Tue Nov 17 11:43:53 UTC 2009
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
More information about the svn-src-all
mailing list