## Automatically generated incremental diff
## From:   linux-2.4.22-bk45
## To:     linux-2.4.22-bk46
## Robot:  $Id: make-incremental-diff,v 1.11 2002/02/20 02:59:33 hpa Exp $

diff -urN linux-2.4.22-bk45/Documentation/video4linux/meye.txt linux-2.4.22-bk46/Documentation/video4linux/meye.txt
--- linux-2.4.22-bk45/Documentation/video4linux/meye.txt	2003-11-04 03:29:59.000000000 -0800
+++ linux-2.4.22-bk46/Documentation/video4linux/meye.txt	2003-11-04 03:31:52.000000000 -0800
@@ -33,6 +33,11 @@
 driver however), but things are not moving very fast (see
 http://r-engine.sourceforge.net/) (PCI vendor/device is 0x10cf/0x2011).
 
+There is a forth model connected on the USB bus in TR1* Vaio laptops.
+This camera is not supported at all by the current driver, in fact
+little information if any is available for this camera
+(USB vendor/device is 0x054c/0x0107).
+
 Driver options:
 ---------------
 
diff -urN linux-2.4.22-bk45/Makefile linux-2.4.22-bk46/Makefile
--- linux-2.4.22-bk45/Makefile	2003-11-04 03:29:59.000000000 -0800
+++ linux-2.4.22-bk46/Makefile	2003-11-04 03:31:52.000000000 -0800
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 22
-EXTRAVERSION = -bk45
+EXTRAVERSION = -bk46
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
diff -urN linux-2.4.22-bk45/drivers/hotplug/Config.in linux-2.4.22-bk46/drivers/hotplug/Config.in
--- linux-2.4.22-bk45/drivers/hotplug/Config.in	2003-08-25 04:44:41.000000000 -0700
+++ linux-2.4.22-bk46/drivers/hotplug/Config.in	2003-11-04 03:32:10.000000000 -0800
@@ -11,7 +11,7 @@
 if [ "$CONFIG_X86_IO_APIC" = "y" ]; then
    dep_tristate '  IBM PCI Hotplug driver' CONFIG_HOTPLUG_PCI_IBM $CONFIG_HOTPLUG_PCI $CONFIG_X86_IO_APIC $CONFIG_X86
 fi
-if [ "$CONFIG_ACPI_INTERPRETER" ]; then
+if [ "$CONFIG_ACPI_INTERPRETER" = "y" ]; then
    dep_tristate '  ACPI PCI Hotplug driver' CONFIG_HOTPLUG_PCI_ACPI $CONFIG_HOTPLUG_PCI
 fi
 endmenu
diff -urN linux-2.4.22-bk45/drivers/media/video/meye.c linux-2.4.22-bk46/drivers/media/video/meye.c
--- linux-2.4.22-bk45/drivers/media/video/meye.c	2003-11-04 03:30:41.000000000 -0800
+++ linux-2.4.22-bk46/drivers/media/video/meye.c	2003-11-04 03:32:13.000000000 -0800
@@ -862,7 +862,7 @@
 /* Interrupt handling                                                       */
 /****************************************************************************/
 
-static void meye_irq(int irq, void *dev_id, struct pt_regs *regs) {
+static irqreturn_t meye_irq(int irq, void *dev_id, struct pt_regs *regs) {
 	u32 v;
 	int reqnr;
 	v = mchip_read(MCHIP_MM_INTA);
@@ -870,7 +870,7 @@
 	while (1) {
 		v = mchip_get_frame();
 		if (!(v & MCHIP_MM_FIR_RDY))
-			return;
+			return IRQ_NONE;
 		switch (meye.mchip_mode) {
 
 		case MCHIP_HIC_MODE_CONT_OUT:
@@ -903,11 +903,12 @@
 
 		default:
 			/* do not free frame, since it can be a snap */
-			return;
+			return IRQ_NONE;
 		} /* switch */
 
 		mchip_free_frame();
 	}
+	return IRQ_HANDLED;
 }
 
 /****************************************************************************/
@@ -1252,6 +1253,7 @@
 	.type		= VID_TYPE_CAPTURE,
 	.hardware	= VID_HARDWARE_MEYE,
 	.fops		= &meye_fops,
+	.release	= video_device_release,
 	.minor		= -1,
 };
 
@@ -1304,7 +1306,7 @@
 	}
 
 	meye.mchip_dev = pcidev;
-	meye.video_dev = kmalloc(sizeof(struct video_device), GFP_KERNEL);
+	meye.video_dev = video_device_alloc();
 	if (!meye.video_dev) {
 		printk(KERN_ERR "meye: video_device_alloc() failed!\n");
 		ret = -EBUSY;
@@ -1417,7 +1419,7 @@
 out3:
 	pci_disable_device(meye.mchip_dev);
 out2:
-	kfree(meye.video_dev);
+	video_device_release(meye.video_dev);
 	meye.video_dev = NULL;
 
 	sonypi_camera_command(SONYPI_COMMAND_SETCAMERA, 0);
diff -urN linux-2.4.22-bk45/drivers/media/video/meye.h linux-2.4.22-bk46/drivers/media/video/meye.h
--- linux-2.4.22-bk45/drivers/media/video/meye.h	2003-11-04 03:30:41.000000000 -0800
+++ linux-2.4.22-bk46/drivers/media/video/meye.h	2003-11-04 03:32:13.000000000 -0800
@@ -31,13 +31,11 @@
 #define _MEYE_PRIV_H_
 
 #define MEYE_DRIVER_MAJORVERSION	1
-#define MEYE_DRIVER_MINORVERSION	7
+#define MEYE_DRIVER_MINORVERSION	8
 
 #include <linux/config.h>
 #include <linux/types.h>
 #include <linux/pci.h>
-#include <linux/sonypi.h>
-#include <linux/meye.h>
 
 /****************************************************************************/
 /* Motion JPEG chip registers                                               */
diff -urN linux-2.4.22-bk45/drivers/net/8139cp.c linux-2.4.22-bk46/drivers/net/8139cp.c
--- linux-2.4.22-bk45/drivers/net/8139cp.c	2003-11-04 03:30:41.000000000 -0800
+++ linux-2.4.22-bk46/drivers/net/8139cp.c	2003-11-04 03:32:13.000000000 -0800
@@ -615,8 +615,8 @@
 		if (cpr16(IntrStatus) & cp_rx_intr_mask)
 			goto rx_status_loop;
 
-		cpw16_f(IntrMask, cp_intr_mask);
 		netif_rx_complete(dev);
+		cpw16_f(IntrMask, cp_intr_mask);
 
 		return 0;	/* done */
 	}
diff -urN linux-2.4.22-bk45/fs/inode.c linux-2.4.22-bk46/fs/inode.c
--- linux-2.4.22-bk45/fs/inode.c	2003-11-04 03:31:36.000000000 -0800
+++ linux-2.4.22-bk46/fs/inode.c	2003-11-04 03:32:30.000000000 -0800
@@ -947,6 +947,37 @@
 	
 }
 
+/**
+ *	ilookup - search for an inode in the inode cache
+ *	@sb:         super block of file system to search
+ *	@ino:        inode number to search for
+ *
+ *	If the inode is in the cache, the inode is returned with an
+ *	incremented reference count.
+ *
+ *	Otherwise, %NULL is returned.
+ *
+ *	This is almost certainly not the function you are looking for.
+ *	If you think you need to use this, consult an expert first.
+ */
+struct inode *ilookup(struct super_block *sb, unsigned long ino)
+{
+	struct list_head * head = inode_hashtable + hash(sb,ino);
+	struct inode * inode;
+
+	spin_lock(&inode_lock);
+	inode = find_inode(sb, ino, head, NULL, NULL);
+	if (inode) {
+		__iget(inode);
+		spin_unlock(&inode_lock);
+		wait_on_inode(inode);
+		return inode;
+	}
+	spin_unlock(&inode_lock);
+
+	return inode;
+}
+
 struct inode *igrab(struct inode *inode)
 {
 	spin_lock(&inode_lock);
diff -urN linux-2.4.22-bk45/fs/jffs2/dir.c linux-2.4.22-bk46/fs/jffs2/dir.c
--- linux-2.4.22-bk45/fs/jffs2/dir.c	2003-08-25 04:44:43.000000000 -0700
+++ linux-2.4.22-bk46/fs/jffs2/dir.c	2003-11-04 03:32:30.000000000 -0800
@@ -31,7 +31,7 @@
  * provisions above, a recipient may use your version of this file
  * under either the RHEPL or the GPL.
  *
- * $Id: dir.c,v 1.45.2.7 2002/08/26 15:30:18 dwmw2 Exp $
+ * $Id: dir.c,v 1.45.2.8 2003/11/02 13:51:17 dwmw2 Exp $
  *
  */
 
diff -urN linux-2.4.22-bk45/fs/jffs2/erase.c linux-2.4.22-bk46/fs/jffs2/erase.c
--- linux-2.4.22-bk45/fs/jffs2/erase.c	2003-08-25 04:44:43.000000000 -0700
+++ linux-2.4.22-bk46/fs/jffs2/erase.c	2003-11-04 03:32:30.000000000 -0800
@@ -31,7 +31,7 @@
  * provisions above, a recipient may use your version of this file
  * under either the RHEPL or the GPL.
  *
- * $Id: erase.c,v 1.24 2001/12/06 16:38:38 dwmw2 Exp $
+ * $Id: erase.c,v 1.24.2.1 2003/11/02 13:51:17 dwmw2 Exp $
  *
  */
 #include <linux/kernel.h>
diff -urN linux-2.4.22-bk45/fs/jffs2/file.c linux-2.4.22-bk46/fs/jffs2/file.c
--- linux-2.4.22-bk45/fs/jffs2/file.c	2003-08-25 04:44:43.000000000 -0700
+++ linux-2.4.22-bk46/fs/jffs2/file.c	2003-11-04 03:32:30.000000000 -0800
@@ -31,7 +31,7 @@
  * provisions above, a recipient may use your version of this file
  * under either the RHEPL or the GPL.
  *
- * $Id: file.c,v 1.58.2.6 2002/11/12 13:17:01 dwmw2 Exp $
+ * $Id: file.c,v 1.58.2.7 2003/11/02 13:51:17 dwmw2 Exp $
  *
  */
 
diff -urN linux-2.4.22-bk45/fs/jffs2/gc.c linux-2.4.22-bk46/fs/jffs2/gc.c
--- linux-2.4.22-bk45/fs/jffs2/gc.c	2003-08-25 04:44:43.000000000 -0700
+++ linux-2.4.22-bk46/fs/jffs2/gc.c	2003-11-04 03:32:30.000000000 -0800
@@ -31,7 +31,7 @@
  * provisions above, a recipient may use your version of this file
  * under either the RHEPL or the GPL.
  *
- * $Id: gc.c,v 1.52.2.5 2002/10/10 13:18:38 dwmw2 Exp $
+ * $Id: gc.c,v 1.52.2.7 2003/11/02 13:54:20 dwmw2 Exp $
  *
  */
 
@@ -109,8 +109,8 @@
 	struct jffs2_node_frag *frag;
 	struct jffs2_full_dnode *fn = NULL;
 	struct jffs2_full_dirent *fd;
+	struct jffs2_inode_cache *ic;
 	__u32 start = 0, end = 0, nrfrags = 0;
-	__u32 inum;
 	struct inode *inode;
 	int ret = 0;
 
@@ -162,16 +162,47 @@
 		goto eraseit_lock;
 	}
 						     
-	inum = jffs2_raw_ref_to_inum(raw);
-	D1(printk(KERN_DEBUG "Inode number is #%u\n", inum));
+	ic = jffs2_raw_ref_to_ic(raw);
+	D1(printk(KERN_DEBUG "Inode number is #%u\n", ic->ino));
 
 	spin_unlock_bh(&c->erase_completion_lock);
 
-	D1(printk(KERN_DEBUG "jffs2_garbage_collect_pass collecting from block @0x%08x. Node @0x%08x, ino #%u\n", jeb->offset, raw->flash_offset&~3, inum));
-
-	inode = iget(OFNI_BS_2SFFJ(c), inum);
+	D1(printk(KERN_DEBUG "jffs2_garbage_collect_pass collecting from block @0x%08x. Node @0x%08x, ino #%u\n", jeb->offset, raw->flash_offset&~3, ic->ino));
+	if (!ic->nlink) {
+		/* The inode has zero nlink but its nodes weren't yet marked
+		   obsolete. This has to be because we're still waiting for 
+		   the final (close() and) iput() to happen.
+
+		   There's a possibility that the final iput() could have 
+		   happened while we were contemplating. In order to ensure
+		   that we don't cause a new read_inode() (which would fail)
+		   for the inode in question, we use ilookup() in this case
+		   instead of iget().
+
+		   The nlink can't _become_ zero at this point because we're 
+		   holding the alloc_sem, and jffs2_do_unlink() would also
+		   need that while decrementing nlink on any inode.
+		*/
+		inode = ilookup(OFNI_BS_2SFFJ(c), ic->ino);
+		if (!inode) {
+			D1(printk(KERN_DEBUG "ilookup() failed for ino #%u; inode is probably deleted.\n",
+				  ic->ino));
+			up(&c->alloc_sem);
+			return 0;
+		}
+	} else {
+		/* Inode has links to it still; they're not going away because
+		   jffs2_do_unlink() would need the alloc_sem and we have it.
+		   Just iget() it, and if read_inode() is necessary that's OK.
+		*/
+		inode = iget(OFNI_BS_2SFFJ(c), ic->ino);
+		if (!inode) {
+			up(&c->alloc_sem);
+			return -ENOMEM;
+		}
+	}
 	if (is_bad_inode(inode)) {
-		printk(KERN_NOTICE "Eep. read_inode() failed for ino #%u\n", inum);
+		printk(KERN_NOTICE "Eep. read_inode() failed for ino #%u\n", ic->ino);
 		/* NB. This will happen again. We need to do something appropriate here. */
 		up(&c->alloc_sem);
 		iput(inode);
diff -urN linux-2.4.22-bk45/fs/jffs2/nodelist.h linux-2.4.22-bk46/fs/jffs2/nodelist.h
--- linux-2.4.22-bk45/fs/jffs2/nodelist.h	2003-06-13 07:51:37.000000000 -0700
+++ linux-2.4.22-bk46/fs/jffs2/nodelist.h	2003-11-04 03:32:30.000000000 -0800
@@ -31,7 +31,7 @@
  * provisions above, a recipient may use your version of this file
  * under either the RHEPL or the GPL.
  *
- * $Id: nodelist.h,v 1.46.2.4 2003/02/24 21:49:33 dwmw2 Exp $
+ * $Id: nodelist.h,v 1.46.2.5 2003/11/02 13:54:20 dwmw2 Exp $
  *
  */
 
@@ -232,13 +232,13 @@
 
 #define PAD(x) (((x)+3)&~3)
 
-static inline int jffs2_raw_ref_to_inum(struct jffs2_raw_node_ref *raw)
+static inline struct jffs2_inode_cache *jffs2_raw_ref_to_ic(struct jffs2_raw_node_ref *raw)
 {
 	while(raw->next_in_ino) {
 		raw = raw->next_in_ino;
 	}
 
-	return ((struct jffs2_inode_cache *)raw)->ino;
+	return ((struct jffs2_inode_cache *)raw);
 }
 
 /* nodelist.c */
diff -urN linux-2.4.22-bk45/fs/jffs2/read.c linux-2.4.22-bk46/fs/jffs2/read.c
--- linux-2.4.22-bk45/fs/jffs2/read.c	2003-08-25 04:44:43.000000000 -0700
+++ linux-2.4.22-bk46/fs/jffs2/read.c	2003-11-04 03:32:30.000000000 -0800
@@ -31,7 +31,7 @@
  * provisions above, a recipient may use your version of this file
  * under either the RHEPL or the GPL.
  *
- * $Id: read.c,v 1.13.2.1 2002/02/01 23:32:33 dwmw2 Exp $
+ * $Id: read.c,v 1.13.2.2 2003/11/02 13:51:18 dwmw2 Exp $
  *
  */
 
diff -urN linux-2.4.22-bk45/fs/jffs2/readinode.c linux-2.4.22-bk46/fs/jffs2/readinode.c
--- linux-2.4.22-bk45/fs/jffs2/readinode.c	2003-08-25 04:44:43.000000000 -0700
+++ linux-2.4.22-bk46/fs/jffs2/readinode.c	2003-11-04 03:32:30.000000000 -0800
@@ -31,7 +31,7 @@
  * provisions above, a recipient may use your version of this file
  * under either the RHEPL or the GPL.
  *
- * $Id: readinode.c,v 1.58.2.6 2002/10/10 13:18:38 dwmw2 Exp $
+ * $Id: readinode.c,v 1.58.2.8 2003/11/02 13:54:20 dwmw2 Exp $
  *
  */
 
@@ -468,23 +468,12 @@
 	struct jffs2_node_frag *frag, *frags;
 	struct jffs2_full_dirent *fd, *fds;
 	struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
-        /* I don't think we care about the potential race due to reading this
-           without f->sem. It can never get undeleted. */
-        int deleted = f->inocache && !f->inocache->nlink;
+        int deleted;
 
 	D1(printk(KERN_DEBUG "jffs2_clear_inode(): ino #%lu mode %o\n", inode->i_ino, inode->i_mode));
 
-	/* If it's a deleted inode, grab the alloc_sem. This prevents
-	   jffs2_garbage_collect_pass() from deciding that it wants to
-	   garbage collect one of the nodes we're just about to mark 
-	   obsolete -- by the time we drop alloc_sem and return, all
-	   the nodes are marked obsolete, and jffs2_g_c_pass() won't
-	   call iget() for the inode in question.
-	*/
-	if (deleted)
-		down(&c->alloc_sem);
-
 	down(&f->sem);
+	deleted = f->inocache && !f->inocache->nlink;
 
 	frags = f->fraglist;
 	fds = f->dents;
@@ -515,8 +504,5 @@
 	}
 
 	up(&f->sem);
-
-	if(deleted)
-		up(&c->alloc_sem);
 };
 
diff -urN linux-2.4.22-bk45/fs/jffs2/scan.c linux-2.4.22-bk46/fs/jffs2/scan.c
--- linux-2.4.22-bk45/fs/jffs2/scan.c	2003-08-25 04:44:43.000000000 -0700
+++ linux-2.4.22-bk46/fs/jffs2/scan.c	2003-11-04 03:32:30.000000000 -0800
@@ -31,7 +31,7 @@
  * provisions above, a recipient may use your version of this file
  * under either the RHEPL or the GPL.
  *
- * $Id: scan.c,v 1.51.2.3 2002/07/25 20:49:06 dwmw2 Exp $
+ * $Id: scan.c,v 1.51.2.4 2003/11/02 13:51:18 dwmw2 Exp $
  *
  */
 #include <linux/kernel.h>
diff -urN linux-2.4.22-bk45/fs/jffs2/write.c linux-2.4.22-bk46/fs/jffs2/write.c
--- linux-2.4.22-bk45/fs/jffs2/write.c	2003-08-25 04:44:43.000000000 -0700
+++ linux-2.4.22-bk46/fs/jffs2/write.c	2003-11-04 03:32:30.000000000 -0800
@@ -31,7 +31,7 @@
  * provisions above, a recipient may use your version of this file
  * under either the RHEPL or the GPL.
  *
- * $Id: write.c,v 1.30.2.1 2002/08/08 08:36:31 dwmw2 Exp $
+ * $Id: write.c,v 1.30.2.2 2003/11/02 13:51:18 dwmw2 Exp $
  *
  */
 
diff -urN linux-2.4.22-bk45/fs/jfs/namei.c linux-2.4.22-bk46/fs/jfs/namei.c
--- linux-2.4.22-bk45/fs/jfs/namei.c	2003-11-04 03:31:36.000000000 -0800
+++ linux-2.4.22-bk46/fs/jfs/namei.c	2003-11-04 03:32:30.000000000 -0800
@@ -758,12 +758,6 @@
 	jfs_info("jfs_link: %s %s", old_dentry->d_name.name,
 		 dentry->d_name.name);
 
-	if (ip->i_nlink == JFS_LINK_MAX)
-		return -EMLINK;
-
-	if (ip->i_nlink == 0)
-		return -ENOENT;
-
 	/* JFS does NOT support link() on directories */
 	if (S_ISDIR(ip->i_mode))
 		return -EPERM;
@@ -773,6 +767,16 @@
 	down(&JFS_IP(dir)->commit_sem);
 	down(&JFS_IP(ip)->commit_sem);
 
+	if (ip->i_nlink == JFS_LINK_MAX) {
+		rc = -EMLINK;
+		goto out;
+	}
+
+	if (ip->i_nlink == 0) {
+		rc = -ENOENT;
+		goto out;
+	}
+
 	/*
 	 * scan parent directory for entry/freespace
 	 */
diff -urN linux-2.4.22-bk45/fs/minix/inode.c linux-2.4.22-bk46/fs/minix/inode.c
--- linux-2.4.22-bk45/fs/minix/inode.c	2002-02-25 11:38:09.000000000 -0800
+++ linux-2.4.22-bk46/fs/minix/inode.c	2003-11-04 03:32:30.000000000 -0800
@@ -511,6 +511,8 @@
  */
 void minix_truncate(struct inode * inode)
 {
+	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)))
+		return;
 	if (INODE_VERSION(inode) == MINIX_V1)
 		V1_minix_truncate(inode);
 	else
diff -urN linux-2.4.22-bk45/include/asm-sparc/ioctl.h linux-2.4.22-bk46/include/asm-sparc/ioctl.h
--- linux-2.4.22-bk45/include/asm-sparc/ioctl.h	2003-06-13 07:51:38.000000000 -0700
+++ linux-2.4.22-bk46/include/asm-sparc/ioctl.h	2003-11-04 03:32:31.000000000 -0800
@@ -54,7 +54,9 @@
                             (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) )
 #define _IOC_TYPE(nr)       (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
 #define _IOC_NR(nr)         (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
-#define _IOC_SIZE(nr)       (((nr) >> _IOC_SIZESHIFT) & _IOC_XSIZEMASK)
+#define _IOC_SIZE(nr)   \
+ ((((((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) & (_IOC_WRITE|_IOC_READ)) == 0)?    \
+                         0: (((nr) >> _IOC_SIZESHIFT) & _IOC_XSIZEMASK))
 
 /* ...and for the PCMCIA and sound. */
 #define IOC_IN          (_IOC_WRITE << _IOC_DIRSHIFT)
diff -urN linux-2.4.22-bk45/include/asm-sparc64/ioctl.h linux-2.4.22-bk46/include/asm-sparc64/ioctl.h
--- linux-2.4.22-bk45/include/asm-sparc64/ioctl.h	2003-06-13 07:51:38.000000000 -0700
+++ linux-2.4.22-bk46/include/asm-sparc64/ioctl.h	2003-11-04 03:32:31.000000000 -0800
@@ -54,7 +54,9 @@
                             (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) )
 #define _IOC_TYPE(nr)       (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
 #define _IOC_NR(nr)         (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
-#define _IOC_SIZE(nr)       (((nr) >> _IOC_SIZESHIFT) & _IOC_XSIZEMASK)
+#define _IOC_SIZE(nr)   \
+ ((((((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) & (_IOC_WRITE|_IOC_READ)) == 0)?    \
+                         0: (((nr) >> _IOC_SIZESHIFT) & _IOC_XSIZEMASK))
 
 /* ...and for the PCMCIA and sound. */
 #define IOC_IN          (_IOC_WRITE << _IOC_DIRSHIFT)
diff -urN linux-2.4.22-bk45/include/asm-x86_64/desc.h linux-2.4.22-bk46/include/asm-x86_64/desc.h
--- linux-2.4.22-bk45/include/asm-x86_64/desc.h	2003-08-25 04:44:44.000000000 -0700
+++ linux-2.4.22-bk46/include/asm-x86_64/desc.h	2003-11-04 03:32:31.000000000 -0800
@@ -121,7 +121,7 @@
 	dst->base1 = PTR_MIDDLE(ptr) & 0xFF; 
 	dst->type = type;
 	dst->p = 1; 
-	dst->limit1 = 0xF;
+	dst->limit1 = (size >> 16) & 0xF;
 	dst->base2 = (PTR_MIDDLE(ptr) >> 8) & 0xFF; 
 	dst->base3 = PTR_HIGH(ptr); 
 }
diff -urN linux-2.4.22-bk45/include/linux/fs.h linux-2.4.22-bk46/include/linux/fs.h
--- linux-2.4.22-bk45/include/linux/fs.h	2003-11-04 03:31:38.000000000 -0800
+++ linux-2.4.22-bk46/include/linux/fs.h	2003-11-04 03:32:32.000000000 -0800
@@ -1395,6 +1395,7 @@
 extern void iput(struct inode *);
 extern void force_delete(struct inode *);
 extern struct inode * igrab(struct inode *);
+extern struct inode * ilookup(struct super_block *, unsigned long);
 extern ino_t iunique(struct super_block *, ino_t);
 
 typedef int (*find_inode_t)(struct inode *, unsigned long, void *);
diff -urN linux-2.4.22-bk45/include/linux/pci_ids.h linux-2.4.22-bk46/include/linux/pci_ids.h
--- linux-2.4.22-bk45/include/linux/pci_ids.h	2003-11-04 03:31:38.000000000 -0800
+++ linux-2.4.22-bk46/include/linux/pci_ids.h	2003-11-04 03:32:32.000000000 -0800
@@ -969,6 +969,7 @@
 #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE	0x0065
 #define PCI_DEVICE_ID_NVIDIA_ITNT2		0x00A0
 #define PCI_DEVICE_ID_NVIDIA_NFORCE3		0x00d1
+#define PCI_DEVICE_ID_NVIDIA_NFORCE3S		0x00e1
 #define PCI_DEVICE_ID_NVIDIA_GEFORCE_SDR	0x0100
 #define PCI_DEVICE_ID_NVIDIA_GEFORCE_DDR	0x0101
 #define PCI_DEVICE_ID_NVIDIA_QUADRO		0x0103
diff -urN linux-2.4.22-bk45/kernel/ksyms.c linux-2.4.22-bk46/kernel/ksyms.c
--- linux-2.4.22-bk45/kernel/ksyms.c	2003-11-04 03:31:39.000000000 -0800
+++ linux-2.4.22-bk46/kernel/ksyms.c	2003-11-04 03:32:32.000000000 -0800
@@ -143,6 +143,7 @@
 EXPORT_SYMBOL(fget);
 EXPORT_SYMBOL(igrab);
 EXPORT_SYMBOL(iunique);
+EXPORT_SYMBOL(ilookup);
 EXPORT_SYMBOL(iget4);
 EXPORT_SYMBOL(iput);
 EXPORT_SYMBOL(inode_init_once);
