diff -urN linux.orig/fs/file_table.c linux.diff/fs/file_table.c
--- linux.orig/fs/file_table.c	Fri Jan 11 15:29:58 2002
+++ linux.diff/fs/file_table.c	Mon Jan 14 16:58:21 2002
@@ -98,11 +98,17 @@
 
 void fput(struct file * file)
 {
+	if (atomic_dec_and_test(&file->f_count))
+		__fput(file);
+}
+
+void __fput(struct file * file)
+{
 	struct dentry * dentry = file->f_dentry;
 	struct vfsmount * mnt = file->f_vfsmnt;
 	struct inode * inode = dentry->d_inode;
 
-	if (atomic_dec_and_test(&file->f_count)) {
+	{
 		locks_remove_flock(file);
 		if (file->f_op && file->f_op->release)
 			file->f_op->release(inode, file);
diff -urN linux.orig/include/linux/file.h linux.diff/include/linux/file.h
--- linux.orig/include/linux/file.h	Fri Jan 11 15:29:58 2002
+++ linux.diff/include/linux/file.h	Mon Jan 14 17:00:55 2002
@@ -5,6 +5,7 @@
 #ifndef __LINUX_FILE_H
 #define __LINUX_FILE_H
 
+extern void FASTCALL(__fput(struct file *));
 extern void FASTCALL(fput(struct file *));
 extern struct file * FASTCALL(fget(unsigned int fd));