From owner-freebsd-current Sat Apr 20 03:02:54 1996 Return-Path: owner-current Received: (from root@localhost) by freefall.freebsd.org (8.7.3/8.7.3) id DAA03987 for current-outgoing; Sat, 20 Apr 1996 03:02:54 -0700 (PDT) Received: from godzilla.zeta.org.au (godzilla.zeta.org.au [203.2.228.19]) by freefall.freebsd.org (8.7.3/8.7.3) with SMTP id DAA03982 for ; Sat, 20 Apr 1996 03:02:50 -0700 (PDT) Received: (from bde@localhost) by godzilla.zeta.org.au (8.6.12/8.6.9) id UAA02505; Sat, 20 Apr 1996 20:01:19 +1000 Date: Sat, 20 Apr 1996 20:01:19 +1000 From: Bruce Evans Message-Id: <199604201001.UAA02505@godzilla.zeta.org.au> To: current@freebsd.org, jkh@time.cdrom.com Subject: Re: Anyone else notice NFS broken in -current? Sender: owner-current@freebsd.org X-Loop: FreeBSD.org Precedence: bulk >Running the latest 2.2 kernels on two boxes here, I can only use NFS >for a short time before any process doing NFS I/O hangs. After awhile >of this, one of the systems will then reset to the BIOS. >This and other reports now leads me to say that NFS is very, very >broken. The only question is - who broke it, and when? The ip header optimizations broken it yesterday. All large packets are probably broken. I'm running with the following fix. Note that it has breakpoint instructions to trap the header optimizations that haven't failed yet. Bruce *** ip_output.c~ Fri Apr 19 17:11:21 1996 --- ip_output.c Sat Apr 20 11:21:36 1996 *************** *** 332,336 **** ip->ip_sum = 0; if (ip->ip_vhl == IP_VHL_BORING) { ! ip->ip_sum = in_cksum_hdr(ip); } else { ip->ip_sum = in_cksum(m, hlen); --- 332,340 ---- ip->ip_sum = 0; if (ip->ip_vhl == IP_VHL_BORING) { ! u_short tmp; ! tmp = in_cksum_hdr(ip); ! ip->ip_sum = in_cksum(m, hlen); ! if (tmp != ip->ip_sum) ! breakpoint(); } else { ip->ip_sum = in_cksum(m, hlen); *************** *** 414,418 **** mhip->ip_sum = 0; if (mhip->ip_vhl == IP_VHL_BORING) { ! mhip->ip_sum = in_cksum_hdr(ip); } else { mhip->ip_sum = in_cksum(m, mhlen); --- 418,426 ---- mhip->ip_sum = 0; if (mhip->ip_vhl == IP_VHL_BORING) { ! u_short tmp; ! tmp = in_cksum_hdr(ip); ! mhip->ip_sum = in_cksum(m, mhlen); ! if (tmp != mhip->ip_sum) ! breakpoint(); } else { mhip->ip_sum = in_cksum(m, mhlen); *************** *** 432,440 **** ip->ip_off = htons((u_short)(ip->ip_off | IP_MF)); ip->ip_sum = 0; if (ip->ip_vhl == IP_VHL_BORING) { ! ip->ip_sum = in_cksum_hdr(ip); } else { ip->ip_sum = in_cksum(m, hlen); } sendorfree: for (m = m0; m; m = m0) { --- 440,456 ---- ip->ip_off = htons((u_short)(ip->ip_off | IP_MF)); ip->ip_sum = 0; + #if 0 if (ip->ip_vhl == IP_VHL_BORING) { ! u_short tmp; ! tmp = in_cksum_hdr(ip); ! ip->ip_sum = in_cksum(m, hlen); ! if (tmp != ip->ip_sum) ! breakpoint(); } else { ip->ip_sum = in_cksum(m, hlen); } + #else + ip->ip_sum = in_cksum(m, hlen); + #endif sendorfree: for (m = m0; m; m = m0) { *************** *** 1223,1227 **** ip->ip_sum = 0; if (ip->ip_vhl == IP_VHL_BORING) { ! ip->ip_sum = in_cksum_hdr(ip); } else { ip->ip_sum = in_cksum(copym, --- 1239,1248 ---- ip->ip_sum = 0; if (ip->ip_vhl == IP_VHL_BORING) { ! u_short tmp; ! tmp = in_cksum_hdr(ip); ! ip->ip_sum = in_cksum(copym, ! IP_VHL_HL(ip->ip_vhl) << 2); ! if (tmp != ip->ip_sum) ! breakpoint(); } else { ip->ip_sum = in_cksum(copym,