Thread (58 messages) 58 messages, 9 authors, 2013-09-06

Re: [PATCH 15/23] mm, fs: avoid page allocation beyond i_size on read

From: NeilBrown <hidden>
Date: 2013-08-05 00:29:17
Also in: linux-fsdevel, lkml

On Sun,  4 Aug 2013 05:17:17 +0300 "Kirill A. Shutemov"
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: "Kirill A. Shutemov" <redacted>

I've noticed that we allocated unneeded page for cache on read beyond
i_size. Simple test case (I checked it on ramfs):

$ touch testfile
$ cat testfile

It triggers 'no_cached_page' code path in do_generic_file_read().

Looks like it's regression since commit a32ea1e. Let's fix it.

Signed-off-by: Kirill A. Shutemov <redacted>
Cc: NeilBrown <redacted>
---
 mm/filemap.c | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/mm/filemap.c b/mm/filemap.c
index 066bbff..c31d296 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1163,6 +1163,10 @@ static void do_generic_file_read(struct file *filp, loff_t *ppos,
 		loff_t isize;
 		unsigned long nr, ret;
 
+		isize = i_size_read(inode);
+		if (!isize || index > (isize - 1) >> PAGE_CACHE_SHIFT)
+			goto out;
+
 		cond_resched();
 find_page:
 		page = find_get_page(mapping, index);
Looks good to me.

Acked-by: NeilBrown <redacted>

Thanks,
NeilBrown

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help