Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/kern/uipc_socket.c,v retrieving revision 1.66.2.3 retrieving revision 1.67 diff -u -p -r1.66.2.3 -r1.67 --- src/sys/kern/uipc_socket.c 2002/08/29 05:23:14 1.66.2.3 +++ src/sys/kern/uipc_socket.c 2002/06/10 20:43:16 1.67 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_socket.c,v 1.66.2.3 2002/08/29 05:23:14 gehenna Exp $ */ +/* $NetBSD: uipc_socket.c,v 1.67 2002/06/10 20:43:16 he Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -72,7 +72,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.66.2.3 2002/08/29 05:23:14 gehenna Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.67 2002/06/10 20:43:16 he Exp $"); #include "opt_sock_counters.h" #include "opt_sosend_loan.h" @@ -134,10 +134,10 @@ soinit(void) #endif /* SOSEND_COUNTERS */ } -#ifdef SOSEND_NO_LOAN -int use_sosend_loan = 0; -#else +#ifdef SOSEND_LOAN int use_sosend_loan = 1; +#else +int use_sosend_loan = 0; #endif struct mbuf *so_pendfree; @@ -894,8 +894,6 @@ soreceive(struct socket *so, struct mbuf error = EWOULDBLOCK; goto release; } - SBLASTRECORDCHK(&so->so_rcv, "soreceive sbwait 1"); - SBLASTMBUFCHK(&so->so_rcv, "soreceive sbwait 1"); sbunlock(&so->so_rcv); error = sbwait(&so->so_rcv); splx(s); @@ -904,18 +902,10 @@ soreceive(struct socket *so, struct mbuf goto restart; } dontblock: - /* - * On entry here, m points to the first record of the socket buffer. - * While we process the initial mbufs containing address and control - * info, we save a copy of m->m_nextpkt into nextrecord. - */ #ifdef notyet /* XXXX */ if (uio->uio_procp) uio->uio_procp->p_stats->p_ru.ru_msgrcv++; #endif - KASSERT(m == so->so_rcv.sb_mb); - SBLASTRECORDCHK(&so->so_rcv, "soreceive 1"); - SBLASTMBUFCHK(&so->so_rcv, "soreceive 1"); nextrecord = m->m_nextpkt; if (pr->pr_flags & PR_ADDR) { #ifdef DIAGNOSTIC @@ -968,39 +958,13 @@ soreceive(struct socket *so, struct mbuf controlp = &(*controlp)->m_next; } } - - /* - * If m is non-NULL, we have some data to read. From now on, - * make sure to keep sb_lastrecord consistent when working on - * the last packet on the chain (nextrecord == NULL) and we - * change m->m_nextpkt. - */ if (m) { - if ((flags & MSG_PEEK) == 0) { + if ((flags & MSG_PEEK) == 0) m->m_nextpkt = nextrecord; - /* - * If nextrecord == NULL (this is a single chain), - * then sb_lastrecord may not be valid here if m - * was changed earlier. - */ - if (nextrecord == NULL) { - KASSERT(so->so_rcv.sb_mb == m); - so->so_rcv.sb_lastrecord = m; - } - } type = m->m_type; if (type == MT_OOBDATA) flags |= MSG_OOB; - } else { - if ((flags & MSG_PEEK) == 0) { - KASSERT(so->so_rcv.sb_mb == m); - so->so_rcv.sb_mb = nextrecord; - SB_EMPTY_FIXUP(&so->so_rcv); - } } - SBLASTRECORDCHK(&so->so_rcv, "soreceive 2"); - SBLASTMBUFCHK(&so->so_rcv, "soreceive 2"); - moff = 0; offset = 0; while (m && uio->uio_resid > 0 && error == 0) { @@ -1028,8 +992,6 @@ soreceive(struct socket *so, struct mbuf * block interrupts again. */ if (mp == 0) { - SBLASTRECORDCHK(&so->so_rcv, "soreceive uiomove"); - SBLASTMBUFCHK(&so->so_rcv, "soreceive uiomove"); splx(s); error = uiomove(mtod(m, caddr_t) + moff, (int)len, uio); s = splsoftnet(); @@ -1071,21 +1033,8 @@ soreceive(struct socket *so, struct mbuf MFREE(m, so->so_rcv.sb_mb); m = so->so_rcv.sb_mb; } - /* - * If m != NULL, we also know that - * so->so_rcv.sb_mb != NULL. - */ - KASSERT(so->so_rcv.sb_mb == m); - if (m) { + if (m) m->m_nextpkt = nextrecord; - if (nextrecord == NULL) - so->so_rcv.sb_lastrecord = m; - } else { - so->so_rcv.sb_mb = nextrecord; - SB_EMPTY_FIXUP(&so->so_rcv); - } - SBLASTRECORDCHK(&so->so_rcv, "soreceive 3"); - SBLASTMBUFCHK(&so->so_rcv, "soreceive 3"); } } else { if (flags & MSG_PEEK) @@ -1124,25 +1073,6 @@ soreceive(struct socket *so, struct mbuf !sosendallatonce(so) && !nextrecord) { if (so->so_error || so->so_state & SS_CANTRCVMORE) break; - /* - * If we are peeking and the socket receive buffer is - * full, stop since we can't get more data to peek at. - */ - if ((flags & MSG_PEEK) && sbspace(&so->so_rcv) <= 0) - break; - /* - * If we've drained the socket buffer, tell the - * protocol in case it needs to do something to - * get it filled again. - */ - if ((pr->pr_flags & PR_WANTRCVD) && so->so_pcb) - (*pr->pr_usrreq)(so, PRU_RCVD, - (struct mbuf *)0, - (struct mbuf *)(long)flags, - (struct mbuf *)0, - (struct proc *)0); - SBLASTRECORDCHK(&so->so_rcv, "soreceive sbwait 2"); - SBLASTMBUFCHK(&so->so_rcv, "soreceive sbwait 2"); error = sbwait(&so->so_rcv); if (error) { sbunlock(&so->so_rcv); @@ -1160,21 +1090,8 @@ soreceive(struct socket *so, struct mbuf (void) sbdroprecord(&so->so_rcv); } if ((flags & MSG_PEEK) == 0) { - if (m == 0) { - /* - * First part is an inline SB_EMPTY_FIXUP(). Second - * part makes sure sb_lastrecord is up-to-date if - * there is still data in the socket buffer. - */ + if (m == 0) so->so_rcv.sb_mb = nextrecord; - if (so->so_rcv.sb_mb == NULL) { - so->so_rcv.sb_mbtail = NULL; - so->so_rcv.sb_lastrecord = NULL; - } else if (nextrecord->m_nextpkt == NULL) - so->so_rcv.sb_lastrecord = nextrecord; - } - SBLASTRECORDCHK(&so->so_rcv, "soreceive 4"); - SBLASTMBUFCHK(&so->so_rcv, "soreceive 4"); if (pr->pr_flags & PR_WANTRCVD && so->so_pcb) (*pr->pr_usrreq)(so, PRU_RCVD, (struct mbuf *)0, (struct mbuf *)(long)flags, (struct mbuf *)0,