diff options
Diffstat (limited to 'mm/filemap.c')
| -rw-r--r-- | mm/filemap.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/mm/filemap.c b/mm/filemap.c index c4d4ace9cc70..0e20a8d6dd93 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2588,18 +2588,19 @@ static int filemap_get_pages(struct kiocb *iocb, struct iov_iter *iter,  	struct folio *folio;  	int err = 0; +	/* "last_index" is the index of the page beyond the end of the read */  	last_index = DIV_ROUND_UP(iocb->ki_pos + iter->count, PAGE_SIZE);  retry:  	if (fatal_signal_pending(current))  		return -EINTR; -	filemap_get_read_batch(mapping, index, last_index, fbatch); +	filemap_get_read_batch(mapping, index, last_index - 1, fbatch);  	if (!folio_batch_count(fbatch)) {  		if (iocb->ki_flags & IOCB_NOIO)  			return -EAGAIN;  		page_cache_sync_readahead(mapping, ra, filp, index,  				last_index - index); -		filemap_get_read_batch(mapping, index, last_index, fbatch); +		filemap_get_read_batch(mapping, index, last_index - 1, fbatch);  	}  	if (!folio_batch_count(fbatch)) {  		if (iocb->ki_flags & (IOCB_NOWAIT | IOCB_WAITQ))  | 
