mirror of
https://github.com/torvalds/linux.git
synced 2025-12-01 07:26:02 +07:00
mm/readahead: make space in struct file_ra_state
We need to be able to store the preferred folio order associated with a readahead request in the struct file_ra_state so that we can more accurately increase the order across subsequent readahead requests. But struct file_ra_state is per-struct file, so we don't really want to increase it's size. mmap_miss is currently 32 bits but it is only counted up to 10 * MMAP_LOTSAMISS, which is currently defined as 1000. So 16 bits should be plenty. Redefine it to unsigned short, making room for order as unsigned short in follow up commit. Link: https://lkml.kernel.org/r/20250609092729.274960-4-ryan.roberts@arm.com Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> Acked-by: David Hildenbrand <david@redhat.com> Reviewed-by: Jan Kara <jack@suse.cz> Cc: Chaitanya S Prakash <chaitanyas.prakash@arm.com> Cc: Will Deacon <will@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
18ebe55a92
commit
f5e8b140cd
@@ -1054,7 +1054,7 @@ struct file_ra_state {
|
||||
unsigned int size;
|
||||
unsigned int async_size;
|
||||
unsigned int ra_pages;
|
||||
unsigned int mmap_miss;
|
||||
unsigned short mmap_miss;
|
||||
loff_t prev_pos;
|
||||
};
|
||||
|
||||
|
||||
11
mm/filemap.c
11
mm/filemap.c
@@ -3217,7 +3217,7 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf)
|
||||
DEFINE_READAHEAD(ractl, file, ra, mapping, vmf->pgoff);
|
||||
struct file *fpin = NULL;
|
||||
unsigned long vm_flags = vmf->vma->vm_flags;
|
||||
unsigned int mmap_miss;
|
||||
unsigned short mmap_miss;
|
||||
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
/* Use the readahead code, even if readahead is disabled */
|
||||
@@ -3285,7 +3285,7 @@ static struct file *do_async_mmap_readahead(struct vm_fault *vmf,
|
||||
struct file_ra_state *ra = &file->f_ra;
|
||||
DEFINE_READAHEAD(ractl, file, ra, file->f_mapping, vmf->pgoff);
|
||||
struct file *fpin = NULL;
|
||||
unsigned int mmap_miss;
|
||||
unsigned short mmap_miss;
|
||||
|
||||
/* If we don't want any read-ahead, don't bother */
|
||||
if (vmf->vma->vm_flags & VM_RAND_READ || !ra->ra_pages)
|
||||
@@ -3605,7 +3605,7 @@ skip:
|
||||
static vm_fault_t filemap_map_folio_range(struct vm_fault *vmf,
|
||||
struct folio *folio, unsigned long start,
|
||||
unsigned long addr, unsigned int nr_pages,
|
||||
unsigned long *rss, unsigned int *mmap_miss)
|
||||
unsigned long *rss, unsigned short *mmap_miss)
|
||||
{
|
||||
vm_fault_t ret = 0;
|
||||
struct page *page = folio_page(folio, start);
|
||||
@@ -3667,7 +3667,7 @@ skip:
|
||||
|
||||
static vm_fault_t filemap_map_order0_folio(struct vm_fault *vmf,
|
||||
struct folio *folio, unsigned long addr,
|
||||
unsigned long *rss, unsigned int *mmap_miss)
|
||||
unsigned long *rss, unsigned short *mmap_miss)
|
||||
{
|
||||
vm_fault_t ret = 0;
|
||||
struct page *page = &folio->page;
|
||||
@@ -3709,7 +3709,8 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf,
|
||||
struct folio *folio;
|
||||
vm_fault_t ret = 0;
|
||||
unsigned long rss = 0;
|
||||
unsigned int nr_pages = 0, mmap_miss = 0, mmap_miss_saved, folio_type;
|
||||
unsigned int nr_pages = 0, folio_type;
|
||||
unsigned short mmap_miss = 0, mmap_miss_saved;
|
||||
|
||||
rcu_read_lock();
|
||||
folio = next_uptodate_folio(&xas, mapping, end_pgoff);
|
||||
|
||||
Reference in New Issue
Block a user