|
@@ -126,6 +126,17 @@ SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice)
|
|
*/
|
|
*/
|
|
start_index = (offset+(PAGE_SIZE-1)) >> PAGE_SHIFT;
|
|
start_index = (offset+(PAGE_SIZE-1)) >> PAGE_SHIFT;
|
|
end_index = (endbyte >> PAGE_SHIFT);
|
|
end_index = (endbyte >> PAGE_SHIFT);
|
|
|
|
+ if ((endbyte & ~PAGE_MASK) != ~PAGE_MASK) {
|
|
|
|
+ /* First page is tricky as 0 - 1 = -1, but pgoff_t
|
|
|
|
+ * is unsigned, so the end_index >= start_index
|
|
|
|
+ * check below would be true and we'll discard the whole
|
|
|
|
+ * file cache which is not what was asked.
|
|
|
|
+ */
|
|
|
|
+ if (end_index == 0)
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ end_index--;
|
|
|
|
+ }
|
|
|
|
|
|
if (end_index >= start_index) {
|
|
if (end_index >= start_index) {
|
|
unsigned long count = invalidate_mapping_pages(mapping,
|
|
unsigned long count = invalidate_mapping_pages(mapping,
|