diff --git a/Makefile b/Makefile
index c806bf0..a1abd43 100644
--- a/Makefile
+++ b/Makefile
@@ -149,7 +149,7 @@
 	$(CC) $(CFLAGS) $(PROFILING) -c -o $*.o $<
 
 tools/system:	boot/head.o init/main.o tools/version.o linuxsubdirs
-	$(LD) $(LDFLAGS) -T 1000 boot/head.o init/main.o tools/version.o \
+	$(LD) $(LDFLAGS) -Ttext 1000 boot/head.o init/main.o tools/version.o \
 		$(ARCHIVES) \
 		$(FILESYSTEMS) \
 		$(DRIVERS) \
@@ -194,7 +194,7 @@
 	if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
 
 tools/zSystem:	boot/head.o init/main.o tools/version.o linuxsubdirs
-	$(LD) $(LDFLAGS) -T 100000 boot/head.o init/main.o tools/version.o \
+	$(LD) $(LDFLAGS) -Ttext 100000 boot/head.o init/main.o tools/version.o \
 		$(ARCHIVES) \
 		$(FILESYSTEMS) \
 		$(DRIVERS) \
diff --git a/README b/README
index 4e73bed..7a0d435 100644
--- a/README
+++ b/README
@@ -1,18 +1,18 @@
 
-	Linux kernel release 0.99 patchlevel 15
+	Linux kernel release 1.0
 
-These are the release notes for linux version 0.99.15.  Read them
-carefully, as they tell you what's new, explain how to install the
-kernel, and what to do if something goes wrong. 
+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. 
 
 INSTALLING the kernel:
 
- - if you install by patching, you need a *clean* 0.99.14 source tree,
+ - 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
 
 		cd /usr/src
-		patch -p0 < linux-0.99.patch15
+		patch -p0 < linux-1.0.patch
 
    and you should be ok.  You may want to remove the backup files (xxx~
    or xxx.orig), and make sure that there are no failed patches (xxx# or
@@ -21,7 +21,7 @@
  - If you install the full sources, do a
 
 		cd /usr/src
-		tar xvf linux-0.99.15.tar
+		tar xvf linux-1.0.tar
 
    to get it all put in place.
 
diff --git a/config.in b/config.in
index a844923..85e19af 100644
--- a/config.in
+++ b/config.in
@@ -106,7 +106,7 @@
 *
 #bool 'Keyboard meta-key sends ESC-prefix' CONFIG_KBD_META y
 #bool 'Keyboard Num Lock on by default' CONFIG_KBD_NUML y
-bool 'Parallel printer support' CONFIG_PRINTER y
+bool 'Parallel printer support' CONFIG_PRINTER n
 bool 'Logitech busmouse support' CONFIG_BUSMOUSE n
 bool 'PS/2 mouse (aka "auxiliary device") support' CONFIG_PSMOUSE y
 if [ "$CONFIG_PSMOUSE" = "y" ]
@@ -114,7 +114,7 @@
 fi
 bool 'Microsoft busmouse support' CONFIG_MS_BUSMOUSE n
 bool 'ATIXL busmouse support' CONFIG_ATIXL_BUSMOUSE n
-bool 'Selection (cut and paste for virtual consoles)' CONFIG_SELECTION y
+bool 'Selection (cut and paste for virtual consoles)' CONFIG_SELECTION n
 bool 'QIC-02 tape support' CONFIG_TAPE_QIC02 n
 bool 'QIC-117 tape support' CONFIG_FTAPE n
 if [ "$CONFIG_FTAPE" = "y" ]
diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c
index f7077d5..e412764 100644
--- a/drivers/net/3c509.c
+++ b/drivers/net/3c509.c
@@ -13,7 +13,7 @@
 	C/O Supercomputing Research Ctr., 17100 Science Dr., Bowie MD 20715
 */
 
-static char *version = "3c509.c:pl15i 2/23/94 becker@super.org\n";
+static char *version = "3c509.c:pl15k 3/5/94 becker@super.org\n";
 
 #include <linux/config.h>
 #include <linux/kernel.h>
@@ -190,7 +190,7 @@
 
 	{
 		char *if_names[] = {"10baseT", "AUI", "undefined", "BNC"};
-		printk("%s: 3c509 at %#3.3x	 tag %d, %s port, address ",
+		printk("%s: 3c509 at %#3.3x tag %d, %s port, address ",
 			   dev->name, dev->base_addr, current_tag, if_names[dev->if_port]);
 	}
 
@@ -477,10 +477,12 @@
 		if (++i > 10) {
 			printk("%s: Infinite loop in interrupt, status %4.4x.\n",
 				   dev->name, status);
+			/* Clear all interrupts we have handled. */
+			outw(0x68FF, ioaddr + EL3_CMD);
 			break;
 		}
-		/* Clear the other interrupts we have handled. */
-		outw(0x6899, ioaddr + EL3_CMD); /* Ack IRQ */
+		/* Acknowledge the IRQ. */
+		outw(0x6891, ioaddr + EL3_CMD); /* Ack IRQ */
 	}
 
 	if (el3_debug > 4) {
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index 4eecd8b..72a8e0c 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -127,10 +127,12 @@
 static struct blist blacklist[] = 
 {
    {"DENON","DRD-25X","V"},   /* A cdrom that locks up when probed at lun != 0 */
-   {"MAXTOR","XT-3280","PR02"},  /* Locks-up when LUN>0 polled. */
-   {"MAXTOR","XT-4380S","B3C"},  /* Locks-up when LUN>0 polled. */
+   {"IMS", "CDD521/10","2.06"},   /* Locks-up when LUN>0 polled. */
+   {"MAXTOR","XT-3280","PR02"},   /* Locks-up when LUN>0 polled. */
+   {"MAXTOR","XT-4380S","B3C"},   /* Locks-up when LUN>0 polled. */
    {"MAXTOR","MXT-1240S","I1.2"}, /* Locks up when LUN > 0 polled */
-   {"MAXTOR","XT-4170S","B5A"},  /* Locks-up sometimes when LUN>0 polled. */
+   {"MAXTOR","XT-4170S","B5A"},   /* Locks-up sometimes when LUN>0 polled. */
+   {"MAXTOR","XT-8760S","B7B"},   /* guess what? */
    {"NEC","CD-ROM DRIVE:841","1.0"},  /* Locks-up when LUN>0 polled. */
    {"RODIME","RO3000S","2.33"},  /* Locks up if polled for lun != 0 */
    {"SEAGATE", "ST157N", "\004|j"}, /* causes failed REQUEST SENSE on lun 1 for aha152x
diff --git a/fs/buffer.c b/fs/buffer.c
index 1f63919..923343f 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -748,16 +748,14 @@
 	bh = create_buffers(address, size);
 	if (!bh)
 		return 0;
+	/* do any of the buffers already exist? punt if so.. */
 	p = b;
 	for (offset = 0 ; offset < PAGE_SIZE ; offset += size) {
 		block = *(p++);
 		if (!block)
 			goto not_aligned;
-		tmp = get_hash_table(dev, block, size);
-		if (tmp) {
-			brelse(tmp);
+		if (find_buffer(dev, block, size))
 			goto not_aligned;
-		}
 	}
 	tmp = bh;
 	p = b;
diff --git a/fs/ext2/CHANGES b/fs/ext2/CHANGES
index 08b7b64..433655e 100644
--- a/fs/ext2/CHANGES
+++ b/fs/ext2/CHANGES
@@ -1,3 +1,14 @@
+Changes from version 0.4b to version 0.5
+========================================
+	- New superblock fields: s_lastcheck and s_checkinterval added
+	  by Uwe Ohse <uwe@tirka.gun.de> to implement timedependent checks
+	  of the file system
+	- Real random numbers for secure rm added by Pierre del Perugia
+	  <delperug@gla.ecoledoc.ibp.fr>
+	- The mount warnings related to the state of a fs are not printed
+	  if the fs is mounted read-only, idea by Nick Holloway
+	  <alfie@dcs.warwick.ac.uk>
+
 Changes from version 0.4a to version 0.4b
 =========================================
 	- Copyrights changed to include the name of my laboratory.
diff --git a/fs/ext2/super.c b/fs/ext2/super.c
index 82a9a97..1ceaf34 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -267,21 +267,21 @@
 static void ext2_setup_super (struct super_block * sb,
 			      struct ext2_super_block * es)
 {
-	if (!(sb->u.ext2_sb.s_mount_state & EXT2_VALID_FS))
-		printk ("EXT2-fs warning: mounting unchecked fs, "
-			"running e2fsck is recommended\n");
-	else if ((sb->u.ext2_sb.s_mount_state & EXT2_ERROR_FS))
-		printk ("EXT2-fs warning: mounting fs with errors, "
-			"running e2fsck is recommended\n");
-	else if (es->s_max_mnt_count >= 0 &&
-	         es->s_mnt_count >= (unsigned short) es->s_max_mnt_count)
-		printk ("EXT2-fs warning: maximal mount count reached, "
-			"running e2fsck is recommended\n");
-	else if (es->s_checkinterval &&
-		(es->s_lastcheck + es->s_checkinterval <= CURRENT_TIME))
-		printk ("EXT2-fs warning: checktime reached, "
-			"running e2fsck is recommended\n");
 	if (!(sb->s_flags & MS_RDONLY)) {
+		if (!(sb->u.ext2_sb.s_mount_state & EXT2_VALID_FS))
+			printk ("EXT2-fs warning: mounting unchecked fs, "
+				"running e2fsck is recommended\n");
+		else if ((sb->u.ext2_sb.s_mount_state & EXT2_ERROR_FS))
+			printk ("EXT2-fs warning: mounting fs with errors, "
+				"running e2fsck is recommended\n");
+		else if (es->s_max_mnt_count >= 0 &&
+		         es->s_mnt_count >= (unsigned short) es->s_max_mnt_count)
+			printk ("EXT2-fs warning: maximal mount count reached, "
+				"running e2fsck is recommended\n");
+		else if (es->s_checkinterval &&
+			(es->s_lastcheck + es->s_checkinterval <= CURRENT_TIME))
+			printk ("EXT2-fs warning: checktime reached, "
+				"running e2fsck is recommended\n");
 		es->s_state &= ~EXT2_VALID_FS;
 		if (!es->s_max_mnt_count)
 			es->s_max_mnt_count = EXT2_DFL_MAX_MNT_COUNT;
diff --git a/fs/proc/link.c b/fs/proc/link.c
index 2da00b0..a9a15d6 100644
--- a/fs/proc/link.c
+++ b/fs/proc/link.c
@@ -111,6 +111,10 @@
 	unsigned int dev,ino;
 	char buf[64];
 
+	if (!S_ISLNK(inode->i_mode)) {
+		iput(inode);
+		return -EINVAL;
+	}
 	i = proc_follow_link(NULL, inode, 0, 0, &inode);
 	if (i)
 		return i;
diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h
index e6613e9..b73aa4f 100644
--- a/include/linux/ext2_fs.h
+++ b/include/linux/ext2_fs.h
@@ -52,8 +52,8 @@
 /*
  * The second extended file system version
  */
-#define EXT2FS_DATE		"94/01/08"
-#define EXT2FS_VERSION		"0.4b"
+#define EXT2FS_DATE		"94/03/10"
+#define EXT2FS_VERSION		"0.5"
 
 /*
  * Debug code
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 03af7d5..2a7d91f 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -24,17 +24,17 @@
 
 extern inline void mark_bh(int nr)
 {
-	__asm__ __volatile__("btsl %1,%0":"=m" (bh_active):"ir" (nr));
+	__asm__ __volatile__("orl %1,%0":"=m" (bh_active):"ir" (1<<nr));
 }
 
 extern inline void disable_bh(int nr)
 {
-	__asm__ __volatile__("btcl %1,%0":"=m" (bh_mask):"ir" (nr));
+	__asm__ __volatile__("andl %1,%0":"=m" (bh_mask):"ir" (~(1<<nr)));
 }
 
 extern inline void enable_bh(int nr)
 {
-	__asm__ __volatile__("btsl %1,%0":"=m" (bh_mask):"ir" (nr));
+	__asm__ __volatile__("orl %1,%0":"=m" (bh_mask):"ir" (1<<nr));
 }
 
 #endif
diff --git a/kernel/traps.c b/kernel/traps.c
index 1303a25..707db91 100644
--- a/kernel/traps.c
+++ b/kernel/traps.c
@@ -101,12 +101,12 @@
 	printk("ds: %04x   es: %04x   fs: %04x   gs: %04x   ss: %04x\n",
 		regs->ds, regs->es, regs->fs, regs->gs, ss);
 	store_TR(i);
-	printk("Pid: %d, process nr: %d (%s)\nCode: ", current->pid, 0xffff & i, current->comm);
-	for(i=0;i<20;i++)
-		printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip)));
-	printk("\nStack: ");
+	printk("Pid: %d, process nr: %d (%s)\nStack: ", current->pid, 0xffff & i, current->comm);
 	for(i=0;i<5;i++)
 		printk("%08lx ", get_seg_long(ss,(i+(unsigned long *)esp)));
+	printk("\nCode: ");
+	for(i=0;i<20;i++)
+		printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip)));
 	printk("\n");
 	do_exit(SIGSEGV);
 }
diff --git a/mm/kmalloc.c b/mm/kmalloc.c
index e75fa20..e7a37b9 100644
--- a/mm/kmalloc.c
+++ b/mm/kmalloc.c
@@ -151,8 +151,14 @@
 	int order,tries,i,sz;
 	struct block_header *p;
 	struct page_descriptor *page;
+	extern unsigned long intr_count;
 
 /* Sanity check... */
+	if (intr_count && priority != GFP_ATOMIC) {
+		printk("kmalloc called nonatomically from interrupt %08lx\n",
+			((unsigned long *)&size)[-1]);
+		priority = GFP_ATOMIC;
+	}
 if (size > MAX_KMALLOC_K * 1024) 
      {
      printk ("kmalloc: I refuse to allocate %d bytes (for now max = %d).\n",
diff --git a/mm/swap.c b/mm/swap.c
index 885abf1..0a6dfb0 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -585,6 +585,7 @@
  */
 unsigned long __get_free_page(int priority)
 {
+	extern unsigned long intr_count;
 	unsigned long result, flag;
 	static unsigned long index = 0;
 
@@ -593,6 +594,11 @@
 	   sections of code have interrupts disabled. -RAB
 	   Is this code reentrant? */
 
+	if (intr_count && priority != GFP_ATOMIC) {
+		printk("gfp called nonatomically from interrupt %08lx\n",
+			((unsigned long *)&priority)[-1]);
+		priority = GFP_ATOMIC;
+	}
 	save_flags(flag);
 repeat:
 	REMOVE_FROM_MEM_QUEUE(free_page_list,nr_free_pages);
diff --git a/net/inet/ip.c b/net/inet/ip.c
index 944d1ed..f7f085d 100644
--- a/net/inet/ip.c
+++ b/net/inet/ip.c
@@ -1041,7 +1041,7 @@
  							len, len + hlen));
  
  		/* Allocate buffer. */
- 		if ((skb2 = alloc_skb(sizeof(struct sk_buff) + len + hlen,GFP_KERNEL)) == NULL) 
+ 		if ((skb2 = alloc_skb(sizeof(struct sk_buff) + len + hlen,GFP_ATOMIC)) == NULL) 
  		{
  			printk("IP: frag: no memory for new fragment!\n");
  			return;
diff --git a/net/inet/skbuff.c b/net/inet/skbuff.c
index 7de68d9..9409240 100644
--- a/net/inet/skbuff.c
+++ b/net/inet/skbuff.c
@@ -425,7 +425,15 @@
 
 struct sk_buff *alloc_skb(unsigned int size,int priority)
 {
-	struct sk_buff *skb=(struct sk_buff *)kmalloc(size,priority);
+	struct sk_buff *skb;
+	extern unsigned long intr_count;
+
+	if (intr_count && priority != GFP_ATOMIC) {
+		printk("alloc_skb called nonatomically from interrupt %08lx\n",
+			((unsigned long *)&size)[-1]);
+		priority = GFP_ATOMIC;
+	}
+	skb=(struct sk_buff *)kmalloc(size,priority);
 	if(skb==NULL)
 		return NULL;
 	skb->free= 2;	/* Invalid so we pick up forgetful users */
diff --git a/net/inet/sock.c b/net/inet/sock.c
index 356e607..d87d0c2 100644
--- a/net/inet/sock.c
+++ b/net/inet/sock.c
@@ -982,9 +982,13 @@
 	while(sk->state != TCP_CLOSE && current->timeout>0) {
 		interruptible_sleep_on(sk->sleep);
 		if (current->signal & ~current->blocked) {
+			break;
+#if 0
+			/* not working now - closes can't be restarted */
 			sti();
 			current->timeout=0;
 			return(-ERESTARTSYS);
+#endif
 		}
 	}
 	current->timeout=0;
@@ -1855,7 +1859,7 @@
   struct inet_protocol *p;
   int i;
 
-  printk("Swansea University Computer Society Net2Debugged [1.27]\n");
+  printk("Swansea University Computer Society Net2Debugged [1.30]\n");
   /* Set up our UNIX VFS major device. */
   if (register_chrdev(AF_INET_MAJOR, "af_inet", &inet_fops) < 0) {
 	printk("%s: cannot register major device %d!\n",
diff --git a/net/inet/tcp.c b/net/inet/tcp.c
index b29f444..fbd2e06 100644
--- a/net/inet/tcp.c
+++ b/net/inet/tcp.c
@@ -3602,99 +3602,25 @@
   sk->prot->queue_xmit(sk, dev, buff, 1);
 }
 
-/*
- * This routine probes a zero window.  It makes a copy of the first
- * packet in the write queue, but with just one byte of data.
- */
 void
 tcp_send_probe0(struct sock *sk)
 {
-  unsigned char *raw;
-  struct iphdr *iph;
-  struct sk_buff *skb2, *skb;
-  int len, hlen, data;
-  struct tcphdr *t1;
-  struct device *dev;
+	if (sk->zapped)
+		return;		/* Afer a valid reset we can send no more */
 
-  if (sk->zapped)
-	return;	/* Afer a valid reset we can send no more */
+	tcp_write_wakeup(sk);
 
-  if (sk -> state != TCP_ESTABLISHED && sk->state != TCP_CLOSE_WAIT &&
-      sk -> state != TCP_FIN_WAIT1 && sk->state != TCP_FIN_WAIT2)
-  	return;
-
-  skb = sk->wfront;
-  if (skb == NULL)
-        return;
-
-  dev = skb->dev;
-  /* I know this can't happen but as it does.. */
-  if(dev==NULL)
-    {
-      printk("tcp_send_probe0: NULL device bug!\n");
-      return;
-    }
-  IS_SKB(skb);
-
-  raw = skb->data;
-  iph = (struct iphdr *) (raw + dev->hard_header_len);
-
-  hlen = (iph->ihl * sizeof(unsigned long)) + dev->hard_header_len;
-  data = skb->len - hlen - sizeof(struct tcphdr);
-  len = hlen + sizeof(struct tcphdr) + (data ? 1 : 0);
- 	
-  /* Allocate buffer. */
-  if ((skb2 = alloc_skb(sizeof(struct sk_buff) + len, GFP_ATOMIC)) == NULL) {
-/*    printk("alloc failed raw %x th %x hlen %d data %d len %d\n",
-	   raw, skb->h.th, hlen, data, len); */
-    reset_timer (sk, TIME_PROBE0, 10);  /* try again real soon */
-    return;
-  }
-
-  skb2->arp = skb->arp;
-  skb2->len = len;
-  skb2->h.raw = (char *)(skb2->data);
- 
-  sk->wmem_alloc += skb2->mem_len;
- 
-  /* Copy the packet header into the new buffer. */
-  memcpy(skb2->h.raw, raw, len);
- 
-  skb2->h.raw += hlen;  /* it's now h.th -- pointer to the tcp header */
-  t1 = skb2->h.th;
- 
-/* source, dest, seq, from existing packet */
-  t1->ack_seq = ntohl(sk->acked_seq);
-  t1->res1 = 0;
-/* doff, fin, from existing packet.  Fin is safe because Linux always
- * sends fin in a separate packet
- * syn, rst, had better be zero in original */
-  t1->ack = 1;
-  t1->res2 = 0;
-  t1->window = ntohs(tcp_select_window(sk)/*sk->prot->rspace(sk)*/);
-  tcp_send_check(t1, sk->saddr, sk->daddr, len - hlen, sk);
-  /* Send it and free it.
-   * This will prevent the timer from automatically being restarted.
-   */
-  sk->prot->queue_xmit(sk, dev, skb2, 1);
-  sk->backoff++;
-  /*
-   * in the case of retransmissions, there's good reason to limit
-   * rto to 120 sec, as that's the maximum legal RTT on the Internet.
-   * For probes it could reasonably be longer.  However making it
-   * much longer could cause unacceptable delays in some situation,
-   * so we might as well use the same value
-   */
-  sk->rto = min(sk->rto << 1, 120*HZ);
-  reset_timer (sk, TIME_PROBE0, sk->rto);
-  sk->retransmits++;
-  sk->prot->retransmits ++;
+	sk->backoff++;
+	sk->rto = min(sk->rto << 1, 120*HZ);
+	reset_timer (sk, TIME_PROBE0, sk->rto);
+	sk->retransmits++;
+	sk->prot->retransmits ++;
 }
 
+
 /*
  *	Socket option code for TCP. 
- */
-  
+ */  
 int tcp_setsockopt(struct sock *sk, int level, int optname, char *optval, int optlen)
 {
 	int val,err;
diff --git a/zBoot/Makefile b/zBoot/Makefile
index ff34719..df21530 100644
--- a/zBoot/Makefile
+++ b/zBoot/Makefile
@@ -18,7 +18,7 @@
 all:	zSystem
 
 zSystem:	piggy.o $(zOBJECTS)
-		$(LD) $(LDFLAGS) -o zSystem -T 1000 $(zOBJECTS) piggy.o
+		$(LD) $(LDFLAGS) -o zSystem -Ttext 1000 $(zOBJECTS) piggy.o
 
 head.o:	head.s
 
