--- fs/direct-io.c | 5 ++++- fs/inode.c | 0 fs/open.c | 0 fs/xfs/linux/xfs_aops.c | 0 include/linux/fs.h | 0 mm/filemap.c | 0 6 files changed, 4 insertions(+), 1 deletion(-) diff -puN fs/direct-io.c~O_DIRECT-race-fixes-rollup-use-f_mapping fs/direct-io.c --- 25/fs/direct-io.c~O_DIRECT-race-fixes-rollup-use-f_mapping 2004-01-30 00:43:19.000000000 -0800 +++ 25-akpm/fs/direct-io.c 2004-01-30 00:47:00.000000000 -0800 @@ -1076,8 +1076,11 @@ __blockdev_direct_IO(int rw, struct kioc if (S_ISREG(inode->i_mode) && needs_special_locking) { needs_locking = 1; if (rw == READ) { + struct address_space *mapping; + + mapping = iocb->ki_filp->f_mapping; down(&inode->i_sem); - retval = filemap_write_and_wait(inode->i_mapping); + retval = filemap_write_and_wait(mapping); if (retval) { up(&inode->i_sem); kfree(dio); diff -puN fs/inode.c~O_DIRECT-race-fixes-rollup-use-f_mapping fs/inode.c diff -puN fs/open.c~O_DIRECT-race-fixes-rollup-use-f_mapping fs/open.c diff -puN include/linux/fs.h~O_DIRECT-race-fixes-rollup-use-f_mapping include/linux/fs.h diff -puN mm/filemap.c~O_DIRECT-race-fixes-rollup-use-f_mapping mm/filemap.c diff -puN fs/xfs/linux/xfs_aops.c~O_DIRECT-race-fixes-rollup-use-f_mapping fs/xfs/linux/xfs_aops.c _