summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_socket2.c
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>2002-08-16 05:08:46 +0000
committerdg <dg@FreeBSD.org>2002-08-16 05:08:46 +0000
commitfc04ab53c9b23793ca718efc91bb4207d1a67755 (patch)
tree18698452e1a02bd0772aab8ce305ad0fbeac4446 /sys/kern/uipc_socket2.c
parent75d84b9b55e6be9b99fdcefc1cd3a59f6811348a (diff)
downloadFreeBSD-src-fc04ab53c9b23793ca718efc91bb4207d1a67755.zip
FreeBSD-src-fc04ab53c9b23793ca718efc91bb4207d1a67755.tar.gz
Rewrote the space check algorithm in sbreserve() so that the extremely
expensive (!) 64bit multiply, divide, and comparison aren't necessary (this came in originally from rev 1.19 to fix an overflow with large sb_max or MCLBYTES). The 64bit math in this function was measured in some kernel profiles as being as much as 5-8% of the total overhead of the TCP/IP stack and is eliminated with this commit. There is a harmless rounding error (of about .4% with the standard values) introduced with this change, however this is in the conservative direction (downward toward a slightly smaller maximum socket buffer size). MFC after: 3 days
Diffstat (limited to 'sys/kern/uipc_socket2.c')
-rw-r--r--sys/kern/uipc_socket2.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c
index 1c1a227..5995b06 100644
--- a/sys/kern/uipc_socket2.c
+++ b/sys/kern/uipc_socket2.c
@@ -392,7 +392,7 @@ sbreserve(sb, cc, so, td)
* td will only be NULL when we're in an interrupt
* (e.g. in tcp_input())
*/
- if ((u_quad_t)cc > (u_quad_t)sb_max * MCLBYTES / (MSIZE + MCLBYTES))
+ if (cc > sb_max / (MSIZE + MCLBYTES) * MCLBYTES)
return (0);
if (!chgsbsize(so->so_cred->cr_uidinfo, &sb->sb_hiwat, cc,
td ? td->td_proc->p_rlimit[RLIMIT_SBSIZE].rlim_cur : RLIM_INFINITY)) {
OpenPOWER on IntegriCloud