From: Alexey Dobriyan Looks like, reiserfs_prepare_file_region_for_write() doesn't contain several flush_dcache_page() calls. Found with help from Dmitriy Monakhov Signed-off-by: Alexey Dobriyan Cc: Dmitriy Monakhov Signed-off-by: Andrew Morton --- fs/reiserfs/file.c | 4 ++++ 1 file changed, 4 insertions(+) diff -puN fs/reiserfs/file.c~reiserfs-add-missing-d-cache-flushing fs/reiserfs/file.c --- a/fs/reiserfs/file.c~reiserfs-add-missing-d-cache-flushing +++ a/fs/reiserfs/file.c @@ -1044,6 +1044,7 @@ static int reiserfs_prepare_file_region_ if (from != 0) { /* First page needs to be partially zeroed */ char *kaddr = kmap_atomic(prepared_pages[0], KM_USER0); memset(kaddr, 0, from); + flush_dcache_page(prepared_pages[0]); kunmap_atomic(kaddr, KM_USER0); } if (to != PAGE_CACHE_SIZE) { /* Last page needs to be partially zeroed */ @@ -1051,6 +1052,7 @@ static int reiserfs_prepare_file_region_ kmap_atomic(prepared_pages[num_pages - 1], KM_USER0); memset(kaddr + to, 0, PAGE_CACHE_SIZE - to); + flush_dcache_page(prepared_pages[num_pages - 1]); kunmap_atomic(kaddr, KM_USER0); } @@ -1184,6 +1186,7 @@ static int reiserfs_prepare_file_region_ KM_USER0); memset(kaddr + block_start, 0, from - block_start); + flush_dcache_page(prepared_pages[0]); kunmap_atomic(kaddr, KM_USER0); set_buffer_uptodate(bh); } @@ -1221,6 +1224,7 @@ static int reiserfs_prepare_file_region_ [num_pages - 1], KM_USER0); memset(kaddr + to, 0, block_end - to); + flush_dcache_page(prepared_pages[num_pages - 1]); kunmap_atomic(kaddr, KM_USER0); set_buffer_uptodate(bh); } _