diff -u --recursive --new-file v1.3.87/linux/Documentation/Changes linux/Documentation/Changes --- v1.3.87/linux/Documentation/Changes Fri Apr 12 15:51:42 1996 +++ linux/Documentation/Changes Sat Apr 13 14:19:00 1996 @@ -1,300 +1,158 @@ +This document contains a list of the latest releases of the most +important packages for Linux. -LINUX_UPTODATE - "Keep your Linux system up to date". +The installation information were removed because redundant. -For comments, fixed, etc write to -Alessandro Sigala +Last updated: 12 Apr 1996. +Author: Alessandro Sigala `ssigala@globalnet.it'. -Last updated: 11 Apr 1996. +Current Releases +**************** -This short document describe what you need and where to get -most of the new stuff for your Linux box (intended for systems that have -already upgraded to ELF binaries). +- Kernel modules 1.3.69 +- PPP daemon 2.2.0e +- Dynamic linker (ld.so) 1.7.14 +- GNU CC 2.7.2 +- Binutils 2.6.0.12 +- Linux C Library 5.3.9 +- Linux C++ Library 2.7.1.4 +- Termcap 2.0.7 +- Procps 0.99a +- Gpm 1.06 +- SysVinit 2.60 -The ftp site mainly used in this document is sunsite.unc.edu. +What you really need to upgrade +******************************* -The current releases of the linux software are: -Linux Kernel 1.3.xx :-) -Kernel modules 1.3.57 -PPP daemon 2.2.0e -Binutils 2.6.0.12 -Dynamic linker (ld.so) 1.7.14 -Linux C Library 5.3.9 -Linux C++ Library 2.7.1.4 -Termcap 2.0.7 -GNU CC 2.7.2 -Procps 0.99a +Dynamic linker +============== -What do you really need to upgrade for using the latest 1.3.x kernel: -- Modules 1.3.57 for using the kernel modules -- Procps 0.99a for using free, ps, pstree, top and friends -- PPP 2.2.0e for using pppd, pppstats, pppon, etc + You may upgrade the dynamic linker to the latest release only to +solve some bugs. -This document may also be useful to answer the questions like: +SysVinit +======== -* Q: 'free' displays some strange lines - A: upgrade the procps package + The FIFO behavior is changed in latest 1.3.x kernel releases. You may +upgrade to this version if the older version break. -* Q: 'pppd' displays "the PPP protocol is not available" - A: upgrade the PPP package +PPP daemon and utilities +======================== -... and so :) + To use the PPP protocol with the 1.3.x linux kernel, you need to +upgrade the PPP package to version 2.2.0e. ----------------------------------------------------------------------------- +Procps utilities +================ -** NOTES + In the latest 1.3.x kernel releases the /proc filesystem structure +was changed, so you need to upgrade the Procps package to version 0.99a. -- Take a look at the documentation that come with every package - before doing anything! +Installation notes +****************** -- All the installation operation must be done as root. +Kernel Modules +============== -- If you want to use the latest GCC release (2.7.2) you must upgrade - your C Library, the C++ Library, the dynamic linker and the binutils. + The current kernel modules release is 1.3.57, but you need the +experimental release 1.3.69 to use newer binutils 2.6.0.x, because +modules compiled with new binutils can't be loaded by modules 1.3.57. -- After installed any new library, run the program `ldconfig' to update - the dynamic linker cache (you may also need to modify the file - /etc/ld.so.conf). +The Linux C Library +=================== ----------------------------------------------------------------------------- + The current Linux C Library release is 5.3.9. In this release there +are some important changes that may break other programs, then read the +`release.libc-5.3.9' file carefully! You need to patch and recompile +the `make' utility, or get it precompiled from the address written in +the next section of this file. If you don't want to patch and +recompile the binaries you may try the release 5.2.18. -* The dynamic linker. +The Termcap Library +=================== -Get the file ld.so-1.7.14.tar.gz and unpack into a directory. You should -have no problem installing this package, simply cd into the package -directory and type `make install'. + The current Termcap release is 2.0.7. If you upgrade to this release +read the `README' file contained into the package to get some important +information about the `tgetent' function changes! ----------------------------------------------------------------------------- +Where to get the files +********************** -* The Linux C Library. +Binutils +======== -*** NOTE: read the release.libc-5.3.9 file before installing the - libraries! +ftp://sunsite.unc.edu/pub/Linux/GCC/binutils-2.6.0.12.bin.tar.gz +Installation notes: +ftp://sunsite.unc.edu/pub/Linux/GCC/release.binutils-2.6.0.12 -Get the libc-5.3.9.bin.tar.gz file and unpack into the root directory +GNU CC +====== -i.e. into the root directory type: +ftp://sunsite.unc.edu/pub/Linux/GCC/gcc-2.7.2.bin.tar.gz +Installation notes: +ftp://sunsite.unc.edu/pub/Linux/GCC/release.gcc-2.7.2 - tar xvfz libc-5.3.9.bin.tar.gz +Linux C Library +=============== -you also need to make the symbolic links to the new library into the /lib -directory +The latest 5.3.9 release: +ftp://sunsite.unc.edu/pub/Linux/GCC/libc-5.3.9.bin.tar.gz +Installation notes: +ftp://sunsite.unc.edu/pub/Linux/GCC/release.libc-5.3.9 -i.e. into the /lib directory type: +Patched make binary: +ftp://sunsite.unc.edu/pub/Linux/devel/make/make-3.74-direntfix-elf.tgz - rm -f libc.so.5 - sln libc.so.5.3.9 libc.so.5 - rm -f libm.so.5 - sln libm.so.5.0.5 libm.so.5 +The 5.2.18 release: +ftp://sunsite.unc.edu/pub/Linux/GCC/libc-5.2.18.bin.tar.gz +Installation notes: +ftp://sunsite.unc.edu/pub/Linux/GCC/release.libc-5.2.18 -*** Note 1: +Linux C++ Library +================= - +ftp://sunsite.unc.edu/pub/Linux/GCC/libg++-2.7.1.4.bin.tar.gz +Installation notes: +ftp://sunsite.unc.edu/pub/Linux/GCC/release.libg++-2.7.1.4 -The structure DIR, defined in sysdeps/linux/dirstream.h, was changed in -release 5.2.0. If you upgrade from release 5.1.4 or earlier to release -5.2.0 or later, you must reboot after installing the new libraries. +Dynamic Linker +============== -*** Note 2: +ftp://sunsite.unc.edu/pub/Linux/GCC/ld.so-1.7.14.tar.gz -You must patch and recompile your GNU 'make' utility! +Termcap Library +=============== - +ftp://sunsite.unc.edu/pub/Linux/GCC/termcap-2.0.7.tar.gz -A dirent bug, which erroneously defined d->reclen to d->namlen if USE_GNU -was defined, has been fixed. Unfortunately, some GNU packages depend on -this bug. GNU make 3.xx is one of them. A patch is included here. +Modules utilities +================= -here the patch: -RCS file: /home/cvs/gnu/make/dir.c,v -retrieving revision 1.1.1.1 -diff -c -r1.1.1.1 dir.c -*** 1.1.1.1 1995/06/25 03:27:16 ---- dir.c 1995/06/25 03:55:22 -*************** -*** 20,26 **** - - #if defined (POSIX) || defined (HAVE_DIRENT_H) || defined (__GNU_LIBRARY__) - #include -! #ifndef __GNU_LIBRARY__ - #define D_NAMLEN(d) strlen((d)->d_name) - #else /* GNU C library. */ - #define D_NAMLEN(d) ((d)->d_namlen) ---- 20,26 ---- - - #if defined (POSIX) || defined (HAVE_DIRENT_H) || defined (__GNU_LIBRARY__) - #include -! #ifndef __BAD_GNU_LIBRARY__ - #define D_NAMLEN(d) strlen((d)->d_name) - #else /* GNU C library. */ - #define D_NAMLEN(d) ((d)->d_namlen) -=================================================================== -RCS file: /home/cvs/gnu/make/glob/glob.c,v -retrieving revision 1.1.1.1 -diff -c -r1.1.1.1 glob.c -*** 1.1.1.1 1995/06/25 03:27:18 ---- glob/glob.c 1995/06/25 03:56:01 -*************** -*** 64,70 **** - - #if defined (POSIX) || defined (HAVE_DIRENT_H) || defined (__GNU_LIBRARY__) - #include -! #ifndef __GNU_LIBRARY__ - #define D_NAMLEN(d) strlen((d)->d_name) - #else /* GNU C library. */ - #define D_NAMLEN(d) ((d)->d_namlen) ---- 64,70 ---- - - #if defined (POSIX) || defined (HAVE_DIRENT_H) || defined (__GNU_LIBRARY__) - #include -! #ifndef __BAD_GNU_LIBRARY__ - #define D_NAMLEN(d) strlen((d)->d_name) - #else /* GNU C library. */ - #define D_NAMLEN(d) ((d)->d_namlen) +The latest public release +ftp://sunsite.unc.edu/pub/Linux/kernel/modules-1.3.57.tar.gz +The latest experimental release +http://www.pi.se/blox/ ----------------------------------------------------------------------------- +PPP Daemon and utilities +======================== -* The Linux C++ Library. +ftp://sunsite.unc.edu/pub/Linux/system/Network/serial/ppp-2.2.0e.tar.gz -*** NOTE: read the release.libg++-2.7.1.4 file before installing the - libraries! +Procps utilities +================ -Get the libg++-2.7.1.4.bin.tar.gz file and unpack into the root directory +ftp://sunsite.unc.edu/pub/Linux/system/Status/ps/procps-0.99a.tgz -i.e. into the root directory type: +Gpm mouse utilities +=================== - tar xvfz libg++-2.7.1.4.bin.tar.gz +ftp://iride.unipv.it/pub/gpm/gpm-1.06.tar.gz +ftp://sunsite.unc.edu/pub/Linux/system/Daemons/gpm-1.06.tar.gz -*** NOTE: +SysVinit utilities +================== -You may have troubles with the binaries linked with the old 2.6 libraries -(for example: umssync), dumping core or doing strange stuff. -To resolve the problems you need to recompile the sources of the binaries. - ----------------------------------------------------------------------------- - -* The binutils. - -*** NOTE: read the release.binutils-2.6.0.12 file before installing the - libraries! - -Get the binutils-2.6.0.12.bin.tar.gz file and unpack it into the root -directory - -i.e. into the root directory type: - - tar xvfz binutils-2.6.0.12.bin.tar.gz - -*** NOTE: - - - -If you don't need the cross assemblers/linkers for m68k-linux, -m68k-linuxaout, sparc-sun-solaris2, sparc-sun-sunos4.1 nor alpha-linux, -please do - -1. su root -2. cd /usr -3. rm -rf m68k-linux m68k-linuxaout sparc-sun-solaris2 sparc-sun-sunos4.1 alpha-linux - ----------------------------------------------------------------------------- - -* The GNU CC compiler. - -** NOTE: read the release.gcc-2.7.2 file before installing the package! - -Get the gcc-2.7.2.bin.tar.gz file and unpack it into the root -directory - -i.e. into the root directory type: - - tar xvfz gcc-2.7.2.bin.tar.gz - -You may want to remove the old compiler. Simply cd into the -/usr/lib/gcc-lib/i486-linux and remove the old compiler directory tree. - ----------------------------------------------------------------------------- - -* The termcap library. - -*** NOTE: read first the documentation that come with the package! - -Get the file termcap-2.0.7.tar.gz and unpack into a directory. You should -have no problem installing this package, simply cd into the package -directory and type `make' then `make install'. - -*** NOTE: - - - -The linux entry in the new termcap is larger than 1024 chars. -But your application may only have a 1024 byte buffer. You may see - -tgetent: warning: termcap entry too long - -message when you run it in the Linux console. You can pass NULL to -tgetent () to let termcap malloc the buffer. elm and zsh are two -applications I know which use termcap and have this problem. - ----------------------------------------------------------------------------- - -* The kernel modudes utilities. - -*** NOTE: read first the documentation that come with the package! - -Get the file modules-1.3.57.tar.gz and unpack into a directory. You should -have no problem installing this package, simply cd into the package -directory and type `make' then `make install'. - ----------------------------------------------------------------------------- - -* The PPP daemon utilities. - -*** NOTE: read first the documentation that come with the package! - -Get the file ppp-2.2.0e.tar.gz and unpack into a directory. You should -have no problem installing this package, simply cd into the package -directory and type `make' then `make install'. - ----------------------------------------------------------------------------- - -* The procps utilities. - -*** NOTE: read first the documentation that come with the package! - -Get the file procps-0.99a.tar.gz and unpack into a directory. You should -have no problem installing this package, simply cd into the package -directory and type `make' then `make install'. - ----------------------------------------------------------------------------- - -This is where you can find all that is described in this document. - -### sunsite.unc.edu:/pub/Linux/GCC - -binutils-2.6.0.12.bin.tar.gz Binutils 2.6.0.12 (as,ld etc) -gcc-2.7.2.bin.tar.gz GNU CC 2.7.2 (ELF and a.out) -ld.so-1.7.14.tar.gz The dynamic linker -libc-5.3.9.bin.tar.gz The C library -libg++-2.7.1.4.bin.tar.gz The C++ library -termcap-2.0.7.tar.gz Termcap 2.0.7 -release.binutils-2.6.0.12 -release.gcc-2.7.2 -release.libc-5.3.9 info (contains the patch for 'make') -release.libg++-2.7.1.4 - -### sunsite.unc.edu:/pub/Linux/kernel - -modules-1.3.57.tar.gz Utils the kernel modules - -### sunsite.unc.edu:/pub/Linux/system/Network/serial - -ppp-2.2.0e.tar.gz The pppd daemon and utils for PPP - -### sunsite.unc.edu:/pub/Linux/system/Status/ps - -procps-0.99a.tgz ps, pstree, free, etc - ----------------------------------------------------------------------------- - -For comments, fixed, etc write to -Alessandro Sigala +At the time of writing: +ftp://sunsite.unc.edu/pub/Linux/Incoming/sysvinit-2.60.tar.gz +Next location: +ftp://sunsite.unc.edu/pub/Linux/system/Daemons/init/sysvinit-2.60.tar.gz diff -u --recursive --new-file v1.3.87/linux/Makefile linux/Makefile --- v1.3.87/linux/Makefile Fri Apr 12 15:51:45 1996 +++ linux/Makefile Fri Apr 12 15:53:10 1996 @@ -1,6 +1,6 @@ VERSION = 1 PATCHLEVEL = 3 -SUBLEVEL = 87 +SUBLEVEL = 88 ARCH = i386 diff -u --recursive --new-file v1.3.87/linux/drivers/char/ftape/ftape-io.c linux/drivers/char/ftape/ftape-io.c --- v1.3.87/linux/drivers/char/ftape/ftape-io.c Fri Apr 12 15:51:52 1996 +++ linux/drivers/char/ftape/ftape-io.c Sat Apr 13 11:23:24 1996 @@ -951,7 +951,7 @@ default: result = -ENODEV; /* unknown wakeup method */ } - /* If wakeup succeeded we shouldn't get and error here.. + /* If wakeup succeeded we shouldn't get an error here.. */ if (result == 0) { result = ftape_report_raw_drive_status(&status); diff -u --recursive --new-file v1.3.87/linux/drivers/char/stallion.c linux/drivers/char/stallion.c --- v1.3.87/linux/drivers/char/stallion.c Fri Apr 12 15:51:53 1996 +++ linux/drivers/char/stallion.c Sat Apr 13 11:21:38 1996 @@ -527,7 +527,7 @@ /* * Define the driver info for a user level control device. Used mainly - * to get at port stats - only ont using the port device itself. + * to get at port stats - only not using the port device itself. */ static struct file_operations stl_fsiomem = { NULL, diff -u --recursive --new-file v1.3.87/linux/drivers/isdn/icn/icn.c linux/drivers/isdn/icn/icn.c --- v1.3.87/linux/drivers/isdn/icn/icn.c Fri Apr 12 15:51:53 1996 +++ linux/drivers/isdn/icn/icn.c Sat Apr 13 11:21:38 1996 @@ -51,7 +51,7 @@ * * Revision 1.8 1995/03/15 12:49:44 fritz * Added support for SPV's - * Split pollbchan_work ifor calling send-routine directly + * Split pollbchan_work for calling send-routine directly * * Revision 1.7 1995/02/20 03:48:03 fritz * Added support of new request_region-function. diff -u --recursive --new-file v1.3.87/linux/drivers/scsi/pas16.c linux/drivers/scsi/pas16.c --- v1.3.87/linux/drivers/scsi/pas16.c Wed Apr 10 17:02:25 1996 +++ linux/drivers/scsi/pas16.c Sat Apr 13 12:41:34 1996 @@ -419,7 +419,6 @@ else instance->irq = NCR5380_probe_irq(instance, PAS16_IRQS); - instance->irq = IRQ_NONE; /*****temp****/ if (instance->irq != IRQ_NONE) if (request_irq(instance->irq, pas16_intr, SA_INTERRUPT, "pas16", NULL)) { printk("scsi%d : IRQ%d not free, interrupts disabled\n", diff -u --recursive --new-file v1.3.87/linux/drivers/scsi/scsi.c linux/drivers/scsi/scsi.c --- v1.3.87/linux/drivers/scsi/scsi.c Fri Apr 12 15:52:01 1996 +++ linux/drivers/scsi/scsi.c Sat Apr 13 11:21:49 1996 @@ -277,6 +277,7 @@ {"TEXEL","CD-ROM","1.06", BLIST_BORKEN}, {"INSITE","Floptical F*8I","*", BLIST_KEY}, {"INSITE","I325VM","*", BLIST_KEY}, +{"NRC","MBR-7","*", BLIST_FORCELUN | BLIST_SINGLELUN}, {"PIONEER","CD-ROM DRM-602X","*", BLIST_FORCELUN | BLIST_SINGLELUN}, {"PIONEER","CD-ROM DRM-604X","*", BLIST_FORCELUN | BLIST_SINGLELUN}, {"EMULEX","MD21/S2 ESDI","*",BLIST_FORCELUN | BLIST_SINGLELUN}, diff -u --recursive --new-file v1.3.87/linux/drivers/sound/gus_wave.c linux/drivers/sound/gus_wave.c --- v1.3.87/linux/drivers/sound/gus_wave.c Fri Apr 12 15:52:03 1996 +++ linux/drivers/sound/gus_wave.c Sat Apr 13 11:21:38 1996 @@ -2653,7 +2653,7 @@ */ offs += sample_ptrs[sample]; /* - * Begin offsess + offset to DRAM + * Begin offset + offset to DRAM */ for (n = 0; n < l; n++) @@ -2698,7 +2698,7 @@ */ offs += sample_ptrs[sample]; /* - * Begin offsess + offset to DRAM + * Begin offset + offset to DRAM */ for (n = 0; n < l; n++) diff -u --recursive --new-file v1.3.87/linux/drivers/sound/sscape.c linux/drivers/sound/sscape.c --- v1.3.87/linux/drivers/sound/sscape.c Sun Mar 31 00:13:18 1996 +++ linux/drivers/sound/sscape.c Sat Apr 13 11:21:38 1996 @@ -1145,7 +1145,7 @@ sscape_write (devc, GA_DMACFG_REG, 0x50); /* - * Take the gate-arry off of the DMA channel. + * Take the gate-array off of the DMA channel. */ sscape_write (devc, GA_DMAB_REG, 0x20); diff -u --recursive --new-file v1.3.87/linux/fs/isofs/inode.c linux/fs/isofs/inode.c --- v1.3.87/linux/fs/isofs/inode.c Sun Mar 24 14:07:42 1996 +++ linux/fs/isofs/inode.c Sat Apr 13 11:21:38 1996 @@ -430,7 +430,7 @@ struct statfs tmp; tmp.f_type = ISOFS_SUPER_MAGIC; - tmp.f_bsize = 1 << ISOFS_BLOCK_BITS; + tmp.f_bsize = sb->s_blocksize; tmp.f_blocks = sb->u.isofs_sb.s_nzones; tmp.f_bfree = 0; tmp.f_bavail = 0; @@ -681,7 +681,7 @@ struct iso_directory_record * de; offset = 0; - block = extent << (ISOFS_BLOCK_BITS - bufbits); + block = extent << (ISOFS_ZONE_BITS(parent) - bufbits); if (!(bh = bread(parent->i_dev, block, bufsize))) return -1; while (1 == 1) { @@ -689,6 +689,7 @@ if (*((unsigned char *) de) == 0) { brelse(bh); + printk("Directory .. not found\n"); return -1; } @@ -718,9 +719,11 @@ result = -1; offset = 0; - block = parent_dir << (ISOFS_BLOCK_BITS - bufbits); + block = parent_dir << (ISOFS_ZONE_BITS(parent) - bufbits); if (!block || !(bh = bread(parent->i_dev,block, bufsize))) + { return -1; + } for(;;) { @@ -738,11 +741,19 @@ block++; directory_size -= bufsize; if(directory_size < 0) return -1; - if((block & 1) && (ISOFS_BLOCK_BITS - bufbits)) - return -1; + if((block & 1) && (ISOFS_ZONE_BITS(parent) - bufbits) == 1) + { + return -1; + } + if((block & 3) && (ISOFS_ZONE_BITS(parent) - bufbits) == 2) + { + return -1; + } if (!block || !(bh = bread(parent->i_dev,block, bufsize))) + { return -1; + } continue; } @@ -764,7 +775,11 @@ brelse(bh); offset -= bufsize; directory_size -= bufsize; - if(directory_size < 0) return -1; + if(directory_size < 0) + { + printk("Directory size < 0\n"); + return -1; + } block++; if(!(bh = bread(parent->i_dev,block,bufsize))) { kfree(cpnt); diff -u --recursive --new-file v1.3.87/linux/fs/isofs/namei.c linux/fs/isofs/namei.c --- v1.3.87/linux/fs/isofs/namei.c Fri Dec 22 08:51:08 1995 +++ linux/fs/isofs/namei.c Sat Apr 13 12:14:45 1996 @@ -199,7 +199,9 @@ find_rock_ridge_relocation(de,dir)); if(inode_number == -1){ /* Should never happen */ - printk("Backlink not properly set.\n"); + printk("Backlink not properly set %x %lx.\n", + isonum_733(de->extent), + dir->i_ino); goto out; } } diff -u --recursive --new-file v1.3.87/linux/fs/isofs/rock.c linux/fs/isofs/rock.c --- v1.3.87/linux/fs/isofs/rock.c Wed Nov 8 12:25:38 1995 +++ linux/fs/isofs/rock.c Sat Apr 13 11:21:39 1996 @@ -507,6 +507,8 @@ if(slen < 2) break; if(!rootflag) strcat(rpnt,"/"); }; + case SIG('C','E'): + CHECK_CE; /* This tells is if there is a continuation record */ break; default: break; diff -u --recursive --new-file v1.3.87/linux/fs/nfs/dir.c linux/fs/nfs/dir.c --- v1.3.87/linux/fs/nfs/dir.c Fri Apr 12 15:52:04 1996 +++ linux/fs/nfs/dir.c Sat Apr 13 10:37:02 1996 @@ -486,7 +486,7 @@ static int nfs_sillyrename(struct inode *dir, const char *name, int len) { struct inode *inode; - char silly[14]; + char silly[16]; int slen, ret; dir->i_count++; diff -u --recursive --new-file v1.3.87/linux/include/linux/iso_fs.h linux/include/linux/iso_fs.h --- v1.3.87/linux/include/linux/iso_fs.h Mon Mar 25 10:25:51 1996 +++ linux/include/linux/iso_fs.h Sat Apr 13 11:21:39 1996 @@ -122,6 +122,7 @@ #define ISOFS_BUFFER_SIZE(INODE) ((INODE)->i_sb->s_blocksize) #define ISOFS_BUFFER_BITS(INODE) ((INODE)->i_sb->s_blocksize_bits) +#define ISOFS_ZONE_BITS(INODE) ((INODE)->i_sb->u.isofs_sb.s_log_zone_size) #if 0 #ifdef ISOFS_FIXED_BLOCKSIZE diff -u --recursive --new-file v1.3.87/linux/include/net/tcp.h linux/include/net/tcp.h --- v1.3.87/linux/include/net/tcp.h Fri Apr 12 15:52:09 1996 +++ linux/include/net/tcp.h Sat Apr 13 14:33:07 1996 @@ -201,7 +201,7 @@ /* * RFC 1122 says: * - * "the suggested [SWS] avoidance algoritm for the receiver is to keep + * "the suggested [SWS] avoidance algorithm for the receiver is to keep * RECV.NEXT + RCV.WIN fixed until: * RCV.BUFF - RCV.USER - RCV.WINDOW >= min(1/2 RCV.BUFF, MSS)" * @@ -213,7 +213,7 @@ * the size of the current free space, truncated to a multiple * of 1024 bytes. If the window is smaller than * min(sk->mss, MAX_WINDOW/2) - * then we adversize the window as having size 0, unless this + * then we advertise the window as having size 0, unless this * would shrink the window we offered last time. * This results in as much as double the throughput as the original * implementation. diff -u --recursive --new-file v1.3.87/linux/mm/filemap.c linux/mm/filemap.c --- v1.3.87/linux/mm/filemap.c Fri Apr 12 15:52:10 1996 +++ linux/mm/filemap.c Sat Apr 13 11:21:38 1996 @@ -329,7 +329,7 @@ if (PageLocked(page)) { max_ahead = filp->f_ramax; rapos = ppos; -/* try_async = 1 */ /* Seems questionnable */ +/* try_async = 1 */ /* Seems questionable */ } /* * The current page is not locked @@ -435,10 +435,10 @@ pos = filp->f_pos; /* - * Dont beleive f_reada + * Dont believe f_reada * -------------------- * f_reada is set to 0 by seek operations. - * If we beleive f_reada, small seek ops break asynchronous read-ahead. + * If we believe f_reada, small seek ops break asynchronous read-ahead. * That may be quite bad for small seeks or rewrites operations. * I prefer to check if the current position is inside the previous read-ahead * window. @@ -461,10 +461,10 @@ /* * Now f_reada = 1 means that asynchronous read-ahead is the good tactics. - * Will try asynchrous read-ahead as soon as possible. + * Will try asynchronous read-ahead as soon as possible. * Double the max read ahead size each time. - * That euristic avoid to do some large IO for files that are not really - * accessed sequentialy. + * That heuristic avoid to do some large IO for files that are not really + * accessed sequentially. */ if (filp->f_reada) { try_async = 1; diff -u --recursive --new-file v1.3.87/linux/net/ipv4/tcp_input.c linux/net/ipv4/tcp_input.c --- v1.3.87/linux/net/ipv4/tcp_input.c Fri Apr 12 15:52:12 1996 +++ linux/net/ipv4/tcp_input.c Sat Apr 13 12:52:55 1996 @@ -172,26 +172,15 @@ tcp_send_reset(sk->saddr,sk->daddr,th,sk->prot,NULL,dev, sk->ip_tos,sk->ip_ttl); return; } - - /* - * We got out of sequence data. - * This turns out to be tricky. If the packet ends at the - * edge of the window, then we MUST ack the packet, - * otherwise a lost ACK packet can stall the TCP. - * We deal with this case in tcp_queue(). - * On the other hand, if the packet is further to the - * left of the window, then we are looking a retransmitted - * packet. If we ACK it we can get into a situation that - * will later induce a fast retransmit of another packet. - * This can end up eating up half our bandwidth. - */ - - /* This case is NOT supposed to be able - * to happen. Test for it? - */ - if (sk->acked_seq == end_seq) - printk("Impossible out of sequence data case.\n"); - return; + + /* + * 4.3reno machines look for these kind of acks so they can do fast + * recovery. Three identical 'old' acks lets it know that one frame has + * been lost and should be resent. Because this is before the whole window + * of data has timed out it can take one lost frame per window without + * stalling. [See Jacobson RFC1323, Stevens TCP/IP illus vol2] + */ + tcp_send_ack(sk); } /* @@ -915,9 +904,17 @@ break; default: /* - * Reset the xmit timer - state has changed. + * Must check send_head and write_queue + * to determine which timeout to use. */ - tcp_reset_xmit_timer(sk, 0, 0); + if (sk->send_head || !skb_queue_empty(&sk->write_queue)) { + tcp_reset_xmit_timer(sk, TIME_WRITE, sk->rto); + } else if (sk->keepopen) { + tcp_reset_xmit_timer(sk, TIME_KEEPOPEN, TCP_TIMEOUT_LEN); + } else { + del_timer(&sk->retransmit_timer); + sk->ip_xmit_timeout = 0; + } break; } } @@ -1237,7 +1234,7 @@ if (!after(skb->seq, ack_seq)) { if (after(skb->end_seq, ack_seq)) { - /* the packet stradles our window end */ + /* the packet straddles our window end */ struct sk_buff_head * list = &sk->receive_queue; struct sk_buff * next; ack_seq = tcp_queue_ack(skb, sk); @@ -1285,7 +1282,7 @@ */ int delay = HZ/2; if (th->psh) - delay = HZ/10; + delay = HZ/50; tcp_send_delayed_ack(sk, delay); } @@ -1335,7 +1332,7 @@ */ static int tcp_data(struct sk_buff *skb, struct sock *sk, - unsigned long saddr, unsigned short len) + unsigned long saddr, unsigned int len) { struct tcphdr *th; u32 new_seq, shut_seq; @@ -1738,9 +1735,9 @@ { /* A valid ack from a different connection start. Shouldn't happen but cover it */ - tcp_statistics.TcpAttemptFails++; - tcp_send_reset(daddr, saddr, th, - sk->prot, opt,dev,sk->ip_tos,sk->ip_ttl); + tcp_statistics.TcpAttemptFails++; + tcp_send_reset(daddr, saddr, th, + sk->prot, opt,dev,sk->ip_tos,sk->ip_ttl); kfree_skb(skb, FREE_READ); return 0; } diff -u --recursive --new-file v1.3.87/linux/net/ipv4/tcp_timer.c linux/net/ipv4/tcp_timer.c --- v1.3.87/linux/net/ipv4/tcp_timer.c Fri Apr 12 15:52:12 1996 +++ linux/net/ipv4/tcp_timer.c Sat Apr 13 12:49:02 1996 @@ -29,66 +29,19 @@ /* * Reset the retransmission timer - * - * We currently ignore the why/when parameters, and decide on - * our own how long we should wait on our own.. */ void tcp_reset_xmit_timer(struct sock *sk, int why, unsigned long when) { - unsigned long now = jiffies; - - when = ~0UL; - why = -1; - - /* - * Was an old timer event active? - */ - if (del_timer(&sk->retransmit_timer)) { - why = sk->ip_xmit_timeout; - when = sk->retransmit_timer.expires; - } - - /* - * Keepopen processing? - */ - if (sk->keepopen) { - unsigned long new_when = now + TCP_TIMEOUT_LEN; - if (new_when < when) { - when = new_when; - why = TIME_KEEPOPEN; - } - } - - /* - * Retransmission? - */ - if (sk->send_head) { - struct sk_buff * skb = sk->send_head; - unsigned long new_when = skb->when + sk->rto; - if (new_when < when) { - when = new_when; - why = TIME_WRITE; - } - } else if (!skb_queue_empty(&sk->write_queue)) { - /* - * Zero window probe? - */ - struct sk_buff * skb = sk->write_queue.next; - if (before(sk->window_seq, skb->end_seq)) { - unsigned long new_when = now + TIME_PROBE0; - if (new_when < when) { - when = new_when; - why = TIME_PROBE0; - } - } - } - - if (why >= 0) { - sk->ip_xmit_timeout = why; - sk->retransmit_timer.expires = when; - add_timer(&sk->retransmit_timer); + del_timer(&sk->retransmit_timer); + sk->ip_xmit_timeout = why; + if((long)when < 0) + { + when=3; + printk("Error: Negative timer in xmit_timer\n"); } + sk->retransmit_timer.expires=jiffies+when; + add_timer(&sk->retransmit_timer); } /* @@ -222,6 +175,19 @@ return 1; } +/* + * It could be we got here because we needed to send an ack, + * so we need to check for that and not just normal retransmit. + */ +static void tcp_time_write_timeout(struct sock * sk) +{ + /* + * Retransmission + */ + sk->prot->retransmit (sk, 0); + tcp_write_timeout(sk); +} + /* * The TCP retransmit timer. This lacks a few small details. @@ -267,25 +233,27 @@ /* Window probing */ case TIME_PROBE0: tcp_send_probe0(sk); - tcp_reset_xmit_timer(sk, 0, 0); /* get us going again */ + tcp_write_timeout(sk); break; /* Retransmitting */ case TIME_WRITE: - sk->prot->retransmit (sk, 0); - tcp_write_timeout(sk); - tcp_reset_xmit_timer(sk, 0, 0); /* get us going again */ + tcp_time_write_timeout(sk); break; /* Sending Keepalives */ case TIME_KEEPOPEN: + /* + * this reset_timer() call is a hack, this is not + * how KEEPOPEN is supposed to work. + */ + tcp_reset_xmit_timer (sk, TIME_KEEPOPEN, TCP_TIMEOUT_LEN); /* Send something to keep the connection open. */ if (sk->prot->write_wakeup) sk->prot->write_wakeup (sk); sk->retransmits++; sk->prot->retransmits++; tcp_write_timeout(sk); - tcp_reset_xmit_timer (sk, 0, 0); break; default: diff -u --recursive --new-file v1.3.87/linux/scripts/header.tk linux/scripts/header.tk --- v1.3.87/linux/scripts/header.tk Mon Apr 8 19:01:48 1996 +++ linux/scripts/header.tk Sat Apr 13 14:20:03 1996 @@ -1,14 +1,9 @@ # -# Create a "reference" object to steal colors from. -# -button .ref - -# # This is a handy replacement for ".widget cget" that requires neither tk4 # nor additional source code uglification. # proc cget { w option } { - return [lindex [$w configure $option] 4] + return "[lindex [$w configure $option] 4]" } # @@ -18,11 +13,24 @@ # proc vfix { var } { global $var - if [catch {set $var [subst $$var]}] { + if [ catch {eval concat $$var} ] { puts stdout "WARNING - broken Config.in! $var was not declared!" set $var 0 } } + +# +# Create a "reference" object to steal colors from. +# +button .ref +# +# On monochrome displays, -disabledforeground is blank by default; that's +# bad. Fill it with -foreground instead. +# +if { [cget .ref -disabledforeground] == "" } { + .ref configure -disabledforeground [cget .ref -foreground] +} + # # Define some macros we will need to parse the config.in file.