X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=mm%2Ffadvise.c;h=d257c89e7704c60d8decf405c89c46f8de262153;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=0a03357a1f8ed08277070275b494f3d2a7cc9c88;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/mm/fadvise.c b/mm/fadvise.c index 0a03357a1..d257c89e7 100644 --- a/mm/fadvise.c +++ b/mm/fadvise.c @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -23,25 +22,13 @@ /* * POSIX_FADV_WILLNEED could set PG_Referenced, and POSIX_FADV_NOREUSE could * deactivate the pages and clear PG_Referenced. - * - * LINUX_FADV_ASYNC_WRITE: start async writeout of any dirty pages between file - * offsets `offset' and `offset+len' inclusive. Any pages which are currently - * under writeout are skipped, whether or not they are dirty. - * - * LINUX_FADV_WRITE_WAIT: wait upon writeout of any dirty pages between file - * offsets `offset' and `offset+len'. - * - * By combining these two operations the application may do several things: - * - * LINUX_FADV_ASYNC_WRITE: push some or all of the dirty pages at the disk. - * */ asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) { struct file *file = fget(fd); struct address_space *mapping; struct backing_dev_info *bdi; - loff_t endbyte; /* inclusive */ + loff_t endbyte; pgoff_t start_index; pgoff_t end_index; unsigned long nrpages; @@ -69,8 +56,6 @@ asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) endbyte = offset + len; if (!len || endbyte < len) endbyte = -1; - else - endbyte--; /* inclusive */ bdi = mapping->backing_dev_info; @@ -93,7 +78,7 @@ asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) /* First and last PARTIAL page! */ start_index = offset >> PAGE_CACHE_SHIFT; - end_index = endbyte >> PAGE_CACHE_SHIFT; + end_index = (endbyte-1) >> PAGE_CACHE_SHIFT; /* Careful about overflow on the "+1" */ nrpages = end_index - start_index + 1; @@ -111,12 +96,11 @@ asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) filemap_flush(mapping); /* First and last FULL page! */ - start_index = (offset+(PAGE_CACHE_SIZE-1)) >> PAGE_CACHE_SHIFT; + start_index = (offset + (PAGE_CACHE_SIZE-1)) >> PAGE_CACHE_SHIFT; end_index = (endbyte >> PAGE_CACHE_SHIFT); - if (end_index >= start_index) - invalidate_mapping_pages(mapping, start_index, - end_index); + if (end_index > start_index) + invalidate_mapping_pages(mapping, start_index, end_index-1); break; default: ret = -EINVAL;