Hi, On Wed, 2013-08-21 at 18:37 +0300, Kirill A. Shutemov wrote: > 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 <kirill.shutemov@xxxxxxxxxxxxxxx> > Acked-by: NeilBrown <neilb@xxxxxxx> > --- > mm/filemap.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/mm/filemap.c b/mm/filemap.c > index 1905f0e..b1a4d35 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); Please don't do that... there is no reason to think that i_size will be correct at that moment. Why not just get readpage(s) to return the correct return code in that case? Steve. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>