diff -urNp --exclude CVS --exclude BitKeeper x-ref/include/linux/fs.h x/include/linux/fs.h --- x-ref/include/linux/fs.h 2003-07-17 01:29:22.000000000 +0200 +++ x/include/linux/fs.h 2003-07-17 01:29:43.000000000 +0200 @@ -1478,6 +1478,7 @@ extern int file_read_actor(read_descript extern ssize_t generic_file_read(struct file *, char *, size_t, loff_t *); extern int precheck_file_write(struct file *, struct inode *, size_t *, loff_t *); extern ssize_t generic_file_write(struct file *, const char *, size_t, loff_t *); +extern ssize_t generic_file_write_nolock(struct file *, const char *, size_t, loff_t *); extern void do_generic_file_read(struct file *, loff_t *, read_descriptor_t *, read_actor_t); extern loff_t no_llseek(struct file *file, loff_t offset, int origin); extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin); diff -urNp --exclude CVS --exclude BitKeeper x-ref/kernel/ksyms.c x/kernel/ksyms.c --- x-ref/kernel/ksyms.c 2003-07-17 01:29:22.000000000 +0200 +++ x/kernel/ksyms.c 2003-07-17 01:29:23.000000000 +0200 @@ -224,6 +224,7 @@ EXPORT_SYMBOL(generic_block_bmap); EXPORT_SYMBOL(generic_file_read); EXPORT_SYMBOL(do_generic_file_read); EXPORT_SYMBOL(generic_file_write); +EXPORT_SYMBOL(generic_file_write_nolock); EXPORT_SYMBOL(generic_file_mmap); EXPORT_SYMBOL(generic_ro_fops); EXPORT_SYMBOL(generic_buffer_fdatasync); diff -urNp --exclude CVS --exclude BitKeeper x-ref/mm/filemap.c x/mm/filemap.c --- x-ref/mm/filemap.c 2003-07-17 01:29:22.000000000 +0200 +++ x/mm/filemap.c 2003-07-17 01:29:23.000000000 +0200 @@ -3100,8 +3100,8 @@ out: * file system has to do this all by itself, unfortunately. * okir@monad.swb.de */ -ssize_t -do_generic_file_write(struct file *file,const char *buf,size_t count, loff_t *ppos) +ssize_t generic_file_write_nolock(struct file * file, const char *buf, + size_t count, loff_t *ppos) { struct address_space *mapping = file->f_dentry->d_inode->i_mapping; struct inode *inode = mapping->host; @@ -3282,7 +3282,7 @@ static int do_odirect_fallback(struct fi int ret, err; down(&inode->i_sem); - ret = do_generic_file_write(file, buf, count, ppos); + ret = generic_file_write_nolock(file, buf, count, ppos); if (ret > 0) { err = do_fdatasync(file); if (err) @@ -3316,7 +3316,7 @@ generic_file_write(struct file *file,con err = do_odirect_fallback(file, inode, buf, count, ppos); } else { down(&inode->i_sem); - err = do_generic_file_write(file, buf, count, ppos); + err = generic_file_write_nolock(file, buf, count, ppos); up(&inode->i_sem); }