Linux 1.0---A better UNIX than Windows NT

Summary: Linux 1.0 released
Keywords: Linux Kernel 1.0 Academy Awards
X-Moderator-Added-Keywords: universe, end of

Finally, here it is.  Almost on time (being just two years late is
peanuts in the OS industry), and better than ever:

	Linux kernel release 1.0

This release has no new major features compared to the pl15 kernels, but
contains lots and lots of bugfixes: all the major ones are gone, the
smaller ones are hidden better.  Hopefully there are no major new ones.

The Linux kernel can be found as source on most of the Linux ftp-sites
under the names

	linux-1.0.tar.gz		(full source)
	linux-1.0.patch.pl15.gz		(patch against linux-0.99pl15)
	linux-1.0.patch.alpha.gz	(patch from linux-pre-1.0)

it should be available at least at the sites
		pub/OS/Linux/PEOPLE/Linus	(now)
		pub/Linux/Incoming		(now)
		pub/Linux/kernel		(soon)
		pub/linux/sources/system	(soon)
		pub/Software/Linux/Kernel	(now)

This release finally moves Linux out of Beta status and is meant as a
base for distributions to build on.  It will neither change Linux'
status as FreeWare under the GPL, nor will it mean the end of
development on Linux.  In fact many new features where held back for
later releases so that 1.0 could become a well tested and hopefully
stable release.

The Linux kernel wouldn't be where it is today without the help of lots
of people: the kernel developers, the people who did user-level programs
making linux useful, and the brave and foolhardy people who risked their
harddisks and sanity to test it all out.  My thanks to you all.
(Editorial note: if you think this sounds too much like the Academy
Awards ceremony, just skip this: it's not getting any better.)

Thanks to people like Aaron Kushner, Danny ter Haar and the authors of
the AnwenderHandbuch (and others) who have helped me with hardware or
monetary donations (and to the Oxford Beer Trolls and others who took
care of the drinkware).  And thanks to Dirk, who helped me write this
announcement despite my lazyness ("hey, it's just another release, who
needs an announcement anyway?").

To make a long and boring story a bit shorter and boring, here is at
least a partial list of people who have been helping make Linux what it
is today.  Thanks to you all,

	Krishna Balasubramanian <>
	Arindam Banerji <>
	Peter Bauer <>
	Fred Baumgarten <>
	Donald Becker <>
	Stephen R. van den Berg <>
	Hennus Bergman <>
	Ross Biro <bir7@leland.Stanford.Edu>
	Bill Bogstad <>
	John Boyd <>
	Andries Brouwer <>
	Remy Card <>
	Ed Carp <>
	Raymond Chen <>
	Alan Cox <>
	Laurence Culhane <>
	Wayne Davison <>
	Thomas Dunbar <>
	Torsten Duwe <>
	Drew Eckhardt <drew@cs.Colorado.EDU>
	Bjorn Ekwall <>
	Doug Evans <>
	Rik Faith <>
	Juergen Fischer <>
	Jeremy Fitzhardinge <>
	Ralf Flaxa <>
	Nigel Gamble <>
	Philip Gladstone <>
	Bruno Haible <>
	Andrew Haylett <>
	Dirk Hohndel <>
	Nick Holloway <>
	Ron Holt <>
	Rob W. W. Hooft <hooft@EMBL-Heidelberg.DE>
	Michael K. Johnson <>
	Fred N. van Kempen <>
	Olaf Kirch <>
	Ian Kluft <>
	Rudolf Koenig <>
	Bas Laarhoven <>
	Warner Losh <>
	H.J. Lu <>
	Tuomas J. Lukka <Tuomas.Lukka@Helsinki.FI>
	Kai M"akisara <>
	Pat Mackinlay <>
	John A. Martin <>
	Bradley McLean <>
	Craig Metz <>
	William (Bill) Metzenthen <>
	Rick Miller <>
	Corey Minyard <>
	Eberhard Moenkeberg <>
	Ian A. Murdock <>
	Johan Myreen <>
	Stefan Probst <>
	Daniel Quinlan <>
	Florian La Roche <>
	Robert Sanders <>
	Peter De Schrijver <>
	Darren Senn <>
	Chris Smith <>
	Drew Sullivan <>
	Tommy Thorn <>
	Jon Tombs <>
	Theodore Ts'o <>
	Simmule Turner <>
	Stephen Tweedie <>
	Thomas Uhl <>
	Juergen Weigert <>
	Matt Welsh <>
	Marco van Wieringen <>
	Stephen D. Williams <>
	G\"unter Windau <>
	Lars Wirzenius <>
	Roger E. Wolff <>
	Frank Xia <>
	Eric Youngdale <>
	Orest Zborowski <>

A more detailed list with contact and description information can be
found in the CREDITS file that accompanies the kernel sources.
diff --git a/CHANGES b/CHANGES
index 4e74e16..7e36f50 100644
@@ -1,3 +1,13 @@
+CHANGES since 0.99 patchlevel 15:
+ - removed all the bugs, of course.
+ - networking fixes.
+ - more changes than I really wanted..
+CHANGES since 0.99 patchlevel 14:
+ - too many to count, really.  Besides, I've lost my notes. 
 CHANGES since 0.99 patchlevel 13:
  - new kernel source layout: drivers separated
diff --git a/CREDITS b/CREDITS
new file mode 100644
index 0000000..dfe6118
--- /dev/null
@@ -0,0 +1,605 @@
+	This is at least a partial credits-file of people that have
+	contributed to the linux project.  It is sorted by name, and
+	formatted in a format that allows for easy grepping and
+	beautification by scripts.  The fields are: name (N), email (E),
+	description (D) and snail-mail address (S).  Thanks,
+			Linus
+N: Krishna Balasubramanian
+D: Wrote SYS V IPC (part of standard kernel since 0.99.10)
+N: Arindam Banerji
+D: Contributed ESDI driver routines needed to port LINUX to the PS/2 MCA.
+S: Department of Computer Science & Eng.
+S: University of Notre Dame
+S: Notre Dame, Indiana
+N: Peter Bauer
+D: Driver for depca-ethernet-board
+S: 69259 Wilhemsfeld
+S: Rainweg 15
+S: Germany
+N: Fred Baumgarten
+D: NET-2 & netstat(8)
+S: Kandelstrasse 27
+S: 76297 Stutensee
+S: Germany
+N: Donald Becker
+D: General low-level networking hacker
+D: Most of the ethercard drivers
+D: Original author of the NFS server
+S: 17100 Science Drive
+S: Bowie, Maryland 20715
+N: Stephen R. van den Berg (AKA BuGless)
+D: General kernel, gcc, and libc hacker
+D: Specialisation: tweaking, ensuring portability, tweaking, cleaning,
+D: tweaking and occasionally debugging :-)
+S: Bouwensstraat 22
+S: 6369 BG  Simpelveld
+S: The Netherlands
+N: Hennus Bergman
+E:  [My uucp-fed Linux box at home]
+E:        [Alternate address]
+D: Author and maintainer of the QIC-02 tape driver
+S: The Netherlands
+N: Ross Biro
+E: bir7@leland.Stanford.Edu
+D: Original author of the Linux networking code
+N: Bill Bogstad
+D: Wrote /proc/self patch
+S: Johns Hopkins University
+S: Computer Science Department
+S: Baltimore, Maryland 21218
+N: John Boyd
+D: Co-author of wd7000 SCSI driver
+S: 101 Curl Drive #591
+S: Columbus, Ohio 43210 
+N: Andries Brouwer
+D: International character handling for keyboard and console
+S: Bessemerstraat 21
+S: Amsterdam
+S: The Netherlands
+N: Remy Card
+D: Extended file system designer and developer
+D: Second extended file system designer and developer
+S: Institut Blaise Pascal
+S: 4 Place Jussieu, 75252 Paris Cedex 05
+S: France
+N: Ed Carp
+D: uucp, elm, pine, pico port
+D: cron, at(1) developer
+S: 48287 Sawleaf
+S: Fremont, California  94539
+N: Raymond Chen
+D: Author of Configure script
+S: 14509 NE 39th St, #1096
+S: Bellevue WA 98007
+N: Alan Cox
+E: GW4PTS@GB7SWN (packet radio)
+D: NET2Debugged author
+D: Network layer debugging
+D: AX.25 & IPX alpha releases
+S: <No>
+N: Laurence Culhane
+D: Wrote the initial alpha SLIP code
+S: 81 Hood Street
+S: Northampton
+S: NN1 3QT
+S: England
+N: Wayne Davison
+D: Second extended file system co-designer
+N: Thomas Dunbar
+D: TeX & METAFONT hacking/maintainence
+S: Dean, Graduate School
+S: Virginia Tech
+S: Blacksburg, Virginia 24061
+N: Torsten Duwe
+D: Part-time kernel hacker
+D: The Linux Support Team Erlangen
+S: Grevenbroicher Str. 17
+S: 47807 Krefeld
+S: Germany
+N: Drew Eckhardt
+E: drew@cs.Colorado.EDU
+D: SCSI code
+D: Assorted snippets elsewhere
+D: Boot sector "..." printing
+S: 538 West Laurell Court
+S: Louisville, Colorado 80027
+N: Bjorn Ekwall
+D: Driver for the D-Link parallel port Ethernet adapter
+S: Myrstuguv. 83
+S: S-143 32  VARBY
+S: Sweden
+N: Doug Evans
+D: Wrote Xenix FS (part of standard kernel since 0.99.15)
+N: Rik Faith
+D: Future Domain TMC-16x0 SCSI driver
+N: Juergen Fischer
+D: Author of Adaptec AHA-152x scsi driver
+S: Schulstrasse 18
+S: 26506 Norden
+S: Germany
+N: Jeremy Fitzhardinge
+D: Improved mmap and munmap handling
+D: General mm minor tidyups
+S: 99 Albermarle Street
+S: Newtown 2042
+S: Australia
+N: Ralf Flaxa
+D: The Linux Support Team Erlangen
+N: Nigel Gamble
+D: Interrupt-driven printer driver
+S: 301 Norwood Terrace, Apartment N226
+S: Boca Raton, Florida 33431-6588
+N: Philip Gladstone
+D: Kernel / timekeeping stuff
+N: Bruno Haible
+D: Unified SysV FS based on Xenix FS (part of standard kernel since 0.99.15)
+S: Augartenstrasse 40
+S: D - 76137 Karlsruhe
+S: Germany
+N: Andrew Haylett
+D: Selection mechanism
+S: GEC-Marconi Research Centre
+S: West Hanningfield Road
+S: Great Baddow, Essex CM2 8HN
+S: UK
+N: Dirk Hohndel
+D: XFree86
+S: Universit"at W"urzburg, LS Informatik I
+S: Am Hubland, 97218 W"urzburg
+S: Germany
+N: Nick Holloway
+D: Small patches for kernel, libc
+D: Makedev
+S: Department of Computer Science
+S: University of Warwick
+S: Coventry
+S: CV4 7AL
+S: UK
+N: Ron Holt
+D: Kernel development
+D: Contributed to kernel Wabi/Wine support
+S: Novell, Inc.
+S: 1700 South 122 East, Mailstop CP-1
+S: Provo, Utah 84606
+N: Rob W. W. Hooft
+E: hooft@EMBL-Heidelberg.DE
+D: Shared libs for graphics-tools and for the f2c compiler
+D: Some kernel programming on the floppy and sounddrivers in early days
+D: Some other hacks to get different kinds of programs to work for linux
+S: Panoramastrasse 18
+S: D-69126 Heidelberg
+S: Germany
+N: Michael K. Johnson
+D: The Linux Documentation Project
+D: Kernel Hackers' Guide
+D: Procps
+D: Proc filesystem
+D: Maintain
+D: LP driver
+S: 201 Howell Street, Apartment 1C
+S: Chapel Hill, North Carolina 27514-4818
+N: Fred N. van Kempen
+D: NET-2
+D: Drivers
+D: Kernel cleanups
+S: Hoefbladhof 27
+S: 2215 DV  Voorhout
+S: The Netherlands
+N: Olaf Kirch
+D: Author of the Linux Network Administrators' Guide
+S: Kattreinstr 38
+S: D-64295
+S: Germany
+N: Ian Kluft
+D: Smail binary packages for Slackware and Debian
+S: 2200 Monroe Street #1509
+S: Santa Clara, California 95050-3452
+N: Rudolf Koenig
+D: The Linux Support Team Erlangen
+N: Bas Laarhoven
+D: Loadable modules and ftape driver
+S: Mr. v. Boemellaan 39
+S: NL-5237 KA  's-Hertogenbosch
+S: The Netherlands
+N: Warner Losh
+D: Provided OI/OB for Linux, general hacker
+S: 4909 Pearl East Circle Suite 200
+S: Boulder, Colorado 80303
+N: H.J. Lu
+D: GCC + libraries hacker
+N: Tuomas J. Lukka
+E: Tuomas.Lukka@Helsinki.FI
+D: Original dual-monitor patches
+D: Console-mouse-tracking patches
+S: Puistokaari 1 E 18
+S: 00200 Helsinki
+S: Finland
+N: Kai M"akisara
+D: SCSI Tape Driver
+N: James B. MacLean
+D: Coordinator of DOSEMU releases
+D: Program in DOSEMU
+S: Halifax, Nova Scotia
+S: Canada B3J 3C8
+N: Pat Mackinlay
+D: 8 bit XT hard disk driver
+D: Miscellaneous ST0x, TMC-8xx and other SCSI hacking
+S: 25 McMillan Street
+S: Victoria Park, 6100
+S: Western Australia
+N: John A. Martin
+D: FSSTND contributor
+D: Credit file compilator
+S: Computer Sciences Corporation
+S: 1100 West Street
+S: Laurel, Maryland 20707-3587
+N: Bradley McLean
+D: Device driver hacker
+D: General kernel debugger
+S: 249 Nichols Avenue
+S: Syracuse, New York 13206
+N: Craig Metz
+D: Some of PAS 16 mixer & PCM support
+S: 12305 Country Ridge Lane
+S: Fairfax, Virginia 22033
+N: William (Bill) Metzenthen
+D: Author of the FPU emulator.
+D: Minor kernel hacker for other lost causes (Hercules mono, etc).
+S: 22 Parker Street
+S: Ormond
+S: Victoria 3163
+S: Australia
+N: Rick Miller
+D: Linux Device Registrar (Major/minor numbers), "au-play", "bwBASIC"
+S: S78 W16203 Woods Road
+S: Muskego, Wisconsin 53150
+N: Corey Minyard
+D: Sony CDU31A CDROM Driver
+S: 1805 Marquette
+S: Richardson, Texas 75081
+N: Eberhard Moenkeberg
+D: CDROM driver "sbpcd" (Matsushita/Panasonic/Soundblaster)
+S: Reinholdstrasse 14
+S: D-37083 Goettingen
+S: Germany
+N: Ian A. Murdock
+D: Creator of Debian distribution
+S: 30 White Tail Lane
+S: Lafayette, Indiana 47906
+N: Johan Myreen
+D: PS/2 mouse driver writer etc.
+S: Dragonvagen 1 A 13
+S: FIN-00330 Helsingfors
+S: Finland
+N: Stefan Probst
+D: The Linux Support Team Erlangen
+N: Daniel Quinlan
+D: FSSTND Coordinator
+S: Box C3529
+S: Bucknell University
+S: Lewisburg, Pennsylvania 17837
+N: Florian La Roche
+D: Net programs and kernel net hacker
+S: Gaildorfer Str. 27
+S: 7000 Stuttgart 50
+S: Germany
+N: Robert Sanders
+D: Dosemu
+N: Peter De Schrijver
+D: Mitsumi CD-ROM driver patches March version
+S: Molenbaan 29
+S: B2240 Zandhoven
+S: Belgium
+N: Darren Senn
+D: Whatever I notice needs doing (so far: itimers, /proc)
+S: 620 Park View Drive #206
+S: Santa Clara, California 95054
+N: Chris Smith
+D: HPFS filesystem
+S: Richardson, Texas
+N: Drew Sullivan
+D: iBCS2 developer
+S: 22 Irvington Cres.
+S: Willowdale, Ontario
+S: Canada, M2N 2Z1
+N: Tommy Thorn
+D: Device driver hacker (aha1542 & plip)
+S: Aarhus University
+S: Computer Science Department
+S: Ny Munkegade 116
+S: DK-8000 Aarhus C
+S: Denmark
+N: Jon Tombs
+D: NFS mmap()
+D: XF86_S3
+D: Kernel modules
+S: C/ Teodosio 43
+S: Portal 6 1-A
+S: Sevilla 41002
+S: Spain
+N: Linus Torvalds
+E: Linus.Torvalds@Helsinki.FI
+D: General kernel hacker
+S: Kalevankatu 55 B 37
+S: 00180 Helsinki
+S: Finland
+N: Theodore Ts'o
+D: Random Linux hacker
+D: Maintainer of ftp archive
+D: Maintainer of c.o.l.* Usenet<->mail gateway
+D: Author of serial driver
+D: Author of the new e2fsck
+D: Author of job control and system call restart code
+D: Author of ramdisk device driver
+D: Author of loopback device driver
+S: MIT Room E40-343
+S: 1 Amherst Street
+S: Cambridge, Massachusetts 02139
+N: Simmule Turner
+D: Added swapping to filesystem
+S: 8504 16th Street #406
+S: Silver Spring, Maryland 20910
+N: Stephen Tweedie
+D: Second extended file system developer
+D: General filesystem hacker
+S: Dept. of Computer Science
+S: University of Edinburgh
+S: JCMB, The King's Buildings
+S: Mayfield Road
+S: Edinburgh EH9 3JZ
+S: Scotland, UK
+N: Thomas Uhl
+D: Application programmer
+D: Linux promoter
+D: Author of a German book on Linux
+S: Obere Heerbergstrasse 17
+S: 97078 Wuerzburg
+S: Germany
+N: Juergen Weigert
+D: The Linux Support Team Erlangen
+N: Matt Welsh
+D: Linux Documentation Project coordinator
+D: Author, Linux Installation and Getting Started
+D: HOWTO coordinator and writer
+D: Maintainer of Linux doc archives
+D: Moderator, comp.os.linux.announce
+S: 205 Gray Street NE
+S: Wilson, North Caroilina 27893 
+N: Marco van Wieringen
+D: Author of acct and quota
+S: Breeburgsingel 12
+S: 2135 CN Hoofddorp
+S: The Netherlands
+N: Stephen D. Williams
+D: Consultant, entrepreneur, developer
+S: 2464 Rosina Drive
+S: Dayton, Ohio 45342-6430
+N: G\"unter Windau
+D: Some bug fixes in the polling printer driver (lp.c)
+S: University of Nijmegen
+S: Geert-Grooteplein Noord 21
+S: 6525 EZ  Nijmegen
+S: The Netherlands
+N: Lars Wirzenius
+D: Linux System Administrator's Guide
+D: Co-moderator, comp.os.linux.announce
+D: Original sprintf in kernel
+D: Personal information about Linus
+D: Original kernel README
+D: Linux News (electronic magazine)
+D: Meta-FAQ, originator
+D: INFO-SHEET, former maintainer
+S: Ohratie 16 C 198
+S: sf-01370 Vantaa
+S: Finland
+N: Roger E. Wolff
+D: Written kmalloc/kfree
+S: Oosterstraat 23 
+S: 2611 TT  Delft
+S: The Netherlands
+N: Frank Xia
+D: Xiafs filesystem
+S: 542 West 112th Street, 5N
+S: New York, New York 10025
+N: Eric Youngdale
+D: General kernel hacker
+D: SCSI iso9660 and ELF
+S: 17 Canterbury Square #101
+S: Alexandria, Virginia 22304
+N: Orest Zborowski
+D: XFree86 and kernel development
+S: 1507 145th Place SE #B5
+S: Bellevue, Washington 98007
diff --git a/Makefile b/Makefile
index a1abd43..be8194b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-VERSION = pre-1
diff --git a/README b/README
index 7a0d435..5bea132 100644
--- a/README
+++ b/README
@@ -2,11 +2,32 @@
 	Linux kernel release 1.0
 These are the release notes for linux version 1.0.  Read them carefully,
-as they tell you what's new, explain how to install the kernel, and what
-to do if something goes wrong. 
+as they tell you what this is all about, explain how to install the
+kernel, and what to do if something goes wrong. 
+  Linux is a Unix clone for 386/486-based PCs written from scratch by
+  Linus Torvalds with assistance from a loosely-knit team of hackers
+  across the Net.  It aims towards POSIX compliance. 
+  It has all the features you would expect in a modern fully-fledged
+  Unix, including true multitasking, virtual memory, shared libraries,
+  demand loading, shared copy-on-write executables, proper memory
+  management and TCP/IP networking. 
+  It is distributed under the GNU General Public License - see the
+  accompanying COPYING file for more details. 
 INSTALLING the kernel:
+ - If you install the full sources, do a
+		cd /usr/src
+		tar xvf linux-1.0.tar
+   to get it all put in place.
  - if you install by patching, you need a *clean* 0.99.15 source tree,
    which presumably exists in /usr/src/linux.  If so, to get the kernel
    patched, just do a
@@ -18,13 +39,6 @@
    or xxx.orig), and make sure that there are no failed patches (xxx# or
- - If you install the full sources, do a
-		cd /usr/src
-		tar xvf linux-1.0.tar
-   to get it all put in place.
  - make sure your /usr/include/linux and /usr/include/asm directories
    are just symlinks to the kernel sources:
@@ -48,6 +62,9 @@
    /bin/sh (in that order), so hopefully one of those is correct. 
 	NOTES on "make config":
+	- having unnecessary drivers will make the kernel bigger, and can
+	  under some circumstances lead to problems: probing for a
+	  nonexistent controller card may confuse your other controllers
 	- compiling the kernel with "-m486" for a number of 486-specific
 	  will result in a kernel that still works on a 386: it may be
 	  slightly larger and possibly slower by an insignificant amount,
@@ -74,10 +91,10 @@
 COMPILING the kernel:
- - make sure you have gcc-2.4.5 or newer available with g++.  It seems
-   older gcc versions can have problems compiling linux 0.99.10 and
-   newer versions.  If you upgrade, remember to get the new binutils
-   package too (for as/ld/nm and company)
+ - make sure you have gcc-2.4.5 or newer available.  It seems older gcc
+   versions can have problems compiling newer versions of linux.  If you
+   upgrade your compiler, remember to get the new binutils package too
+   (for as/ld/nm and company)
  - do a "make zImage" to create a compressed kernel image.  If you want
    to make a bootdisk (without root filesystem or lilo), insert a floppy
@@ -94,12 +111,13 @@
    For some, this is on a floppy disk, in which case you can "cp
    /usr/src/linux/zImage /dev/fd0" to make a bootable floppy. 
-   If you boot Linux from the hard drive, chances are you use LILO uses
-   the kernel image as specified in the file /etc/lilo/config.  The
-   kernel image file is usually /vmlinux, or /Image, or /etc/Image.  To
-   use the new kernel, copy the new image over the old one (save a
-   backup of the original!).  Then, you MUST REINSTALL LILO!! If you
-   don't, you won't be able to boot the new kernel image. 
+   If you boot Linux from the hard drive, chances are you use LILO which
+   uses the kernel image as specified in the file /etc/lilo/config.  The
+   kernel image file is usually /vmlinuz, or /zImage, or /etc/zImage. 
+   To use the new kernel, copy the new image over the old one (save a
+   backup of the original!).  Then, you MUST RERUN LILO to update the
+   loading map!! If you don't, you won't be able to boot the new kernel
+   image. 
    Reinstalling LILO is usually a matter of running /etc/lilo/install. 
    You may wish to edit /etc/lilo/config to specify an entry for your
diff --git a/drivers/char/serial.c b/drivers/char/serial.c
index 136be8f..6a9f27d 100644
--- a/drivers/char/serial.c
+++ b/drivers/char/serial.c
@@ -462,7 +462,7 @@
 static inline void figure_RS_timer(void)
-	int	timeout = 6000;	/* 60 seconds; really big :-) */
+	int	timeout = jiffies + 60*HZ; /* 60 seconds; really big :-) */
 	int	i, mask;
 	if (!IRQ_active)
@@ -473,7 +473,7 @@
 		if (IRQ_timer[i] < timeout)
 			timeout = IRQ_timer[i];
-	timer_table[RS_TIMER].expires = jiffies + timeout;
+	timer_table[RS_TIMER].expires = timeout;
 	timer_active |= 1 << RS_TIMER;
diff --git a/drivers/net/slip.c b/drivers/net/slip.c
index 2e9b2e1..311d231 100644
--- a/drivers/net/slip.c
+++ b/drivers/net/slip.c
@@ -243,9 +243,9 @@
 	DPRINTF((DBG_SLIP,"SLIP: mtu changed!\n"));
-	tb= (unsigned char *) kmalloc(l + 4, GFP_KERNEL);
-	rb= (unsigned char *) kmalloc(l + 4, GFP_KERNEL);
-	cb= (unsigned char *) kmalloc(l + 4, GFP_KERNEL);
+	tb= (unsigned char *) kmalloc(l + 4, GFP_ATOMIC);
+	rb= (unsigned char *) kmalloc(l + 4, GFP_ATOMIC);
+	cb= (unsigned char *) kmalloc(l + 4, GFP_ATOMIC);
 	if(tb==NULL || rb==NULL || cb==NULL)
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index d800d59..0ba69b3 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -344,7 +344,7 @@
 	if (!(bh=bread(inode->i_dev,block, bufsize))) {
 	  printk("unable to read i-node block");
 	  goto fail;
-	};
+	}
 	pnt = ((unsigned char *) bh->b_data
 	       + (inode->i_ino & (bufsize - 1)));
@@ -353,18 +353,23 @@
 	if ((inode->i_ino & (bufsize - 1)) + *pnt > bufsize){
 		cpnt = kmalloc(1 << ISOFS_BLOCK_BITS, GFP_KERNEL);
+		if (cpnt == NULL) {
+			printk(KERN_INFO "NoMem ISO inode %d\n",inode->i_ino);
+			brelse(bh);
+			goto fail;
+		}
 		memcpy(cpnt, bh->b_data, bufsize);
 		if (!(bh = bread(inode->i_dev,++block, bufsize))) {
-		        kfree_s (cpnt, 1 << ISOFS_BLOCK_BITS);
+			kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS);
 			printk("unable to read i-node block");
 			goto fail;
-		      };
+		}
 		memcpy((char *)cpnt + bufsize, bh->b_data, bufsize);
 		pnt = ((unsigned char *) cpnt
 		       + (inode->i_ino & (bufsize - 1)));
 		raw_inode = ((struct iso_directory_record *) pnt);
-	};
+	}
 	inode->i_mode = S_IRUGO; /* Everybody gets to read the file. */
 	inode->i_nlink = 1;
@@ -383,7 +388,7 @@
 		if(i == raw_inode->name_len[0] || raw_inode->name[i] == ';') 
 			inode->i_mode |= S_IXUGO; /* execute permission */
-	};
+	}
 	inode->i_uid = 0;
 	inode->i_gid = 0;
 	inode->i_size = isonum_733 (raw_inode->size);
@@ -394,7 +399,7 @@
 	    inode->i_sb->u.isofs_sb.s_cruft == 'n') {
 	  printk("Warning: defective cdrom.  Enabling \"cruft\" mount option.\n");
 	  inode->i_sb->u.isofs_sb.s_cruft = 'y';
-	};
+	}
 /* Some dipshit decided to store some other bit of information in the high
    byte of the file length.  Catch this and holler.  WARNING: this will make
@@ -404,12 +409,12 @@
 	   inode->i_size & 0xff000000){
 /*	  printk("Illegal format on cdrom.  Pester manufacturer.\n"); */
 	  inode->i_size &= 0x00ffffff;
-	};
+	}
 	if (raw_inode->interleave[0]) {
 		printk("Interleaved files not (yet) supported.\n");
 		inode->i_size = 0;
-	};
+	}
 #ifdef DEBUG
 	/* I have no idea what extended attributes are used for, so
@@ -458,8 +463,7 @@
 	case 'm':
 	  inode->u.isofs_i.i_file_format = ISOFS_FILE_TEXT_M; /* File type */
-	};
+	}
 /* Now test for possible Rock Ridge extensions which will override some of
    these numbers in the inode structure. */
@@ -472,11 +476,6 @@
-	if (cpnt) {
-		kfree_s (cpnt, 1 << ISOFS_BLOCK_BITS);
-		cpnt = NULL;
-	};
 	inode->i_op = NULL;
 	if (inode->i_sb->u.isofs_sb.s_cruft != 'y' && 
 	    isonum_723 (raw_inode->volume_sequence_number) != 1) {
@@ -495,6 +494,10 @@
 	  else if (S_ISFIFO(inode->i_mode))
+	if (cpnt) {
+		kfree_s (cpnt, 1 << ISOFS_BLOCK_BITS);
+		cpnt = NULL;
+	}
 	/* With a data error we return this information */
diff --git a/net/inet/route.c b/net/inet/route.c
index f8c2a58..4998593 100644
--- a/net/inet/route.c
+++ b/net/inet/route.c
@@ -276,6 +276,20 @@
 	mask = ((struct sockaddr_in *) &r->rt_genmask)->sin_addr.s_addr;
 	gw = ((struct sockaddr_in *) &r->rt_gateway)->sin_addr.s_addr;
+/* BSD emulation: Permits route add someroute gw one-of-my-addresses
+   to indicate which iface. Not as clean as the nice Linux dev technique
+   but people keep using it... */
+	if (!dev && (flags & RTF_GATEWAY)) {
+		struct device *dev2;
+		for (dev2 = dev_base ; dev2 != NULL ; dev2 = dev2->next) {
+			if ((dev2->flags & IFF_UP) && dev2->pa_addr == gw) {
+				flags &= ~RTF_GATEWAY;
+				dev = dev2;
+				break;
+			}
+		}
+	}
 	if (bad_mask(mask, daddr))
 		mask = 0;
diff --git a/net/inet/tcp.c b/net/inet/tcp.c
index fbd2e06..59980ad 100644
--- a/net/inet/tcp.c
+++ b/net/inet/tcp.c
@@ -3552,7 +3552,9 @@
   if (sk->zapped)
 	return;	/* Afer a valid reset we can send no more */
-  if (sk -> state != TCP_ESTABLISHED && sk->state != TCP_CLOSE_WAIT) return;
+  if (sk -> state != TCP_ESTABLISHED && sk->state != TCP_CLOSE_WAIT &&
+      sk -> state != TCP_FIN_WAIT1 && sk->state != TCP_FIN_WAIT2)
+	return;
   buff = sk->prot->wmalloc(sk,MAX_ACK_SIZE,1, GFP_ATOMIC);
   if (buff == NULL) return;