--- 25-akpm/include/linux/fs.h | 2 ++ 25-akpm/mm/filemap.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff -puN include/linux/fs.h~i_size_write-check include/linux/fs.h --- 25/include/linux/fs.h~i_size_write-check Fri Jan 30 15:09:47 2004 +++ 25-akpm/include/linux/fs.h Fri Jan 30 15:10:28 2004 @@ -464,9 +464,11 @@ static inline loff_t i_size_read(struct #endif } +void i_size_write_check(struct inode *inode); static inline void i_size_write(struct inode *inode, loff_t i_size) { + i_size_write_check(inode); #if BITS_PER_LONG==32 && defined(CONFIG_SMP) write_seqcount_begin(&inode->i_size_seqcount); inode->i_size = i_size; diff -puN mm/filemap.c~i_size_write-check mm/filemap.c --- 25/mm/filemap.c~i_size_write-check Fri Jan 30 15:10:23 2004 +++ 25-akpm/mm/filemap.c Fri Jan 30 15:11:41 2004 @@ -2010,3 +2010,18 @@ out: } EXPORT_SYMBOL_GPL(generic_file_direct_IO); + +void i_size_write_check(struct inode *inode) +{ + static int count = 0; + + if (down_trylock(&inode->i_sem) == 0) { + if (count < 10) { + count++; + printk("i_size_write() called without i_sem\n"); + dump_stack(); + } + up(&inode->i_sem); + } +} +EXPORT_SYMBOL(i_size_write_check); _