invalidate_mapping_pages() takes start/end, but fadvise is currently passing it start/len. mm/fadvise.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff -puN mm/fadvise.c~fadvise-fix mm/fadvise.c --- 25/mm/fadvise.c~fadvise-fix 2003-08-08 02:31:47.000000000 -0700 +++ 25-akpm/mm/fadvise.c 2003-08-08 02:36:39.000000000 -0700 @@ -26,6 +26,8 @@ long sys_fadvise64(int fd, loff_t offset struct inode *inode; struct address_space *mapping; struct backing_dev_info *bdi; + pgoff_t start_index; + pgoff_t end_index; int ret = 0; if (!file) @@ -65,8 +67,10 @@ long sys_fadvise64(int fd, loff_t offset case POSIX_FADV_DONTNEED: if (!bdi_write_congested(mapping->backing_dev_info)) filemap_flush(mapping); - invalidate_mapping_pages(mapping, offset >> PAGE_CACHE_SHIFT, - (len >> PAGE_CACHE_SHIFT) + 1); + start_index = offset >> PAGE_CACHE_SHIFT; + end_index = (offset + len + PAGE_CACHE_SIZE - 1) >> + PAGE_CACHE_SHIFT; + invalidate_mapping_pages(mapping, start_index, end_index); break; default: ret = -EINVAL; _