On Tue, 5 Nov 2002, Giorgos Keramidas wrote: > On 2002-11-04 18:38, Kelly Yancey <[EMAIL PROTECTED]> wrote: > > Thanks for the info. Are you sure that you only reverted the one delta? > > Yes. I just recompiled the kernel from -rHEAD and started logging > things while I connected to my dialup provider. Apparently lo0 does > have the 127.0.0.1 address *and* the LOOPBACK flag but somehow fails. > > When (near the end of the following log) I back only this change out, > the problems go away :/ >
Thanks for the great trace and your patience. I believe I found the root of the problem. Could you please try the attached patch? I'm afraid that if I hadn't gotten thown off this morning be my lo0 lacking a 127.0.0.1 address I probably would have found it much, much sooner (it's pretty obvious in hindsight). At the very least, I also caught a couple of pieces of code that are manipulating the socket buffer behind sballoc() and sbfree()'s back so I've modified them to update the sb_cc counter directly also. Let me know if this fixes things for you. Thanks, Kelly -- Kelly Yancey -- kbyanc@{posi.net,FreeBSD.org} "Democracy is a device that insures we shall be governed no better than we deserve." -- George Bernard Shaw
Index: kern/uipc_socket.c =================================================================== RCS file: /home/ncvs/src/sys/kern/uipc_socket.c,v retrieving revision 1.135 diff -u -p -r1.135 uipc_socket.c --- kern/uipc_socket.c 2 Nov 2002 05:14:30 -0000 1.135 +++ kern/uipc_socket.c 5 Nov 2002 04:14:20 -0000 @@ -1794,7 +1794,7 @@ filt_soread(struct knote *kn, long hint) return (1); if (kn->kn_sfflags & NOTE_LOWAT) return (kn->kn_data >= kn->kn_sdata); - return (kn->kn_data >= so->so_rcv.sb_lowat); + return (so->so_rcv.sb_cc >= so->so_rcv.sb_lowat); } static void Index: kern/uipc_socket2.c =================================================================== RCS file: /home/ncvs/src/sys/kern/uipc_socket2.c,v retrieving revision 1.105 diff -u -p -r1.105 uipc_socket2.c --- kern/uipc_socket2.c 2 Nov 2002 05:14:30 -0000 1.105 +++ kern/uipc_socket2.c 5 Nov 2002 04:19:05 -0000 @@ -705,6 +705,8 @@ sbcompress(sb, m, n) (unsigned)m->m_len); n->m_len += m->m_len; sb->sb_cc += m->m_len; + if (m->m_type != MT_DATA) + sb->sb_ctl += m->m_len; m = m_free(m); continue; } @@ -774,6 +776,8 @@ sbdrop(sb, len) m->m_len -= len; m->m_data += len; sb->sb_cc -= len; + if (m->m_type != MT_DATA) + sb->sb_ctl -= len; break; } len -= m->m_len;