diff --git a/mm/filemap.c b/mm/filemap.c
index b74bc1e5015c..d8b538bd1404 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -3351,13 +3351,14 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf)
struct address_space *mapping = file->f_mapping;
DEFINE_READAHEAD(ractl, file, ra, mapping, vmf->pgoff);
struct file *fpin = NULL;
- vm_flags_t vm_flags = vmf->vma->vm_flags;
+ struct vm_area_struct *vma = vmf->vma;
bool force_thp_readahead = false;
unsigned int thp_order = 0;
unsigned short mmap_miss;
/* Use the readahead code, even if readahead is disabled */
- if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && (vm_flags & VM_HUGEPAGE)) {
+ if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) &&
+ vma_test(vma, VMA_HUGEPAGE_BIT)) {
/*
* Cap max THP order at 2MB: this is the common PMD-sized
* hugepage size, and it avoids memory pressure from very@@ -3377,20 +3378,21 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf)
* If we don't want any read-ahead, don't bother.
* VM_EXEC case below is already intended for random access.
*/
- if ((vm_flags & (VM_RAND_READ | VM_EXEC)) == VM_RAND_READ)
+ if (vma_test(vma, VMA_RAND_READ_BIT) &&
+ !vma_test(vma, VMA_EXEC_BIT))
return fpin;
if (!ra->ra_pages)
return fpin;
- if (vm_flags & VM_SEQ_READ) {
+ if (vma_test(vma, VMA_SEQ_READ_BIT)) {
fpin = maybe_unlock_mmap_for_io(vmf, fpin);
page_cache_sync_ra(&ractl, ra->ra_pages);
return fpin;
}
}
- if (!(vm_flags & (VM_SEQ_READ | VM_EXEC))) {
+ if (!vma_test_any(vma, VMA_SEQ_READ_BIT, VMA_EXEC_BIT)) {
/* Avoid banging the cache line if not needed */
mmap_miss = READ_ONCE(ra->mmap_miss);
if (mmap_miss < MMAP_LOTSAMISS * 10)@@ -3414,7 +3416,7 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf)
* Fetch two folios so we get the chance to actually
* readahead, unless we've been told not to.
*/
- if (!(vm_flags & VM_RAND_READ))
+ if (!vma_test(vma, VMA_RAND_READ_BIT))
ra->size *= 2;
ra->async_size = folio_nr_pages;
ra->order = thp_order;
@@ -3422,7 +3424,7 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf)
return fpin;
}
- if (vm_flags & VM_EXEC) {
+ if (vma_test(vma, VMA_EXEC_BIT)) {
/*
* Allow arch to request a preferred minimum folio order for
* executable memory. This can often be beneficial to@@ -3477,7 +3479,7 @@ static struct file *do_async_mmap_readahead(struct vm_fault *vmf,
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)
+ if (vma_test(vmf->vma, VMA_RAND_READ_BIT) || !ra->ra_pages)
return fpin;
/*
@@ -3491,7 +3493,7 @@ static struct file *do_async_mmap_readahead(struct vm_fault *vmf,
* keep the counter symmetric.
*/
if (likely(!folio_test_locked(folio)) &&
- !(vmf->vma->vm_flags & (VM_SEQ_READ | VM_EXEC))) {
+ !vma_test_any(vmf->vma, VMA_SEQ_READ_BIT, VMA_EXEC_BIT)) {
mmap_miss = READ_ONCE(ra->mmap_miss);
if (mmap_miss)
WRITE_ONCE(ra->mmap_miss, --mmap_miss);@@ -3524,7 +3526,7 @@ static vm_fault_t filemap_fault_recheck_pte_none(struct vm_fault *vmf)
* scenarios. Recheck the PTE without PT lock firstly, thereby reducing
* the number of times we hold PT lock.
*/
- if (!(vma->vm_flags & VM_LOCKED))
+ if (!vma_test(vma, VMA_LOCKED_BIT))
return 0;
if (!(vmf->flags & FAULT_FLAG_ORIG_PTE_VALID))
@@ -4000,7 +4002,7 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf,
if ((map_ret & VM_FAULT_NOPAGE) &&
!(vmf->flags & FAULT_FLAG_TRIED) &&
!folio_test_workingset(folio) &&
- !(vma->vm_flags & (VM_SEQ_READ | VM_EXEC))) {
+ !vma_test_any(vma, VMA_SEQ_READ_BIT, VMA_EXEC_BIT)) {
unsigned short mmap_miss;
mmap_miss = READ_ONCE(file->f_ra.mmap_miss);
--
2.56.0