diff --git a/mm/readahead.c b/mm/readahead.c index 99fdb2b5b568..bf79275060f3 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -641,7 +641,11 @@ void page_cache_async_ra(struct readahead_control *ractl, 1UL << order); if (index == expected) { ra->start += ra->size; - ra->size = get_next_ra_size(ra, max_pages); + /* + * In the case of MADV_HUGEPAGE, the actual size might exceed + * the readahead window. + */ + ra->size = max(ra->size, get_next_ra_size(ra, max_pages)); ra->async_size = ra->size; goto readit; }