]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - mm/fadvise.c
x86/speculation/mds: Conditionally clear CPU buffers on idle entry
[mirror_ubuntu-bionic-kernel.git] / mm / fadvise.c
index ec70d6e4b86d58581f4abdc0aaf1df603f57716d..767887f5f3bfd79b493a731dbc467d96545f8494 100644 (file)
@@ -127,7 +127,15 @@ SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice)
                 */
                start_index = (offset+(PAGE_SIZE-1)) >> PAGE_SHIFT;
                end_index = (endbyte >> PAGE_SHIFT);
-               if ((endbyte & ~PAGE_MASK) != ~PAGE_MASK) {
+               /*
+                * The page at end_index will be inclusively discarded according
+                * by invalidate_mapping_pages(), so subtracting 1 from
+                * end_index means we will skip the last page.  But if endbyte
+                * is page aligned or is at the end of file, we should not skip
+                * that page - discarding the last page is safe enough.
+                */
+               if ((endbyte & ~PAGE_MASK) != ~PAGE_MASK &&
+                               endbyte != inode->i_size - 1) {
                        /* 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