mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'mm-stable-2026-02-18-19-48' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
Pull more MM updates from Andrew Morton: - "mm/vmscan: fix demotion targets checks in reclaim/demotion" fixes a couple of issues in the demotion code - pages were failed demotion and were finding themselves demoted into disallowed nodes (Bing Jiao) - "Remove XA_ZERO from error recovery of dup_mmap()" fixes a rare mapledtree race and performs a number of cleanups (Liam Howlett) - "mm: add bitmap VMA flag helpers and convert all mmap_prepare to use them" implements a lot of cleanups following on from the conversion of the VMA flags into a bitmap (Lorenzo Stoakes) - "support batch checking of references and unmapping for large folios" implements batching to greatly improve the performance of reclaiming clean file-backed large folios (Baolin Wang) - "selftests/mm: add memory failure selftests" does as claimed (Miaohe Lin) * tag 'mm-stable-2026-02-18-19-48' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm: (36 commits) mm/page_alloc: clear page->private in free_pages_prepare() selftests/mm: add memory failure dirty pagecache test selftests/mm: add memory failure clean pagecache test selftests/mm: add memory failure anonymous page test mm: rmap: support batched unmapping for file large folios arm64: mm: implement the architecture-specific clear_flush_young_ptes() arm64: mm: support batch clearing of the young flag for large folios arm64: mm: factor out the address and ptep alignment into a new helper mm: rmap: support batched checks of the references for large folios tools/testing/vma: add VMA userland tests for VMA flag functions tools/testing/vma: separate out vma_internal.h into logical headers tools/testing/vma: separate VMA userland tests into separate files mm: make vm_area_desc utilise vma_flags_t only mm: update all remaining mmap_prepare users to use vma_flags_t mm: update shmem_[kernel]_file_*() functions to use vma_flags_t mm: update secretmem to use VMA flags on mmap_prepare mm: update hugetlbfs to use VMA flags on mmap_prepare mm: add basic VMA flag operation helper functions tools: bitmap: add missing bitmap_[subset(), andnot()] mm: add mk_vma_flags() bitmap flag macro helper ...
This commit is contained in:
@@ -11845,6 +11845,7 @@ F: include/linux/memory-failure.h
|
||||
F: include/trace/events/memory-failure.h
|
||||
F: mm/hwpoison-inject.c
|
||||
F: mm/memory-failure.c
|
||||
F: tools/testing/selftests/mm/memory-failure.c
|
||||
|
||||
HYCON HY46XX TOUCHSCREEN SUPPORT
|
||||
M: Giulio Benetti <giulio.benetti@benettiengineering.com>
|
||||
|
||||
@@ -1648,10 +1648,10 @@ extern void contpte_clear_full_ptes(struct mm_struct *mm, unsigned long addr,
|
||||
extern pte_t contpte_get_and_clear_full_ptes(struct mm_struct *mm,
|
||||
unsigned long addr, pte_t *ptep,
|
||||
unsigned int nr, int full);
|
||||
extern int contpte_ptep_test_and_clear_young(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep);
|
||||
extern int contpte_ptep_clear_flush_young(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep);
|
||||
int contpte_test_and_clear_young_ptes(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep, unsigned int nr);
|
||||
int contpte_clear_flush_young_ptes(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep, unsigned int nr);
|
||||
extern void contpte_wrprotect_ptes(struct mm_struct *mm, unsigned long addr,
|
||||
pte_t *ptep, unsigned int nr);
|
||||
extern int contpte_ptep_set_access_flags(struct vm_area_struct *vma,
|
||||
@@ -1823,7 +1823,7 @@ static inline int ptep_test_and_clear_young(struct vm_area_struct *vma,
|
||||
if (likely(!pte_valid_cont(orig_pte)))
|
||||
return __ptep_test_and_clear_young(vma, addr, ptep);
|
||||
|
||||
return contpte_ptep_test_and_clear_young(vma, addr, ptep);
|
||||
return contpte_test_and_clear_young_ptes(vma, addr, ptep, 1);
|
||||
}
|
||||
|
||||
#define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH
|
||||
@@ -1835,7 +1835,18 @@ static inline int ptep_clear_flush_young(struct vm_area_struct *vma,
|
||||
if (likely(!pte_valid_cont(orig_pte)))
|
||||
return __ptep_clear_flush_young(vma, addr, ptep);
|
||||
|
||||
return contpte_ptep_clear_flush_young(vma, addr, ptep);
|
||||
return contpte_clear_flush_young_ptes(vma, addr, ptep, 1);
|
||||
}
|
||||
|
||||
#define clear_flush_young_ptes clear_flush_young_ptes
|
||||
static inline int clear_flush_young_ptes(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep,
|
||||
unsigned int nr)
|
||||
{
|
||||
if (likely(nr == 1 && !pte_cont(__ptep_get(ptep))))
|
||||
return __ptep_clear_flush_young(vma, addr, ptep);
|
||||
|
||||
return contpte_clear_flush_young_ptes(vma, addr, ptep, nr);
|
||||
}
|
||||
|
||||
#define wrprotect_ptes wrprotect_ptes
|
||||
|
||||
+40
-22
@@ -26,6 +26,26 @@ static inline pte_t *contpte_align_down(pte_t *ptep)
|
||||
return PTR_ALIGN_DOWN(ptep, sizeof(*ptep) * CONT_PTES);
|
||||
}
|
||||
|
||||
static inline pte_t *contpte_align_addr_ptep(unsigned long *start,
|
||||
unsigned long *end, pte_t *ptep,
|
||||
unsigned int nr)
|
||||
{
|
||||
/*
|
||||
* Note: caller must ensure these nr PTEs are consecutive (present)
|
||||
* PTEs that map consecutive pages of the same large folio within a
|
||||
* single VMA and a single page table.
|
||||
*/
|
||||
if (pte_cont(__ptep_get(ptep + nr - 1)))
|
||||
*end = ALIGN(*end, CONT_PTE_SIZE);
|
||||
|
||||
if (pte_cont(__ptep_get(ptep))) {
|
||||
*start = ALIGN_DOWN(*start, CONT_PTE_SIZE);
|
||||
ptep = contpte_align_down(ptep);
|
||||
}
|
||||
|
||||
return ptep;
|
||||
}
|
||||
|
||||
static void contpte_try_unfold_partial(struct mm_struct *mm, unsigned long addr,
|
||||
pte_t *ptep, unsigned int nr)
|
||||
{
|
||||
@@ -488,8 +508,9 @@ pte_t contpte_get_and_clear_full_ptes(struct mm_struct *mm,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(contpte_get_and_clear_full_ptes);
|
||||
|
||||
int contpte_ptep_test_and_clear_young(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep)
|
||||
int contpte_test_and_clear_young_ptes(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep,
|
||||
unsigned int nr)
|
||||
{
|
||||
/*
|
||||
* ptep_clear_flush_young() technically requires us to clear the access
|
||||
@@ -498,41 +519,45 @@ int contpte_ptep_test_and_clear_young(struct vm_area_struct *vma,
|
||||
* contig range when the range is covered by a single folio, we can get
|
||||
* away with clearing young for the whole contig range here, so we avoid
|
||||
* having to unfold.
|
||||
*
|
||||
* The 'nr' means consecutive (present) PTEs that map consecutive pages
|
||||
* of the same large folio in a single VMA and a single page table.
|
||||
*/
|
||||
|
||||
unsigned long end = addr + nr * PAGE_SIZE;
|
||||
int young = 0;
|
||||
int i;
|
||||
|
||||
ptep = contpte_align_down(ptep);
|
||||
addr = ALIGN_DOWN(addr, CONT_PTE_SIZE);
|
||||
|
||||
for (i = 0; i < CONT_PTES; i++, ptep++, addr += PAGE_SIZE)
|
||||
ptep = contpte_align_addr_ptep(&addr, &end, ptep, nr);
|
||||
for (; addr != end; ptep++, addr += PAGE_SIZE)
|
||||
young |= __ptep_test_and_clear_young(vma, addr, ptep);
|
||||
|
||||
return young;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(contpte_ptep_test_and_clear_young);
|
||||
EXPORT_SYMBOL_GPL(contpte_test_and_clear_young_ptes);
|
||||
|
||||
int contpte_ptep_clear_flush_young(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep)
|
||||
int contpte_clear_flush_young_ptes(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep,
|
||||
unsigned int nr)
|
||||
{
|
||||
int young;
|
||||
|
||||
young = contpte_ptep_test_and_clear_young(vma, addr, ptep);
|
||||
young = contpte_test_and_clear_young_ptes(vma, addr, ptep, nr);
|
||||
|
||||
if (young) {
|
||||
unsigned long end = addr + nr * PAGE_SIZE;
|
||||
|
||||
contpte_align_addr_ptep(&addr, &end, ptep, nr);
|
||||
/*
|
||||
* See comment in __ptep_clear_flush_young(); same rationale for
|
||||
* eliding the trailing DSB applies here.
|
||||
*/
|
||||
addr = ALIGN_DOWN(addr, CONT_PTE_SIZE);
|
||||
__flush_tlb_range_nosync(vma->vm_mm, addr, addr + CONT_PTE_SIZE,
|
||||
__flush_tlb_range_nosync(vma->vm_mm, addr, end,
|
||||
PAGE_SIZE, true, 3);
|
||||
}
|
||||
|
||||
return young;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(contpte_ptep_clear_flush_young);
|
||||
EXPORT_SYMBOL_GPL(contpte_clear_flush_young_ptes);
|
||||
|
||||
void contpte_wrprotect_ptes(struct mm_struct *mm, unsigned long addr,
|
||||
pte_t *ptep, unsigned int nr)
|
||||
@@ -569,14 +594,7 @@ void contpte_clear_young_dirty_ptes(struct vm_area_struct *vma,
|
||||
unsigned long start = addr;
|
||||
unsigned long end = start + nr * PAGE_SIZE;
|
||||
|
||||
if (pte_cont(__ptep_get(ptep + nr - 1)))
|
||||
end = ALIGN(end, CONT_PTE_SIZE);
|
||||
|
||||
if (pte_cont(__ptep_get(ptep))) {
|
||||
start = ALIGN_DOWN(start, CONT_PTE_SIZE);
|
||||
ptep = contpte_align_down(ptep);
|
||||
}
|
||||
|
||||
ptep = contpte_align_addr_ptep(&start, &end, ptep, nr);
|
||||
__clear_young_dirty_ptes(vma, start, ptep, (end - start) / PAGE_SIZE, flags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(contpte_clear_young_dirty_ptes);
|
||||
|
||||
@@ -83,7 +83,7 @@ static int sgx_encl_create(struct sgx_encl *encl, struct sgx_secs *secs)
|
||||
encl_size = secs->size + PAGE_SIZE;
|
||||
|
||||
backing = shmem_file_setup("SGX backing", encl_size + (encl_size >> 5),
|
||||
VM_NORESERVE);
|
||||
mk_vma_flags(VMA_NORESERVE_BIT));
|
||||
if (IS_ERR(backing)) {
|
||||
ret = PTR_ERR(backing);
|
||||
goto err_out_shrink;
|
||||
|
||||
+3
-3
@@ -306,7 +306,7 @@ static unsigned zero_mmap_capabilities(struct file *file)
|
||||
/* can't do an in-place private mapping if there's no MMU */
|
||||
static inline int private_mapping_ok(struct vm_area_desc *desc)
|
||||
{
|
||||
return is_nommu_shared_mapping(desc->vm_flags);
|
||||
return is_nommu_shared_vma_flags(&desc->vma_flags);
|
||||
}
|
||||
#else
|
||||
|
||||
@@ -360,7 +360,7 @@ static int mmap_mem_prepare(struct vm_area_desc *desc)
|
||||
|
||||
desc->vm_ops = &mmap_mem_ops;
|
||||
|
||||
/* Remap-pfn-range will mark the range VM_IO. */
|
||||
/* Remap-pfn-range will mark the range with the I/O flag. */
|
||||
mmap_action_remap_full(desc, desc->pgoff);
|
||||
/* We filter remap errors to -EAGAIN. */
|
||||
desc->action.error_hook = mmap_filter_error;
|
||||
@@ -520,7 +520,7 @@ static int mmap_zero_prepare(struct vm_area_desc *desc)
|
||||
#ifndef CONFIG_MMU
|
||||
return -ENOSYS;
|
||||
#endif
|
||||
if (desc->vm_flags & VM_SHARED)
|
||||
if (vma_desc_test_flags(desc, VMA_SHARED_BIT))
|
||||
return shmem_zero_setup_desc(desc);
|
||||
|
||||
desc->action.success_hook = mmap_zero_private_success;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include "dax-private.h"
|
||||
#include "bus.h"
|
||||
|
||||
static int __check_vma(struct dev_dax *dev_dax, vm_flags_t vm_flags,
|
||||
static int __check_vma(struct dev_dax *dev_dax, vma_flags_t flags,
|
||||
unsigned long start, unsigned long end, struct file *file,
|
||||
const char *func)
|
||||
{
|
||||
@@ -24,7 +24,7 @@ static int __check_vma(struct dev_dax *dev_dax, vm_flags_t vm_flags,
|
||||
return -ENXIO;
|
||||
|
||||
/* prevent private mappings from being established */
|
||||
if ((vm_flags & VM_MAYSHARE) != VM_MAYSHARE) {
|
||||
if (!vma_flags_test(&flags, VMA_MAYSHARE_BIT)) {
|
||||
dev_info_ratelimited(dev,
|
||||
"%s: %s: fail, attempted private mapping\n",
|
||||
current->comm, func);
|
||||
@@ -53,7 +53,7 @@ static int __check_vma(struct dev_dax *dev_dax, vm_flags_t vm_flags,
|
||||
static int check_vma(struct dev_dax *dev_dax, struct vm_area_struct *vma,
|
||||
const char *func)
|
||||
{
|
||||
return __check_vma(dev_dax, vma->vm_flags, vma->vm_start, vma->vm_end,
|
||||
return __check_vma(dev_dax, vma->flags, vma->vm_start, vma->vm_end,
|
||||
vma->vm_file, func);
|
||||
}
|
||||
|
||||
@@ -306,14 +306,14 @@ static int dax_mmap_prepare(struct vm_area_desc *desc)
|
||||
* fault time.
|
||||
*/
|
||||
id = dax_read_lock();
|
||||
rc = __check_vma(dev_dax, desc->vm_flags, desc->start, desc->end, filp,
|
||||
rc = __check_vma(dev_dax, desc->vma_flags, desc->start, desc->end, filp,
|
||||
__func__);
|
||||
dax_read_unlock(id);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
desc->vm_ops = &dax_vm_ops;
|
||||
desc->vm_flags |= VM_HUGEPAGE;
|
||||
vma_desc_set_flags(desc, VMA_HUGEPAGE_BIT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -186,15 +186,16 @@ int drm_gem_object_init(struct drm_device *dev, struct drm_gem_object *obj,
|
||||
{
|
||||
struct vfsmount *huge_mnt;
|
||||
struct file *filp;
|
||||
const vma_flags_t flags = mk_vma_flags(VMA_NORESERVE_BIT);
|
||||
|
||||
drm_gem_private_object_init(dev, obj, size);
|
||||
|
||||
huge_mnt = drm_gem_get_huge_mnt(dev);
|
||||
if (huge_mnt)
|
||||
filp = shmem_file_setup_with_mnt(huge_mnt, "drm mm object",
|
||||
size, VM_NORESERVE);
|
||||
size, flags);
|
||||
else
|
||||
filp = shmem_file_setup("drm mm object", size, VM_NORESERVE);
|
||||
filp = shmem_file_setup("drm mm object", size, flags);
|
||||
|
||||
if (IS_ERR(filp))
|
||||
return PTR_ERR(filp);
|
||||
|
||||
@@ -499,7 +499,7 @@ static int __create_shmem(struct drm_i915_private *i915,
|
||||
resource_size_t size,
|
||||
unsigned int flags)
|
||||
{
|
||||
unsigned long shmem_flags = VM_NORESERVE;
|
||||
const vma_flags_t shmem_flags = mk_vma_flags(VMA_NORESERVE_BIT);
|
||||
struct vfsmount *huge_mnt;
|
||||
struct file *filp;
|
||||
|
||||
|
||||
@@ -200,7 +200,8 @@ static int i915_ttm_tt_shmem_populate(struct ttm_device *bdev,
|
||||
struct address_space *mapping;
|
||||
gfp_t mask;
|
||||
|
||||
filp = shmem_file_setup("i915-shmem-tt", size, VM_NORESERVE);
|
||||
filp = shmem_file_setup("i915-shmem-tt", size,
|
||||
mk_vma_flags(VMA_NORESERVE_BIT));
|
||||
if (IS_ERR(filp))
|
||||
return PTR_ERR(filp);
|
||||
|
||||
|
||||
@@ -19,7 +19,8 @@ struct file *shmem_create_from_data(const char *name, void *data, size_t len)
|
||||
struct file *file;
|
||||
int err;
|
||||
|
||||
file = shmem_file_setup(name, PAGE_ALIGN(len), VM_NORESERVE);
|
||||
file = shmem_file_setup(name, PAGE_ALIGN(len),
|
||||
mk_vma_flags(VMA_NORESERVE_BIT));
|
||||
if (IS_ERR(file))
|
||||
return file;
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ static void ttm_tt_fini_shmem(struct kunit *test)
|
||||
err = ttm_tt_init(tt, bo, 0, caching, 0);
|
||||
KUNIT_ASSERT_EQ(test, err, 0);
|
||||
|
||||
shmem = shmem_file_setup("ttm swap", BO_SIZE, 0);
|
||||
shmem = shmem_file_setup("ttm swap", BO_SIZE, EMPTY_VMA_FLAGS);
|
||||
tt->swap_storage = shmem;
|
||||
|
||||
ttm_tt_fini(tt);
|
||||
|
||||
@@ -178,5 +178,6 @@ EXPORT_SYMBOL_GPL(ttm_backup_bytes_avail);
|
||||
*/
|
||||
struct file *ttm_backup_shmem_create(loff_t size)
|
||||
{
|
||||
return shmem_file_setup("ttm shmem backup", size, 0);
|
||||
return shmem_file_setup("ttm shmem backup", size,
|
||||
EMPTY_VMA_FLAGS);
|
||||
}
|
||||
|
||||
@@ -330,7 +330,7 @@ int ttm_tt_swapout(struct ttm_device *bdev, struct ttm_tt *ttm,
|
||||
struct page *to_page;
|
||||
int i, ret;
|
||||
|
||||
swap_storage = shmem_file_setup("ttm swap", size, 0);
|
||||
swap_storage = shmem_file_setup("ttm swap", size, EMPTY_VMA_FLAGS);
|
||||
if (IS_ERR(swap_storage)) {
|
||||
pr_err("Failed allocating swap storage\n");
|
||||
return PTR_ERR(swap_storage);
|
||||
|
||||
@@ -394,7 +394,7 @@ static const struct vm_operations_struct aio_ring_vm_ops = {
|
||||
|
||||
static int aio_ring_mmap_prepare(struct vm_area_desc *desc)
|
||||
{
|
||||
desc->vm_flags |= VM_DONTEXPAND;
|
||||
vma_desc_set_flags(desc, VMA_DONTEXPAND_BIT);
|
||||
desc->vm_ops = &aio_ring_vm_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
+3
-2
@@ -473,11 +473,12 @@ static int erofs_file_mmap_prepare(struct vm_area_desc *desc)
|
||||
if (!IS_DAX(file_inode(desc->file)))
|
||||
return generic_file_readonly_mmap_prepare(desc);
|
||||
|
||||
if ((desc->vm_flags & VM_SHARED) && (desc->vm_flags & VM_MAYWRITE))
|
||||
if (vma_desc_test_flags(desc, VMA_SHARED_BIT) &&
|
||||
vma_desc_test_flags(desc, VMA_MAYWRITE_BIT))
|
||||
return -EINVAL;
|
||||
|
||||
desc->vm_ops = &erofs_dax_vm_ops;
|
||||
desc->vm_flags |= VM_HUGEPAGE;
|
||||
vma_desc_set_flags(desc, VMA_HUGEPAGE_BIT);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
|
||||
+2
-2
@@ -818,13 +818,13 @@ static int ext4_file_mmap_prepare(struct vm_area_desc *desc)
|
||||
* We don't support synchronous mappings for non-DAX files and
|
||||
* for DAX files if underneath dax_device is not synchronous.
|
||||
*/
|
||||
if (!daxdev_mapping_supported(desc->vm_flags, file_inode(file), dax_dev))
|
||||
if (!daxdev_mapping_supported(desc, file_inode(file), dax_dev))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
file_accessed(file);
|
||||
if (IS_DAX(file_inode(file))) {
|
||||
desc->vm_ops = &ext4_dax_vm_ops;
|
||||
desc->vm_flags |= VM_HUGEPAGE;
|
||||
vma_desc_set_flags(desc, VMA_HUGEPAGE_BIT);
|
||||
} else {
|
||||
desc->vm_ops = &ext4_file_vm_ops;
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ static int hugetlbfs_file_mmap_prepare(struct vm_area_desc *desc)
|
||||
loff_t len, vma_len;
|
||||
int ret;
|
||||
struct hstate *h = hstate_file(file);
|
||||
vm_flags_t vm_flags;
|
||||
vma_flags_t vma_flags;
|
||||
|
||||
/*
|
||||
* vma address alignment (but not the pgoff alignment) has
|
||||
@@ -119,7 +119,7 @@ static int hugetlbfs_file_mmap_prepare(struct vm_area_desc *desc)
|
||||
* way when do_mmap unwinds (may be important on powerpc
|
||||
* and ia64).
|
||||
*/
|
||||
desc->vm_flags |= VM_HUGETLB | VM_DONTEXPAND;
|
||||
vma_desc_set_flags(desc, VMA_HUGETLB_BIT, VMA_DONTEXPAND_BIT);
|
||||
desc->vm_ops = &hugetlb_vm_ops;
|
||||
|
||||
/*
|
||||
@@ -148,23 +148,23 @@ static int hugetlbfs_file_mmap_prepare(struct vm_area_desc *desc)
|
||||
|
||||
ret = -ENOMEM;
|
||||
|
||||
vm_flags = desc->vm_flags;
|
||||
vma_flags = desc->vma_flags;
|
||||
/*
|
||||
* for SHM_HUGETLB, the pages are reserved in the shmget() call so skip
|
||||
* reserving here. Note: only for SHM hugetlbfs file, the inode
|
||||
* flag S_PRIVATE is set.
|
||||
*/
|
||||
if (inode->i_flags & S_PRIVATE)
|
||||
vm_flags |= VM_NORESERVE;
|
||||
vma_flags_set(&vma_flags, VMA_NORESERVE_BIT);
|
||||
|
||||
if (hugetlb_reserve_pages(inode,
|
||||
desc->pgoff >> huge_page_order(h),
|
||||
len >> huge_page_shift(h), desc,
|
||||
vm_flags) < 0)
|
||||
vma_flags) < 0)
|
||||
goto out;
|
||||
|
||||
ret = 0;
|
||||
if ((desc->vm_flags & VM_WRITE) && inode->i_size < len)
|
||||
if (vma_desc_test_flags(desc, VMA_WRITE_BIT) && inode->i_size < len)
|
||||
i_size_write(inode, len);
|
||||
out:
|
||||
inode_unlock(inode);
|
||||
@@ -1527,7 +1527,7 @@ static int get_hstate_idx(int page_size_log)
|
||||
* otherwise hugetlb_reserve_pages reserves one less hugepages than intended.
|
||||
*/
|
||||
struct file *hugetlb_file_setup(const char *name, size_t size,
|
||||
vm_flags_t acctflag, int creat_flags,
|
||||
vma_flags_t acctflag, int creat_flags,
|
||||
int page_size_log)
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
+1
-1
@@ -276,7 +276,7 @@ static int ntfs_file_mmap_prepare(struct vm_area_desc *desc)
|
||||
struct file *file = desc->file;
|
||||
struct inode *inode = file_inode(file);
|
||||
struct ntfs_inode *ni = ntfs_i(inode);
|
||||
bool rw = desc->vm_flags & VM_WRITE;
|
||||
const bool rw = vma_desc_test_flags(desc, VMA_WRITE_BIT);
|
||||
int err;
|
||||
|
||||
/* Avoid any operation if inode is bad. */
|
||||
|
||||
+2
-2
@@ -411,8 +411,8 @@ static int orangefs_file_mmap_prepare(struct vm_area_desc *desc)
|
||||
"orangefs_file_mmap: called on %pD\n", file);
|
||||
|
||||
/* set the sequential readahead hint */
|
||||
desc->vm_flags |= VM_SEQ_READ;
|
||||
desc->vm_flags &= ~VM_RAND_READ;
|
||||
vma_desc_set_flags(desc, VMA_SEQ_READ_BIT);
|
||||
vma_desc_clear_flags(desc, VMA_RAND_READ_BIT);
|
||||
|
||||
file_accessed(file);
|
||||
desc->vm_ops = &orangefs_file_vm_ops;
|
||||
|
||||
@@ -264,7 +264,7 @@ out:
|
||||
*/
|
||||
static int ramfs_nommu_mmap_prepare(struct vm_area_desc *desc)
|
||||
{
|
||||
if (!is_nommu_shared_mapping(desc->vm_flags))
|
||||
if (!is_nommu_shared_vma_flags(&desc->vma_flags))
|
||||
return -ENOSYS;
|
||||
|
||||
file_accessed(desc->file);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user