RWS%mit-xx@sri-unix.UUCP (11/03/83)
Despite claims to the contrary, the block number sign extension problem still exists. Berkeley put in a fix that should have worked, but a C compiler bug apparently keeps it from working. In /sys/sys/vm_mem.c in memall() the code swapdev : mount[c->c_mdev].m_dev, (daddr_t)(u_long)c->c_blkno should be changed to swapdev : mount[c->c_mdev].m_dev, c->c_blkno and in /sys/vax/vm_machdep.c in chgprot() the code munhash(mount[c->c_mdev].m_dev, (daddr_t)(u_long)c->c_blkno); should be changed to munhash(mount[c->c_mdev].m_dev, c->c_blkno); because the C compiler apparently incorrectly folds the (daddr_t) and (u_long) together and sign extends anyway. Simply taking out the (daddr_t)(u_long) works, although lint will probably complain about it. There is a magic number (0x3ffff8) representing USRSTACK/NBPG built in to Fastreclaim in /sys/vax/locore.s. However, USRSTACK depends on UPAGES, so this magic number has UPAGES=8 built in, which is bogus. If you change UPAGES, your system will panic: trap. The fix is to change subl3 P_SSIZE(r5),$0x3ffff8,r0 to subl3 P_SSIZE(r5),$(0x400000-UPAGES),r0 and to change subl2 $(0x3ffff8+UPAGES),r4 to subl2 $0x400000,r4 UDP checksumming is turned off, and with good cause, since bad checksums are produced on output. In /sys/netinet/udp_usrreq.c in udp_output(), the code ui->ui_ulen = htons((u_short)ui->ui_len); should be changed to ui->ui_len = htons((u_short)ui->ui_len); ui->ui_ulen = ui->ui_len; Then int udpcksum; can be changed to int udpcksum = 1; In /sys/netinet/tcp_input.c in tcp_intput(), the code sbdrop(&so->so_snd, so->so_snd.sb_cc); tp->snd_wnd -= so->so_snd.sb_cc; should be tp->snd_wnd -= so->so_snd.sb_cc; sbdrop(&so->so_snd, so->so_snd.sb_cc); In /sys/netinet/tcp_output.c in tcp_output() the code if (SEQ_GT(tp->snd_nxt, tp->snd_max)) tp->snd_max = tp->snd_nxt; if (SEQ_GT(tp->snd_nxt, tp->snd_max) && tp->t_rtt == 0) { tp->t_rtt = 1; tp->t_rtseq = tp->snd_nxt - len; } should be if (SEQ_GT(tp->snd_nxt, tp->snd_max)) { tp->snd_max = tp->snd_nxt; if (tp->t_rtt == 0) { tp->t_rtt = 1; tp->t_rtseq = tp->snd_nxt - len; } } -------
cak@PURDUE.ARPA (11/03/83)
From: Christopher A Kent <cak@PURDUE.ARPA> Berkeley seems to be uninterested in supporting its "clients" in any way any more. It used to be that you could get hold of the bug reports, IF you knew the right person to get onto the mailing list; even that has gone away. Now, we can only hope that reported bugs make it into the ever-awaited next release. On the other hand, bug reports that only exist in Unix-Wizards don't always seem to make it into said release. I would encourage all 4.2 hackers to send their fixes to Berkeley AND this list; I would further encourage Berkeley to remail the bug fixes to a wider forum. I realize that there are licensing problems, but I tend to believe that this is a very thin shroud that is being hidden behind; we all know about public-key encrytion now; implementations exist for Unix, and there is no reason that a registered letter with a password couldn't be exchanged between UCB and licensees, and bug fixes mailed to registered systems administrators on a regular basis. I found the UDP problems in the 4.2 pre-release, too, but it seems that they didn't make it back in time to make it onto the tape. tftp is pretty much botched, too. I'm really tired of having to reinvent the wheel again and again... Cheers, chris ----------