diff -u --recursive --new-file v1.1.58/linux/Makefile linux/Makefile
--- v1.1.58/linux/Makefile	Fri Oct 28 12:24:00 1994
+++ linux/Makefile	Fri Oct 28 12:07:33 1994
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 1
-SUBLEVEL = 58
+SUBLEVEL = 59
 
 ARCH = i386
 
diff -u --recursive --new-file v1.1.58/linux/drivers/char/busmouse.c linux/drivers/char/busmouse.c
--- v1.1.58/linux/drivers/char/busmouse.c	Thu Aug 11 20:43:03 1994
+++ linux/drivers/char/busmouse.c	Fri Oct 28 12:54:44 1994
@@ -234,6 +234,7 @@
 	mouse.dx = 0;
 	mouse.dy = 0;
 	mouse.wait = NULL;
-	printk("Logitech Bus mouse detected and installed.\n");
+	printk("Logitech Bus mouse detected and installed with IRQ %d.\n",
+	       mouse_irq);
 	return kmem_start;
 }
diff -u --recursive --new-file v1.1.58/linux/drivers/char/tty_io.c linux/drivers/char/tty_io.c
--- v1.1.58/linux/drivers/char/tty_io.c	Fri Oct 28 12:24:01 1994
+++ linux/drivers/char/tty_io.c	Thu Oct 27 17:59:46 1994
@@ -1463,12 +1463,13 @@
 	tty_hangup(tty);
 #else
 	struct task_struct **p;
-	int session = tty->session;
+	int session;
 	int		i;
 	struct file	*filp;
 	
 	if (!tty)
 		return;
+	session  = tty->session;
 	if (tty->ldisc.flush_buffer)
 		tty->ldisc.flush_buffer(tty);
 	if (tty->driver.flush_buffer)
diff -u --recursive --new-file v1.1.58/linux/drivers/scsi/ChangeLog linux/drivers/scsi/ChangeLog
--- v1.1.58/linux/drivers/scsi/ChangeLog	Thu Aug 11 20:43:19 1994
+++ linux/drivers/scsi/ChangeLog	Thu Oct 27 17:49:29 1994
@@ -1,3 +1,146 @@
+Tue Oct 11 08:47:39 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.54 released.
+
+	* Add third PCI chip id.  [Drew]
+
+	* buslogic.c: Set BUSLOGIC_CMDLUN back to 1 [Eric].
+
+Sun Oct  9 20:23:14 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.53 released.
+
+	* scsi.c: Do not allocate dma bounce buffers if we have exactly
+	16Mb.
+
+Fri Sep  9 05:35:30 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.51 released.
+
+	* aha152x.c: Add support for disabling the parity check.  Update
+	to version 1.4. [Juergen].
+
+	* seagate.c: Tweak debugging message.
+
+Wed Aug 31 10:15:55 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.50 released.
+
+	* aha152x.c: Add eb800 for Vtech Platinum SMP boards. [Juergen].
+
+	* scsi.c: Add Quantum PD1225S to blacklist.
+
+Fri Aug 26 09:38:45 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.49 released.
+
+	* sd.c: Fix bug when we were deleting the wrong entry if we
+	get an unsupported sector size device.
+
+	* sr.c: Another spelling patch.
+
+Thu Aug 25 09:15:27 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.48 released.
+
+	* Throughout: Use new semantics for request_dma, as appropriate.
+
+	* sr.c: Print correct device number.
+
+Sun Aug 21 17:49:23 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.47 released.
+
+	* NCR5380.c: Add support for LIMIT_TRANSFERSIZE.
+
+	* constants.h: Add prototype for print_Scsi_Cmnd.
+
+	* pas16.c: Some more minor tweaks.  Test for Mediavision board.
+	Allow for disks > 1Gb.  [Drew??]
+
+	* sr.c: Set SCpnt->transfersize.
+
+Tue Aug 16 17:29:35 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.46 released.
+
+	* Throughout: More spelling fixups.
+
+	* buslogic.c: Add a few more fixups from Dave.  Disk translation
+	mainly.
+
+	* pas16.c: Add a few patches (Drew?).
+
+
+Thu Aug 11 20:45:15 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.44 released.
+
+	* hosts.c: Add type casts for scsi_init_malloc.
+
+	* scsicam.c: Add type cast.
+
+Wed Aug 10 19:23:01 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.43 released.
+
+	* Throughout: Spelling cleanups. [??]
+
+	* aha152x.c, NCR53*.c, fdomain.c, g_NCR5380.c, pas16.c, seagate.c,
+	 t128.c: Use request_irq, not irqaction. [??]
+
+	* aha1542.c: Move test for shost before we start to use shost.
+
+	* aha1542.c, aha1740.c, ultrastor.c, wd7000.c: Use new
+	calling sequence for request_irq.
+
+	* buslogic.c: Update from Dave Gentzel.
+
+Tue Aug  9 09:32:59 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.42 released.
+
+	* NCR5380.c: Change NCR5380_print_status to static.
+
+	* seagate.c: A few more bugfixes.  Only Drew knows what they are
+	for.
+
+	* ultrastor.c: Tweak some __asm__ directives so that it works
+	with newer compilers. [??]
+
+Sat Aug  6 21:29:36 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.40 released.
+
+	* NCR5380.c: Return SCSI_RESET_WAKEUP from reset function.
+
+	* aha1542.c: Reset mailbox status after a bus device reset.
+
+	* constants.c: Fix typo (;;).
+
+	* g_NCR5380.c: 
+	* pas16.c:  Correct usage of NCR5380_init.
+
+	* scsi.c: Remove redunant (and unused variables).
+
+	* sd.c: Use memset to clear all of rscsi_disks before we use it.
+
+	* sg.c: Ditto, except for scsi_generics.
+
+	* sr.c: Ditto, except for scsi_CDs.
+
+	* st.c: Initialize STp->device.
+
+	* seagate.c: Fix bug. [Drew]
+
+Thu Aug  4 08:47:27 1994  Eric Youngdale  (eric@andante)
+
+	* Linux 1.1.39 released.
+
+	* Makefile: Fix typo in NCR53C7xx.
+
+	* st.c: Print correct number for device.
+
 Sat Jul  9 15:01:03 1994  Eric Youngdale  (eric@esp22)
 
 	More changes to eventually support loadable modules.  Mainly
diff -u --recursive --new-file v1.1.58/linux/fs/open.c linux/fs/open.c
--- v1.1.58/linux/fs/open.c	Tue Oct 25 18:27:21 1994
+++ linux/fs/open.c	Thu Oct 27 17:15:24 1994
@@ -312,6 +312,7 @@
 		user = inode->i_uid;
 	if (group == (gid_t) -1)
 		group = inode->i_gid;
+	newattrs.ia_mode = inode->i_mode;
 	newattrs.ia_uid = user;
 	newattrs.ia_gid = group;
 	newattrs.ia_ctime = CURRENT_TIME;
@@ -320,14 +321,14 @@
 	 * If the owner has been changed, remove the setuid bit
 	 */
 	if (user != inode->i_uid && inode->i_mode & S_ISUID) {
-		newattrs.ia_mode = inode->i_mode & ~S_ISUID;
+		newattrs.ia_mode &= ~S_ISUID;
 		newattrs.ia_valid |= ATTR_MODE;
 	}
 	/*
 	 * If the group has been changed, remove the setgid bit
 	 */
 	if (group != inode->i_gid && inode->i_mode & S_ISGID) {
-		newattrs.ia_mode = inode->i_mode & ~S_ISGID;
+		newattrs.ia_mode &= ~S_ISGID;
 		newattrs.ia_valid |= ATTR_MODE;
 	}
 	inode->i_dirt = 1;
diff -u --recursive --new-file v1.1.58/linux/kernel/ksyms.c linux/kernel/ksyms.c
--- v1.1.58/linux/kernel/ksyms.c	Sun Oct 23 13:30:13 1994
+++ linux/kernel/ksyms.c	Fri Oct 28 11:25:31 1994
@@ -87,6 +87,8 @@
 	X(namei),
 	X(lnamei),
 	X(open_namei),
+	X(inode_setattr),
+	X(inode_change_ok),
 
 	/* device registration */
 	X(register_chrdev),
diff -u --recursive --new-file v1.1.58/linux/mm/swap.c linux/mm/swap.c
--- v1.1.58/linux/mm/swap.c	Wed Aug 31 10:14:12 1994
+++ linux/mm/swap.c	Fri Oct 28 12:38:45 1994
@@ -638,6 +638,33 @@
 }
 
 /*
+ * Yes, I know this is ugly. Don't tell me.
+ */
+unsigned long __get_dma_pages(int priority, unsigned long order)
+{
+	unsigned long list = 0; 
+	unsigned long result;
+	unsigned long limit = 16*1024*1024;
+	
+	/* if (EISA_bus) limit = ~0UL; */
+	if (priority != GFP_ATOMIC)
+		priority = GFP_BUFFER;
+	for (;;) {
+		result = __get_free_pages(priority, order);
+		if (result < limit) /* covers failure as well */
+			break;
+		*(unsigned long *) result = list;
+		list = result;
+	}
+	while (list) {
+		unsigned long tmp = list;
+		list = *(unsigned long *) list;
+		free_pages(tmp, order);
+	}
+	return result;
+}
+
+/*
  * Show free area list (used inside shift_scroll-lock stuff)
  * We also calculate the percentage fragmentation. We do this by counting the
  * memory on each free list with the exception of the first item on the list.
diff -u --recursive --new-file v1.1.58/linux/net/inet/tcp.c linux/net/inet/tcp.c
--- v1.1.58/linux/net/inet/tcp.c	Fri Oct 28 12:24:04 1994
+++ linux/net/inet/tcp.c	Fri Oct 28 12:54:32 1994
@@ -86,6 +86,9 @@
  *		Alan Cox	:	Reset on closedown bug.
  *	Peter De Schrijver	:	ENOTCONN check missing in tcp_sendto().
  *		Michael Pall	:	Handle select() after URG properly in all cases.
+ *		Michael Pall	:	Undo the last fix in tcp_read_urg() (multi URG PUSH broke rlogin).
+ *		Michael Pall	:	Fix the multi URG PUSH problem in tcp_readable(), select() after URG works now.
+ *		Michael Pall	:	recv(...,MSG_OOB) never blocks in the BSD api.
  *
  *
  * To Fix:
@@ -407,14 +410,29 @@
 				amount--;
 			counted += sum;
 		}
+		/*
+		 * Don't count urg data ... but do it in the right place!
+		 * Consider: "old_data (ptr is here) URG PUSH data"
+		 * The old code would stop at the first push because
+		 * it counted the urg (amount==1) and then does amount--
+		 * *after* the loop.  This means tcp_readable() always
+		 * returned zero if any URG PUSH was in the queue, even
+		 * though there was normal data available. If we subtract
+		 * the urg data right here, we even get it to work for more
+		 * than one URG PUSH skb without normal data.
+		 * This means that select() finally works now with urg data
+		 * in the queue.  Note that rlogin was never affected
+		 * because it doesn't use select(); it uses two processes
+		 * and a blocking read().  And the queue scan in tcp_read()
+		 * was correct.  Mike <pall@rz.uni-karlsruhe.de>
+		 */
+		if (skb->h.th->urg)
+			amount--;	/* don't count urg data */
 		if (amount && skb->h.th->psh) break;
 		skb = skb->next;
 	}
 	while(skb != (struct sk_buff *)&sk->receive_queue);
 
-	if (amount && !sk->urginline && sk->urg_data &&
-	    (sk->urg_seq - sk->copied_seq) <= (counted - sk->copied_seq))
-		amount--;		/* don't count urg data */
 	restore_flags(flags);
 	if(sk->debug)
 	  	printk("got %lu bytes.\n",amount);
@@ -434,42 +452,27 @@
 	switch(sel_type) 
 	{
 		case SEL_IN:
-			if(sk->debug)
-				printk("select in");
 			select_wait(sk->sleep, wait);
-			if(sk->debug)
-				printk("-select out");
 			if (skb_peek(&sk->receive_queue) != NULL) 
 			{
 				if ((sk->state == TCP_LISTEN && tcp_find_established(sk)) || tcp_readable(sk)) 
 				{
 					release_sock(sk);
-					if(sk->debug)
-						printk("-select ok data\n");
 					return(1);
 				}
 			}
 			if (sk->err != 0)	/* Receiver error */
 			{
 				release_sock(sk);
-				if(sk->debug)
-					printk("-select ok error");
 				return(1);
 			}
 			if (sk->shutdown & RCV_SHUTDOWN) 
 			{
 				release_sock(sk);
-				if(sk->debug)
-					printk("-select ok down\n");
 				return(1);
 			} 
-			else 
-			{
-				release_sock(sk);
-				if(sk->debug)
-					printk("-select fail\n");
-				return(0);
-			}
+			release_sock(sk);
+			return(0);
 		case SEL_OUT:
 			select_wait(sk->sleep, wait);
 			if (sk->shutdown & SEND_SHUTDOWN) 
@@ -1405,28 +1408,20 @@
 static int tcp_read_urg(struct sock * sk, int nonblock,
 	     unsigned char *to, int len, unsigned flags)
 {
+#ifdef NOTDEF
 	struct wait_queue wait = { current, NULL };
+#endif
 
 	while (len > 0) 
 	{
 		if (sk->urginline || !sk->urg_data || sk->urg_data == URG_READ)
 			return -EINVAL;
-		sk->inuse=1;
+		sk->inuse = 1;
 		if (sk->urg_data & URG_VALID) 
 		{
 			char c = sk->urg_data;
 			if (!(flags & MSG_PEEK))
-			{
-				/* Skip over urgent data, so tcp_readable() returns
-				   something again.  This in turn makes tcp_select()
-				   happy.  Mike <pall@rz.uni-karlsruhe.de> */
-				if (sk->copied_seq + 1 == sk->urg_seq)
-				{
-					wake_up_interruptible(sk->sleep);
-					sk->copied_seq++;
-				}
 				sk->urg_data = URG_READ;
-			}
 			put_fs_byte(c, to);
 			release_sock(sk);
 			return 1;
@@ -1456,6 +1451,16 @@
 			return 0;
 		}
 
+		/*
+		 * Fixed the recv(..., MSG_OOB) behaviour.  BSD docs and
+		 * the available implementations agree in this case:
+		 * this call should never block, independent of the
+		 * blocking state of the socket.
+		 * Mike <pall@rz.uni-karlsruhe.de>
+		 */
+		return -EAGAIN;
+#ifdef NOTDEF
+		/* remove the loop, if this dead code gets removed! */
 		if (nonblock)
 			return -EAGAIN;
 
@@ -1469,6 +1474,7 @@
 			schedule();
 		remove_wait_queue(sk->sleep, &wait);
 		current->state = TASK_RUNNING;
+#endif
 	}
 	return 0;
 }
