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));