mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 01:32:21 +02:00
Revert "mm: limit filemap_fault readahead to VMA boundaries"
This reverts commit7b32f64bc5. This patch caused a significant performance regression, so revert it, and we can determine whether the approach is sensible or not moving forwards, and if so how to avoid this. There was a merge conflict with commitde97ae6222("mm/readahead: no PG_readahead on EOF"), care was taken to ensure that the revert retained the behaviour of this patch and cleanly reverts commit7b32f64bc5("mm: limit filemap_fault readahead to VMA boundaries") only. Link: https://lore.kernel.org/20260619112852.104213-1-ljs@kernel.org Fixes:7b32f64bc5("mm: limit filemap_fault readahead to VMA boundaries") Signed-off-by: Lorenzo Stoakes <ljs@kernel.org> Reported-by: kernel test robot <oliver.sang@intel.com> Closes: https://lore.kernel.org/oe-lkp/202606181547.617a6967-lkp@intel.com Acked-by: David Hildenbrand (Arm) <david@kernel.org> Reviewed-by: Pedro Falcato <pfalcato@suse.de> Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Jan Kara <jack@suse.cz> Cc: Kalesh Singh <kaleshsingh@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
44238b122a
commit
13a1e1a618
|
|
@ -1348,7 +1348,6 @@ struct readahead_control {
|
|||
struct file_ra_state *ra;
|
||||
/* private: use the readahead_* accessors instead */
|
||||
pgoff_t _index;
|
||||
pgoff_t _max_index; /* limit readahead to _max_index, inclusive */
|
||||
unsigned int _nr_pages;
|
||||
unsigned int _batch_count;
|
||||
bool dropbehind;
|
||||
|
|
@ -1362,7 +1361,6 @@ struct readahead_control {
|
|||
.mapping = m, \
|
||||
.ra = r, \
|
||||
._index = i, \
|
||||
._max_index = ULONG_MAX, \
|
||||
}
|
||||
|
||||
#define VM_READAHEAD_PAGES (SZ_128K / PAGE_SIZE)
|
||||
|
|
|
|||
|
|
@ -3312,8 +3312,6 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf)
|
|||
unsigned int thp_order = 0;
|
||||
unsigned short mmap_miss;
|
||||
|
||||
ractl._max_index = vmf->vma->vm_pgoff + vma_pages(vmf->vma) - 1;
|
||||
|
||||
/* Use the readahead code, even if readahead is disabled */
|
||||
if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && (vm_flags & VM_HUGEPAGE)) {
|
||||
/*
|
||||
|
|
@ -3409,7 +3407,6 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf)
|
|||
* mmap read-around
|
||||
*/
|
||||
ra->start = max_t(long, 0, vmf->pgoff - ra->ra_pages / 2);
|
||||
ra->start = max(ra->start, vmf->vma->vm_pgoff);
|
||||
ra->size = ra->ra_pages;
|
||||
ra->async_size = ra->ra_pages / 4;
|
||||
ra->order = 0;
|
||||
|
|
@ -3457,7 +3454,6 @@ static struct file *do_async_mmap_readahead(struct vm_fault *vmf,
|
|||
}
|
||||
|
||||
if (folio_test_readahead(folio)) {
|
||||
ractl._max_index = vmf->vma->vm_pgoff + vma_pages(vmf->vma) - 1;
|
||||
fpin = maybe_unlock_mmap_for_io(vmf, fpin);
|
||||
page_cache_async_ra(&ractl, folio, ra->ra_pages);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -335,8 +335,6 @@ static void do_page_cache_ra(struct readahead_control *ractl,
|
|||
return;
|
||||
|
||||
end_index = (isize - 1) >> PAGE_SHIFT;
|
||||
if (end_index > ractl->_max_index)
|
||||
end_index = ractl->_max_index;
|
||||
if (index > end_index)
|
||||
return;
|
||||
/* Don't read past the page containing the last byte of the file */
|
||||
|
|
@ -487,7 +485,7 @@ void page_cache_ra_order(struct readahead_control *ractl,
|
|||
pgoff_t start = readahead_index(ractl);
|
||||
pgoff_t index = start;
|
||||
unsigned int min_order = mapping_min_folio_order(mapping);
|
||||
pgoff_t limit;
|
||||
pgoff_t limit = (i_size_read(mapping->host) - 1) >> PAGE_SHIFT;
|
||||
pgoff_t mark;
|
||||
unsigned int nofs;
|
||||
int err = 0;
|
||||
|
|
@ -500,8 +498,6 @@ void page_cache_ra_order(struct readahead_control *ractl,
|
|||
goto fallback;
|
||||
}
|
||||
|
||||
limit = (i_size_read(mapping->host) - 1) >> PAGE_SHIFT;
|
||||
limit = min(limit, ractl->_max_index);
|
||||
if (limit > index + ra->size - 1) {
|
||||
limit = index + ra->size - 1;
|
||||
mark = index + ra->size - ra->async_size;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user