diff -u --recursive --new-file v1.1.48/linux/CREDITS linux/CREDITS
--- v1.1.48/linux/CREDITS	Fri Aug 26 14:44:35 1994
+++ linux/CREDITS	Fri Aug 26 14:12:33 1994
@@ -405,6 +405,14 @@
 S: Muskego, Wisconsin 53150
 S: USA
 
+N: Harald Milz
+E: hm@ix.de
+D: Linux Projects Map, Linux Commercial-HOWTO
+D: general Linux publicity in Germany, vacation port
+D: UUCP and CNEWS binary packages for LST
+S: Editorial Board iX Mag
+S: Helstorfer Str. 7, D-30625 Hannover
+
 N: Corey Minyard
 E: minyard@wf-rch.cirr.com
 D: Sony CDU31A CDROM Driver
diff -u --recursive --new-file v1.1.48/linux/Makefile linux/Makefile
--- v1.1.48/linux/Makefile	Fri Aug 26 14:44:35 1994
+++ linux/Makefile	Fri Aug 26 09:38:45 1994
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 1
-SUBLEVEL = 48
+SUBLEVEL = 49
 
 ARCH = i386
 
diff -u --recursive --new-file v1.1.48/linux/drivers/block/README.sbpcd linux/drivers/block/README.sbpcd
--- v1.1.48/linux/drivers/block/README.sbpcd	Wed Aug  3 09:32:22 1994
+++ linux/drivers/block/README.sbpcd	Tue Aug 30 08:16:13 1994
@@ -1,5 +1,5 @@
-This README belongs to release 2.5 of the SoundBlaster Pro (Matsushita,
-Kotobuki, Panasonic, CreativeLabs) CD-ROM driver for Linux.
+This README belongs to release 2.6 or newer of the SoundBlaster Pro
+(Matsushita, Kotobuki, Panasonic, CreativeLabs) CD-ROM driver for Linux.
 
 The driver is able to drive the whole family of "traditional" IDE-style (that
 has nothing to do with the new "Enhanced IDE" drive standard) Matsushita,
@@ -14,7 +14,8 @@
 ...) and/or with the "no-sound" cards (Panasonic CI-101P, LaserMate,
 WDH-7001C, older Aztech cards, ...).
 It should work too now with the "configurable" interface "Sequoia S-1000",
-which is found on the Spea Media FX sound card.
+which is found on the Spea Media FX sound card. I still need feedback about
+this.
 The interface type has to get configured in /usr/include/linux/sbpcd.h, 
 because the behavior is different.
 
@@ -113,8 +114,10 @@
           sbpcd=0x330,SPEA
       (these strings are case sensitive!).
       This is especially useful if you install a fresh distribution.
-2. Do a "make config" and select "yes" for Matsushita CD-ROM support and for
-   ISO9660 FileSystem support.
+2. "cd /usr/src/linux" and do a "make config" and select "y" for Matsushita
+   CD-ROM support and for ISO9660 FileSystem support. If you do not have a
+   second, third, or fourth controller and/or did not prepare sbpcd2 etc.,
+   do not say "y" to the secondary Matsushita CD-ROM questions.
    SCSI and/or SCSI CD-ROM support is not needed.
 
 3. Then do a "make dep", then make the kernel image ("make zlilo" or else).
@@ -142,8 +145,13 @@
 
 5. Reboot with the new kernel.
 
-You should now be able to do "mount -t iso9660 -o block=2048 /dev/sbpcd /mnt"
-and see the contents of your CD in the /mnt directory, and/or hear music with
+You should now be able to do
+              mkdir /CD
+and 
+              mount -t iso9660 -o ro /dev/sbpcd /CD
+or
+              mount -t iso9660 -o ro,block=2048 /dev/sbpcd /CD
+and see the contents of your CD in the /CD directory, and/or hear music with
 "workman -c /dev/sbpcd &".
 
 
diff -u --recursive --new-file v1.1.48/linux/drivers/block/blk.h linux/drivers/block/blk.h
--- v1.1.48/linux/drivers/block/blk.h	Mon Aug 22 21:57:52 1994
+++ linux/drivers/block/blk.h	Fri Aug 26 11:27:27 1994
@@ -1,10 +1,8 @@
 #ifndef _BLK_H
 #define _BLK_H
 
-#include <linux/major.h>
-#include <linux/sched.h>
+#include <linux/blkdev.h>
 #include <linux/locks.h>
-#include <linux/genhd.h>
 
 /*
  * NR_REQUEST is the number of entries in the request-queue.
@@ -19,26 +17,6 @@
 #define NR_REQUEST	64
 
 /*
- * Ok, this is an expanded form so that we can use the same
- * request for paging requests when that is implemented. In
- * paging, 'bh' is NULL, and the semaphore is used to wait
- * for read/write completion.
- */
-struct request {
-	int dev;		/* -1 if no request */
-	int cmd;		/* READ or WRITE */
-	int errors;
-	unsigned long sector;
-	unsigned long nr_sectors;
-	unsigned long current_nr_sectors;
-	char * buffer;
-	struct semaphore * sem;
-	struct buffer_head * bh;
-	struct buffer_head * bhtail;
-	struct request * next;
-};
-
-/*
  * This is used in the elevator algorithm: Note that
  * reads always go before writes. This is natural: reads
  * are much more time-critical than writes.
@@ -48,17 +26,6 @@
 ((s1)->dev < (s2)->dev || (((s1)->dev == (s2)->dev && \
 (s1)->sector < (s2)->sector)))))
 
-struct blk_dev_struct {
-	void (*request_fn)(void);
-	struct request * current_request;
-};
-
-
-struct sec_size {
-	unsigned block_size;
-	unsigned block_size_bits;
-};
-
 /*
  * These will have to be changed to be aware of different buffer
  * sizes etc.. It actually needs a major cleanup.
@@ -69,15 +36,6 @@
 	((BLOCK_SIZE >> 9)  -  1))
 
 #define SUBSECTOR(block) (CURRENT->current_nr_sectors > 0)
-
-extern struct sec_size * blk_sec[MAX_BLKDEV];
-extern struct blk_dev_struct blk_dev[MAX_BLKDEV];
-extern struct wait_queue * wait_for_request;
-extern void resetup_one_dev(struct gendisk *dev, int drive);
-
-extern int * blk_size[MAX_BLKDEV];
-
-extern int * blksize_size[MAX_BLKDEV];
 
 extern unsigned long hd_init(unsigned long mem_start, unsigned long mem_end);
 extern unsigned long cdu31a_init(unsigned long mem_start, unsigned long mem_end);
diff -u --recursive --new-file v1.1.48/linux/drivers/block/floppy.c linux/drivers/block/floppy.c
--- v1.1.48/linux/drivers/block/floppy.c	Fri Aug 26 14:44:37 1994
+++ linux/drivers/block/floppy.c	Sat Aug 27 17:27:41 1994
@@ -127,7 +127,7 @@
 #define N_DRIVE 8
 #else
 #define N_FDC 1
-#define N_DRIVE 4
+#define N_DRIVE 2
 #endif
 
 #define TYPE(x) ( ((x)>>2) & 0x1f )
@@ -298,11 +298,12 @@
 #define SECTSIZE ( _FD_SECTSIZE(*floppy))
 
 /* Auto-detection: Disk type used until the next media change occurs. */
-struct floppy_struct *current_type[N_DRIVE] = { NULL, NULL, NULL, NULL
+struct floppy_struct *current_type[N_DRIVE] = {
+	NULL, NULL
 #ifdef HAVE_2_CONTROLLERS
-				          ,NULL, NULL, NULL, NULL
+	,NULL, NULL, NULL, NULL, NULL, NULL
 #endif
-					};
+};
 
 /*
  * User-provided type information. current_type points to
@@ -483,7 +484,7 @@
 			UDRS->track = NEED_2_RECAL;
 }
 
-/* selects the fdc and drive, and enables the fdc's its input/dma. */
+/* selects the fdc and drive, and enables the fdc's input/dma. */
 static void set_fdc(int drive)
 {
 	if ( drive >= 0 ){
@@ -544,10 +545,10 @@
 
 static struct timer_list motor_off_timer[N_DRIVE] = {
 	{ NULL, NULL, 0, 0, motor_off_callback },
-	{ NULL, NULL, 0, 1, motor_off_callback },
-	{ NULL, NULL, 0, 2, motor_off_callback },
-	{ NULL, NULL, 0, 3, motor_off_callback }
+	{ NULL, NULL, 0, 1, motor_off_callback }
 #ifdef HAVE_2_CONTROLLERS
+	,{ NULL, NULL, 0, 2, motor_off_callback },
+	{ NULL, NULL, 0, 3, motor_off_callback }
 	,{ NULL, NULL, 0, 4, motor_off_callback },
 	{ NULL, NULL, 0, 5, motor_off_callback },
 	{ NULL, NULL, 0, 6, motor_off_callback },
diff -u --recursive --new-file v1.1.48/linux/drivers/block/hd.c linux/drivers/block/hd.c
--- v1.1.48/linux/drivers/block/hd.c	Fri Aug 26 14:44:37 1994
+++ linux/drivers/block/hd.c	Mon Aug 29 13:58:19 1994
@@ -307,9 +307,11 @@
 		if (NULL != (hd_ident_info[dev] = (struct hd_driveid *)kmalloc(sizeof(id),GFP_ATOMIC)))
 			*hd_ident_info[dev] = id;
 		
-		/* Quantum drives go weird at this point, so reset them! In */
-		/* fact, do a reset in any case in case we changed the geometry */
-		special_op[dev] += reset = 1;
+		/* Quantum drives go weird at this point, so reset them! */
+		/* In fact, we should probably do a reset in any case in */
+		/* case we changed the geometry */
+		if (!strncmp(id.model, "QUANTUM", 7))
+			special_op[dev] += reset = 1;
 
 		/* flush remaining 384 (reserved/undefined) ID bytes: */
 		insw(HD_DATA,(char *)&id,sizeof(id)/2);
@@ -367,7 +369,8 @@
 
 	outb_p(4,HD_CMD);
 	for(i = 0; i < 1000; i++) nop();
-	outb(hd_info[0].ctl & 0x0f ,HD_CMD);
+	outb_p(hd_info[0].ctl & 0x0f,HD_CMD);
+	for(i = 0; i < 1000; i++) nop();
 	if (drive_busy())
 		printk("HD-controller still busy\n");
 	if ((hd_error = inb(HD_ERROR)) != 1)
diff -u --recursive --new-file v1.1.48/linux/drivers/block/sbpcd.c linux/drivers/block/sbpcd.c
--- v1.1.48/linux/drivers/block/sbpcd.c	Thu Aug 11 20:43:02 1994
+++ linux/drivers/block/sbpcd.c	Tue Aug 30 08:16:13 1994
@@ -5,7 +5,7 @@
  *            and for "no-sound" interfaces like Lasermate and the
  *            Panasonic CI-101P.
  *
- *  NOTE:     This is release 2.5.
+ *  NOTE:     This is release 2.6.
  *            It works with my SbPro & drive CR-521 V2.11 from 2/92
  *            and with the new CR-562-B V0.75 on a "naked" Panasonic
  *            CI-101P interface. And vice versa. 
@@ -119,13 +119,15 @@
  *
  *  2.4  Use different names for device registering.
  *       
- *  2.5  Added "#ifdef EJECT" code (default: enabled) to automatically eject
+ *  2.5  Added "#if EJECT" code (default: enabled) to automatically eject
  *       the tray during last call to "sbpcd_release".
- *       Added "#ifdef JUKEBOX" code (default: disabled) to automatically eject
+ *       Added "#if JUKEBOX" code (default: disabled) to automatically eject
  *       the tray during call to "sbpcd_open" if no disk is in.
  *       Turn on the CD volume of "compatible" sound cards, too; just define
  *       SOUND_BASE (in sbpcd.h) accordingly (default: disabled).
  *
+ *  2.6  Nothing new.  
+ *       
  *  TODO
  *
  *     disk change detection
@@ -201,7 +203,7 @@
 
 #include "blk.h"
 
-#define VERSION "2.5 Eberhard Moenkeberg <emoenke@gwdg.de>"
+#define VERSION "2.6 Eberhard Moenkeberg <emoenke@gwdg.de>"
 
 #define SBPCD_DEBUG
 
@@ -217,7 +219,7 @@
 /*
  * still testing around...
  */
-#define JUKEBOX 0 /* tray control: eject if no disk is in */
+#define JUKEBOX 0 /* tray control: eject tray if no disk is in */
 #define EJECT 1 /* tray control: eject tray after last use */
 #define LONG_TIMING 0 /* test against timeouts with "gold" CDs on CR-521 */
 #define MANY_SESSION 0 /* this will conflict with "true" multi-session! */
@@ -2561,7 +2563,7 @@
 
     case CDROMSTART:  /* Spin up the drive */
       DPRINTF((DBG_IOC,"SBPCD: ioctl: CDROMSTART entered.\n"));
-      i=xx_SpinUp();
+      xx_SpinUp();
       DriveStruct[d].audio_state=0;
       return (0);
       
@@ -3321,7 +3323,7 @@
 	  do
 	    i=yy_LockDoor(0);
 	  while (i!=0);
-#ifdef EJECT
+#if EJECT
 	  if (new_drive) yy_SpinDown();
 #endif
 	}
diff -u --recursive --new-file v1.1.48/linux/drivers/net/ni52.c linux/drivers/net/ni52.c
--- v1.1.48/linux/drivers/net/ni52.c	Fri Aug 26 14:44:39 1994
+++ linux/drivers/net/ni52.c	Fri Aug 26 09:37:38 1994
@@ -903,7 +903,7 @@
 }
 
 /**********************************************************
- * I never got this error , (which should occure if someone 
+ * I never got this error , (which should occur if someone 
  * wants to blast your machine) so I couldn't debug it for now.
  * but we _try_ to fix the receiver not ready int.
  */
@@ -1095,7 +1095,7 @@
 {
   struct priv *p = (struct priv *) dev->priv;
 #ifdef DEBUG3
-  printk("ni52: errs, crc %d, align %d, ressource %d, ovrn %d.\n",(int) p->scb->crc_errs,(int) p->scb->aln_errs,(int) p->scb->rsc_errs,(int) p->scb->ovrn_errs); 
+  printk("ni52: errs, crc %d, align %d, resource %d, ovrn %d.\n",(int) p->scb->crc_errs,(int) p->scb->aln_errs,(int) p->scb->rsc_errs,(int) p->scb->ovrn_errs); 
 #endif
   return &p->stats;
 }
@@ -1108,7 +1108,7 @@
 */
 
   if(!num_addrs)
-    printk("%s: Currently, the Ni52 driver doesn't support promiscous or multicast mode.\n",dev->name);
+    printk("%s: Currently, the Ni52 driver doesn't support promiscuous or multicast mode.\n",dev->name);
 
 #if 0
   p->scb->cmd = CUC_SUSPEND;
diff -u --recursive --new-file v1.1.48/linux/drivers/net/ni52.h linux/drivers/net/ni52.h
--- v1.1.48/linux/drivers/net/ni52.h	Fri Aug 26 14:44:39 1994
+++ linux/drivers/net/ni52.h	Fri Aug 26 09:37:38 1994
@@ -50,7 +50,7 @@
  */
 struct iscp_struct
 {
-  unsigned char  busy;          /* 586 clears after succesful init */
+  unsigned char  busy;          /* 586 clears after successful init */
   unsigned char  zero_dummy;    /* hast to be zero */
   unsigned short scb_offset;    /* pointeroffset to the scb_base */
   char          *scb_base;      /* base-address of all 16-bit offsets */
@@ -72,7 +72,7 @@
 };
 
 /*
- * possbile command values for the command word
+ * possible command values for the command word
  */
 #define RUC_MASK	0x0070	/* mask for RU commands */
 #define RUC_NOP		0x0000	/* NOP-command */
@@ -95,11 +95,11 @@
 #define ACK_RNR		0x1000	/* ack. STAT_RNR */
 
 /*
- * possbile status values for the status word
+ * possible status values for the status word
  */
 #define STAT_MASK	0xf000	/* mask for cause of interrupt */
 #define STAT_CX		0x8000	/* CU finished cmd with its I bit set */
-#define STAT_FR		0x4000	/* RU finished receiveing a frame */
+#define STAT_FR		0x4000	/* RU finished receiving a frame */
 #define STAT_CNA	0x2000	/* CU left active state */
 #define STAT_RNR	0x1000	/* RU left ready state */
 
@@ -130,7 +130,7 @@
 #define RFD_LAST     0x8000	/* last: last rfd in the list */
 #define RFD_SUSP     0x4000	/* last: suspend RU after  */
 #define RFD_ERRMASK  0x0fe1     /* status: errormask */
-#define RFD_MATCHADD 0x0002     /* status: Destinationaddress !matchs IA */
+#define RFD_MATCHADD 0x0002     /* status: Destinationaddress !matches IA */
 #define RFD_RNR      0x0200	/* status: receiver out of resources */
 
 /*
@@ -140,7 +140,7 @@
 {
   unsigned short status;	/* status word,number of used bytes in buff */
   unsigned short next;		/* pointeroffset to next RBD */
-  char          *buffer;	/* recevie buffer address pointer */
+  char          *buffer;	/* receive buffer address pointer */
   unsigned short size;		/* size of this buffer */
   unsigned short zero_dummy;    /* dummy */
 };
@@ -180,7 +180,7 @@
  */
 struct nop_cmd_struct
 {
-  unsigned short cmd_status;	/* statius of this command */
+  unsigned short cmd_status;	/* status of this command */
   unsigned short cmd_cmd;       /* the command itself (+bits) */
   unsigned short cmd_link;      /* offsetpointer to next command */
 };
@@ -247,7 +247,7 @@
 #define TCMD_MAXCOLLMASK 0x000f
 #define TCMD_MAXCOLL     0x0020
 #define TCMD_HEARTBEAT   0x0040
-#define TCMD_DEFFERED    0x0080
+#define TCMD_DEFERRED    0x0080
 #define TCMD_UNDERRUN    0x0100
 #define TCMD_LOSTCTS     0x0200
 #define TCMD_NOCARRIER   0x0400
@@ -262,7 +262,7 @@
 };
 
 #define TDR_LNK_OK	0x8000	/* No link problem identified */
-#define TDR_XCVR_PRB	0x4000	/* indiactes a transceiver problem */
+#define TDR_XCVR_PRB	0x4000	/* indicates a transceiver problem */
 #define TDR_ET_OPN	0x2000	/* open, no correct termination */
 #define TDR_ET_SRT	0x1000	/* TDR detected a short circuit */
 #define TDR_TIMEMASK	0x07ff	/* mask for the time field */
diff -u --recursive --new-file v1.1.48/linux/drivers/net/ni65.c linux/drivers/net/ni65.c
--- v1.1.48/linux/drivers/net/ni65.c	Fri Aug 26 14:44:39 1994
+++ linux/drivers/net/ni65.c	Fri Aug 26 09:37:38 1994
@@ -298,7 +298,7 @@
      }
    }
 
-  return 0; /* we've found everyting */
+  return 0; /* we've found everything */
 }
 
 /* 
diff -u --recursive --new-file v1.1.48/linux/drivers/net/ni65.h linux/drivers/net/ni65.h
--- v1.1.48/linux/drivers/net/ni65.h	Fri Aug 26 14:44:39 1994
+++ linux/drivers/net/ni65.h	Fri Aug 26 09:37:38 1994
@@ -21,7 +21,7 @@
 #define CSR0_CERR	0x2000	/* Collision Error (RC) */
 #define CSR0_MISS	0x1000	/* Missed packet (RC) */
 #define CSR0_MERR	0x0800	/* Memory Error (RC) */ 
-#define CSR0_RINT	0x0400	/* Reciever Interrupt (RC) */
+#define CSR0_RINT	0x0400	/* Receiver Interrupt (RC) */
 #define CSR0_TINT       0x0200	/* Transmit Interrupt (RC) */ 
 #define CSR0_IDON	0x0100	/* Initialization Done (RC) */
 #define CSR0_INTR	0x0080	/* Interrupt Flag (R) */
@@ -45,7 +45,7 @@
 #define M_DTCR		0x0008	/* Disable Transmit CRC) */
 #define M_LOOP		0x0004	/* Loopback */
 #define M_DTX		0x0002	/* Disable the Transmitter */ 
-#define M_DRX		0x0001  /* Disable the Reciever */
+#define M_DRX		0x0001  /* Disable the Receiver */
 
 
 /*
diff -u --recursive --new-file v1.1.48/linux/drivers/scsi/sd.c linux/drivers/scsi/sd.c
--- v1.1.48/linux/drivers/scsi/sd.c	Sun Aug 21 17:48:29 1994
+++ linux/drivers/scsi/sd.c	Sat Aug 27 17:31:44 1994
@@ -798,7 +798,6 @@
 
 static int sd_init_onedisk(int i)
 {
-  int j = 0;
   unsigned char cmd[10];
   unsigned char *buffer;
   char spintime;
@@ -969,7 +968,7 @@
 	    rscsi_disks[i].capacity = 0;
 	  } else {
 	    printk ("scsi : deleting disk entry.\n");
-	    rscsi_disks[j].device = NULL;
+	    rscsi_disks[i].device = NULL;
 	    sd_template.nr_dev--;
 	    return i;
 	  };
diff -u --recursive --new-file v1.1.48/linux/drivers/scsi/sr.c linux/drivers/scsi/sr.c
--- v1.1.48/linux/drivers/scsi/sr.c	Fri Aug 26 14:44:40 1994
+++ linux/drivers/scsi/sr.c	Fri Aug 26 09:37:38 1994
@@ -629,7 +629,7 @@
 #endif
 
 /* Some dumb host adapters can speed transfers by knowing the
- * minimum tranfersize in advance.
+ * minimum transfersize in advance.
  *
  * We shouldn't disconnect in the middle of a sector, but the cdrom
  * sector size can be larger than the size of a buffer and the
Only in v1.1.48/linux/drivers/sound: dma.h
diff -u --recursive --new-file v1.1.48/linux/fs/buffer.c linux/fs/buffer.c
--- v1.1.48/linux/fs/buffer.c	Mon Aug 15 11:47:08 1994
+++ linux/fs/buffer.c	Fri Aug 26 08:28:33 1994
@@ -1061,7 +1061,7 @@
 	buffermem += PAGE_SIZE;
 	bh->b_this_page = tmp;
 	mem_map[MAP_NR(address)]++;
-	buffer_pages[address >> PAGE_SHIFT] = bh;
+	buffer_pages[MAP_NR(address)] = bh;
 	read_buffers(arr,block);
 	while (block-- > 0)
 		brelse(arr[block]);
@@ -1190,7 +1190,7 @@
 			break;
 	}
 	free_list[isize] = bh;
-	buffer_pages[page >> PAGE_SHIFT] = bh;
+	buffer_pages[MAP_NR(page)] = bh;
 	tmp->b_this_page = bh;
 	wake_up(&buffer_wait);
 	buffermem += PAGE_SIZE;
@@ -1234,7 +1234,7 @@
 		put_unused_buffer_head(p);
 	} while (tmp != bh);
 	buffermem -= PAGE_SIZE;
-	buffer_pages[page >> PAGE_SHIFT] = NULL;
+	buffer_pages[MAP_NR(page)] = NULL;
 	free_page(page);
 	return !mem_map[MAP_NR(page)];
 }
@@ -1538,7 +1538,7 @@
 			break;
 	}
 	buffermem += PAGE_SIZE;
-	buffer_pages[page >> PAGE_SHIFT] = bh;
+	buffer_pages[MAP_NR(page)] = bh;
 	bh->b_this_page = tmp;
 	while (nblock-- > 0)
 		brelse(arr[nblock]);
@@ -1605,9 +1605,9 @@
 						     sizeof(struct buffer_head *));
 
 
-	buffer_pages = (struct buffer_head **) vmalloc((high_memory >>PAGE_SHIFT) * 
+	buffer_pages = (struct buffer_head **) vmalloc(MAP_NR(high_memory) * 
 						     sizeof(struct buffer_head *));
-	for (i = 0 ; i < high_memory >> PAGE_SHIFT ; i++)
+	for (i = 0 ; i < MAP_NR(high_memory) ; i++)
 		buffer_pages[i] = NULL;
 
 	for (i = 0 ; i < nr_hash ; i++)
diff -u --recursive --new-file v1.1.48/linux/fs/inode.c linux/fs/inode.c
--- v1.1.48/linux/fs/inode.c	Mon Aug 15 11:47:09 1994
+++ linux/fs/inode.c	Mon Aug 29 15:16:28 1994
@@ -417,6 +417,7 @@
 	inode->i_uid = current->fsuid;
 	inode->i_gid = current->fsgid;
 	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+	inode->i_blksize = PAGE_SIZE;
 	return inode;
 }
 
diff -u --recursive --new-file v1.1.48/linux/fs/msdos/dir.c linux/fs/msdos/dir.c
--- v1.1.48/linux/fs/msdos/dir.c	Sun Aug  7 03:30:41 1994
+++ linux/fs/msdos/dir.c	Fri Aug 26 11:29:38 1994
@@ -85,22 +85,20 @@
 			for (i = last = 0; i < 8; i++) {
 				if (!(c = de->name[i])) break;
 				if (c >= 'A' && c <= 'Z') c += 32;
-				if (c != ' '){
+				if (c != ' ')
 					last = i+1;
-					*ptname++ = c;
-				}
+				ptname[i] = c;
 			}
 			i = last;
-			*ptname++ = '.';
+			ptname[i] = '.';
 			i++;
 			for (i2 = 0; i2 < 3; i2++) {
 				if (!(c = de->ext[i2])) break;
 				if (c >= 'A' && c <= 'Z') c += 32;
-				if (c != ' '){
+				if (c != ' ')
 					last = i+1;
-					*ptname++ = c;
-				}
-				i++;
+				ptname[i] = c;
+                               i++;
 			}
 			if ((i = last) != 0) {
 				if (!strcmp(de->name,MSDOS_DOT))
diff -u --recursive --new-file v1.1.48/linux/include/linux/blkdev.h linux/include/linux/blkdev.h
--- v1.1.48/linux/include/linux/blkdev.h	Thu Jan  1 02:00:00 1970
+++ linux/include/linux/blkdev.h	Fri Aug 26 09:37:37 1994
@@ -0,0 +1,47 @@
+#ifndef _LINUX_BLKDEV_H
+#define _LINUX_BLKDEV_H
+
+#include <linux/major.h>
+#include <linux/sched.h>
+#include <linux/genhd.h>
+
+/*
+ * Ok, this is an expanded form so that we can use the same
+ * request for paging requests when that is implemented. In
+ * paging, 'bh' is NULL, and the semaphore is used to wait
+ * for read/write completion.
+ */
+struct request {
+	int dev;		/* -1 if no request */
+	int cmd;		/* READ or WRITE */
+	int errors;
+	unsigned long sector;
+	unsigned long nr_sectors;
+	unsigned long current_nr_sectors;
+	char * buffer;
+	struct semaphore * sem;
+	struct buffer_head * bh;
+	struct buffer_head * bhtail;
+	struct request * next;
+};
+
+struct blk_dev_struct {
+	void (*request_fn)(void);
+	struct request * current_request;
+};
+
+struct sec_size {
+	unsigned block_size;
+	unsigned block_size_bits;
+};
+
+extern struct sec_size * blk_sec[MAX_BLKDEV];
+extern struct blk_dev_struct blk_dev[MAX_BLKDEV];
+extern struct wait_queue * wait_for_request;
+extern void resetup_one_dev(struct gendisk *dev, int drive);
+
+extern int * blk_size[MAX_BLKDEV];
+
+extern int * blksize_size[MAX_BLKDEV];
+
+#endif
diff -u --recursive --new-file v1.1.48/linux/include/linux/types.h linux/include/linux/types.h
--- v1.1.48/linux/include/linux/types.h	Sun Aug 21 17:48:40 1994
+++ linux/include/linux/types.h	Fri Aug 26 13:09:49 1994
@@ -44,8 +44,11 @@
 typedef unsigned short nlink_t;
 typedef int daddr_t;
 typedef long off_t;
+
+#ifndef __STRICT_ANSI__
 #define _LOFF_T
 typedef long long loff_t;
+#endif
 
 /* bsd */
 typedef unsigned char u_char;
diff -u --recursive --new-file v1.1.48/linux/kernel/ksyms.c linux/kernel/ksyms.c
--- v1.1.48/linux/kernel/ksyms.c	Fri Aug 26 14:44:45 1994
+++ linux/kernel/ksyms.c	Fri Aug 26 09:37:38 1994
@@ -10,6 +10,7 @@
 #include <linux/autoconf.h>
 #include <linux/kernel.h>
 #include <linux/fs.h>
+#include <linux/blkdev.h>
 #include <linux/sched.h>
 #include <linux/mm.h>
 #include <linux/malloc.h>
@@ -91,6 +92,14 @@
 	X(register_blkdev),
 	X(unregister_blkdev),
 
+	/* block device driver support */
+	X(block_read),
+	X(block_write),
+	X(block_fsync),
+	X(wait_for_request),
+	X(blksize_size),
+	X(blk_dev),
+	
 	/* Module creation of serial units */
 	X(register_serial),
 	X(unregister_serial),
diff -u --recursive --new-file v1.1.48/linux/kernel/sched.c linux/kernel/sched.c
--- v1.1.48/linux/kernel/sched.c	Sun Aug 21 17:48:40 1994
+++ linux/kernel/sched.c	Fri Aug 26 10:25:33 1994
@@ -286,7 +286,8 @@
 			}
 		}
 		if (!tmp->next) {
-			printk("wait_queue is bad (eip = %08lx)\n",((unsigned long *) q)[-1]);
+			printk("wait_queue is bad (eip = %p)\n",
+				__builtin_return_address(0));
 			printk("        q = %p\n",q);
 			printk("       *q = %p\n",*q);
 			printk("      tmp = %p\n",tmp);
@@ -312,7 +313,8 @@
 			}
 		}
 		if (!tmp->next) {
-			printk("wait_queue is bad (eip = %08lx)\n",((unsigned long *) q)[-1]);
+			printk("wait_queue is bad (eip = %p)\n",
+				__builtin_return_address(0));
 			printk("        q = %p\n",q);
 			printk("       *q = %p\n",*q);
 			printk("      tmp = %p\n",tmp);
@@ -377,8 +379,8 @@
 
 #if SLOW_BUT_DEBUGGING_TIMERS
 	if (timer->next || timer->prev) {
-		printk("add_timer() called with non-zero list from %08lx\n",
-			((unsigned long *) &timer)[-1]);
+		printk("add_timer() called with non-zero list from %p\n",
+			__builtin_return_address(0));
 		return;
 	}
 #endif
@@ -416,8 +418,8 @@
 		}
 	}
 	if (timer->next || timer->prev)
-		printk("del_timer() called from %08lx with timer not initialized\n",
-			((unsigned long *) &timer)[-1]);
+		printk("del_timer() called from %p with timer not initialized\n",
+			__builtin_return_address(0));
 	restore_flags(flags);
 	return 0;
 #else	
diff -u --recursive --new-file v1.1.48/linux/mm/kmalloc.c linux/mm/kmalloc.c
--- v1.1.48/linux/mm/kmalloc.c	Tue Aug  9 17:20:38 1994
+++ linux/mm/kmalloc.c	Fri Aug 26 10:27:07 1994
@@ -171,8 +171,8 @@
 	if (intr_count && priority != GFP_ATOMIC) {
 		static int count = 0;
 		if (++count < 5) {
-			printk("kmalloc called nonatomically from interrupt %08lx\n",
-				((unsigned long *)&size)[-1]);
+			printk("kmalloc called nonatomically from interrupt %p\n",
+				__builtin_return_address(0));
 			priority = GFP_ATOMIC;
 		}
 	}
diff -u --recursive --new-file v1.1.48/linux/mm/swap.c linux/mm/swap.c
--- v1.1.48/linux/mm/swap.c	Sun Aug 21 17:48:40 1994
+++ linux/mm/swap.c	Fri Aug 26 10:26:18 1994
@@ -618,8 +618,8 @@
 	if (intr_count && priority != GFP_ATOMIC) {
 		static int count = 0;
 		if (++count < 5) {
-			printk("gfp called nonatomically from interrupt %08lx\n",
-				((unsigned long *)&priority)[-1]);
+			printk("gfp called nonatomically from interrupt %p\n",
+				__builtin_return_address(0));
 			priority = GFP_ATOMIC;
 		}
 	}
Only in v1.1.48/linux/net/inet: ncp.h
diff -u --recursive --new-file v1.1.48/linux/net/inet/skbuff.c linux/net/inet/skbuff.c
--- v1.1.48/linux/net/inet/skbuff.c	Sat Aug  6 21:32:07 1994
+++ linux/net/inet/skbuff.c	Fri Aug 26 10:30:38 1994
@@ -9,13 +9,13 @@
  *	as published by the Free Software Foundation; either version
  *	2 of the License, or (at your option) any later version.
  */
- 
+
 /*
  *	Note: There are a load of cli()/sti() pairs protecting the net_memory type
  *	variables. Without them for some reason the ++/-- operators do not come out
  *	atomic. Also with gcc 2.4.5 these counts can come out wrong anyway - use 2.5.8!!
  */
- 
+
 #include <linux/config.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
@@ -40,7 +40,7 @@
 /*
  *	Resource tracking variables
  */
- 
+
 volatile unsigned long net_memory = 0;
 volatile unsigned long net_skbcount = 0;
 volatile unsigned long net_locked = 0;
@@ -62,7 +62,7 @@
 
 /*
  *	Debugging paranoia. Can go later when this crud stack works
- */ 
+ */
 
 int skb_check(struct sk_buff *skb, int head, int line, char *file)
 {
@@ -159,7 +159,6 @@
 /*
  *	Insert an sk_buff at the start of a list.
  */
-    
 void skb_queue_head(struct sk_buff_head *list_,struct sk_buff *newsk)
 {
 	unsigned long flags;
@@ -180,14 +179,13 @@
 
 	newsk->next->prev = newsk;
 	newsk->prev->next = newsk;
-	
+
 	restore_flags(flags);
 }
 
 /*
  *	Insert an sk_buff at the end of a list.
  */
- 
 void skb_queue_tail(struct sk_buff_head *list_, struct sk_buff *newsk)
 {
 	unsigned long flags;
@@ -227,13 +225,13 @@
 	cli();
 
 	IS_SKB_HEAD(list);
-	
+
 	result = list->next;
 	if (result == list) {
 		restore_flags(flags);
 		return NULL;
 	}
-	
+
 	result->next->prev = list;
 	list->next = result->next;
 
@@ -242,14 +240,13 @@
 
 	restore_flags(flags);
 
-	IS_SKB(result);	
+	IS_SKB(result);
 	return result;
 }
 
 /*
  *	Insert a packet before another one in a list.
  */
- 
 void skb_insert(struct sk_buff *old, struct sk_buff *newsk)
 {
 	unsigned long flags;
@@ -270,14 +267,13 @@
 	newsk->prev = old->prev;
 	old->prev = newsk;
 	newsk->prev->next = newsk;
-	
+
 	restore_flags(flags);
 }
 
 /*
  *	Place a packet after a given packet in a list.
  */
- 
 void skb_append(struct sk_buff *old, struct sk_buff *newsk)
 {
 	unsigned long flags;
@@ -309,7 +305,6 @@
  *	MUST EXIST when you unlink. Thus a list must have its contents unlinked
  *	_FIRST_.
  */
- 
 void skb_unlink(struct sk_buff *skb)
 {
 	unsigned long flags;
@@ -329,7 +324,7 @@
 #ifdef PARANOID_BUGHUNT_MODE	/* This is legal but we sometimes want to watch it */
 	else
 		printk("skb_unlink: not a linked element\n");
-#endif		
+#endif
 	restore_flags(flags);
 }
 
@@ -340,26 +335,26 @@
 
 void kfree_skb(struct sk_buff *skb, int rw)
 {
-	if (skb == NULL) 
+	if (skb == NULL)
 	{
-		printk("kfree_skb: skb = NULL (from %08lx)\n",
-			((unsigned long *) &skb)[-1]);
+		printk("kfree_skb: skb = NULL (from %p)\n",
+			__builtin_return_address(0));
 		return;
   	}
 	IS_SKB(skb);
-	if (skb->lock) 
+	if (skb->lock)
 	{
 		skb->free = 3;    /* Free when unlocked */
 		net_free_locked++;
 		return;
   	}
   	if (skb->free == 2)
-		printk("Warning: kfree_skb passed an skb that nobody set the free flag on! (from %08lx)\n",
-			((unsigned long *) &skb)[-1]);
+		printk("Warning: kfree_skb passed an skb that nobody set the free flag on! (from %p)\n",
+			__builtin_return_address(0));
 	if (skb->next)
-	 	printk("Warning: kfree_skb passed an skb still on a list (from %08lx).\n",
-			((unsigned long *) &skb)[-1]);
-	if (skb->sk) 
+	 	printk("Warning: kfree_skb passed an skb still on a list (from %p).\n",
+			__builtin_return_address(0));
+	if (skb->sk)
 	{
 	        if(skb->sk->prot!=NULL)
 		{
@@ -378,16 +373,16 @@
 				skb->sk->wmem_alloc-=skb->mem_len;
 			if(!skb->sk->dead)
 				skb->sk->write_space(skb->sk);
-#ifdef CONFIG_SLAVE_BALANCING				
+#ifdef CONFIG_SLAVE_BALANCING
 			if(skb->in_dev_queue && skb->dev!=NULL)
 				skb->dev->pkt_queue--;
 #endif
 			kfree_skbmem(skb,skb->mem_len);
 		}
-	} 
-	else 
+	}
+	else
 	{
-#ifdef CONFIG_SLAVE_BALANCING				
+#ifdef CONFIG_SLAVE_BALANCING
 		if(skb->in_dev_queue && skb->dev!=NULL)
 			skb->dev->pkt_queue--;
 #endif
@@ -399,45 +394,44 @@
  *	Allocate a new skbuff. We do this ourselves so we can fill in a few 'private'
  *	fields and also do memory statistics to find all the [BEEP] leaks.
  */
- 
- struct sk_buff *alloc_skb(unsigned int size,int priority)
- {
- 	struct sk_buff *skb;
- 	unsigned long flags;
- 		
- 	if (intr_count && priority!=GFP_ATOMIC) {
+struct sk_buff *alloc_skb(unsigned int size,int priority)
+{
+	struct sk_buff *skb;
+	unsigned long flags;
+
+	if (intr_count && priority!=GFP_ATOMIC) {
 		static int count = 0;
 		if (++count < 5) {
-			printk("alloc_skb called nonatomically from interrupt %08lx\n",
-				((unsigned long *)&size)[-1]);
+			printk("alloc_skb called nonatomically from interrupt %p\n",
+				__builtin_return_address(0));
 			priority = GFP_ATOMIC;
 		}
- 	}
- 	
- 	size+=sizeof(struct sk_buff);
- 	skb=(struct sk_buff *)kmalloc(size,priority);
- 	if (skb == NULL)
- 	{
- 		net_fails++;
- 		return NULL;
- 	}
+	}
+
+	size+=sizeof(struct sk_buff);
+	skb=(struct sk_buff *)kmalloc(size,priority);
+	if (skb == NULL)
+	{
+		net_fails++;
+		return NULL;
+	}
 #ifdef PARANOID_BUGHUNT_MODE
 	if(skb->magic_debug_cookie == SK_GOOD_SKB)
 		printk("Kernel kmalloc handed us an existing skb (%p)\n",skb);
-#endif		 	
+#endif
 
 	net_allocs++;
-	
- 	skb->free = 2;	/* Invalid so we pick up forgetful users */
+
+	skb->free = 2;	/* Invalid so we pick up forgetful users */
 	skb->lock = 0;
 	skb->pkt_type = PACKET_HOST;	/* Default type */
- 	skb->truesize = size;
- 	skb->mem_len = size;
- 	skb->mem_addr = skb;
-#ifdef CONFIG_SLAVE_BALANCING 	
- 	skb->in_dev_queue = 0;
-#endif 	
- 	skb->fraglist = NULL;
+	skb->truesize = size;
+	skb->mem_len = size;
+	skb->mem_addr = skb;
+#ifdef CONFIG_SLAVE_BALANCING
+	skb->in_dev_queue = 0;
+#endif
+	skb->fraglist = NULL;
 	skb->prev = skb->next = NULL;
 	skb->link3 = NULL;
 	skb->sk = NULL;
@@ -446,19 +440,19 @@
 	skb->localroute = 0;
 	save_flags(flags);
 	cli();
- 	net_memory += size;
- 	net_skbcount++;
- 	restore_flags(flags);
+	net_memory += size;
+	net_skbcount++;
+	restore_flags(flags);
 #if CONFIG_SKB_CHECK
 	skb->magic_debug_cookie = SK_GOOD_SKB;
 #endif
- 	skb->users = 0;
- 	return skb;
+	skb->users = 0;
+	return skb;
 }
 
 /*
  *	Free an skbuff by memory
- */ 	
+ */
 
 void kfree_skbmem(struct sk_buff *skb,unsigned size)
 {
@@ -469,11 +463,11 @@
 	if(skb->in_dev_queue && skb->dev!=NULL)
 		skb->dev->pkt_queue--;
 	restore_flags(flags);
-#endif	
+#endif
 	IS_SKB(skb);
 	if(size!=skb->truesize)
 		printk("kfree_skbmem: size mismatch.\n");
-		
+
 	if(skb->magic_debug_cookie == SK_GOOD_SKB)
 	{
 		save_flags(flags);
@@ -498,13 +492,13 @@
 {
 	struct sk_buff *n;
 	unsigned long offset;
-	
+
 	n=alloc_skb(skb->mem_len-sizeof(struct sk_buff),priority);
 	if(n==NULL)
 		return NULL;
-		
+
 	offset=((char *)n)-((char *)skb);
-		
+
 	memcpy(n->data,skb->data,skb->mem_len-sizeof(struct sk_buff));
 	n->len=skb->len;
 	n->link3=NULL;
@@ -528,8 +522,8 @@
 	n->pkt_type=skb->pkt_type;
 	return n;
 }
-	
-	
+
+
 /*
  *     Skbuff device locking
  */
@@ -560,7 +554,7 @@
 	cli();
 	if(skb->lock==1)
 		net_locked--;
-		
+
 	if (!--skb->lock && (skb->free == 1 || skb->free == 3))
 	{
 		restore_flags(flags);
diff -u --recursive --new-file v1.1.48/linux/net/inet/tcp.c linux/net/inet/tcp.c
--- v1.1.48/linux/net/inet/tcp.c	Sun Aug 21 17:48:42 1994
+++ linux/net/inet/tcp.c	Mon Aug 29 18:30:28 1994
@@ -365,7 +365,7 @@
 		sum = skb->len -(counted - skb->h.th->seq);	/* Length - header but start from where we are up to (avoid overlaps) */
 		if (skb->h.th->syn)
 			sum++;
-		if (sum >= 0) 
+		if (sum > 0) 
 		{					/* Add it up, move on */
 			amount += sum;
 			if (skb->h.th->syn) 
@@ -3389,7 +3389,6 @@
  *  If we are in FINWAIT-2, a received FIN moves us to TIME-WAIT.
  *
  */
- 
 static int tcp_fin(struct sk_buff *skb, struct sock *sk, struct tcphdr *th, 
 	 unsigned long saddr, struct device *dev)
 {
