mm: remove rest usage of VM_NONLINEAR and pte_file()
One bit in ->vm_flags is unused now! Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Dan Carpenter <dan.carpenter@oracle.com> Cc: Michal Hocko <mhocko@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
ac51b934f3
Коммит
0661a33611
|
@ -50,8 +50,7 @@
|
|||
*
|
||||
* You must not use multiple offset managers on a single address_space.
|
||||
* Otherwise, mm-core will be unable to tear down memory mappings as the VM will
|
||||
* no longer be linear. Please use VM_NONLINEAR in that case and implement your
|
||||
* own offset managers.
|
||||
* no longer be linear.
|
||||
*
|
||||
* This offset manager works on page-based addresses. That is, every argument
|
||||
* and return code (with the exception of drm_vma_node_offset_addr()) is given
|
||||
|
|
|
@ -138,7 +138,6 @@ extern unsigned int kobjsize(const void *objp);
|
|||
#define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */
|
||||
#define VM_NORESERVE 0x00200000 /* should the VM suppress accounting */
|
||||
#define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */
|
||||
#define VM_NONLINEAR 0x00800000 /* Is non-linear (remap_file_pages) */
|
||||
#define VM_ARCH_1 0x01000000 /* Architecture-specific flag */
|
||||
#define VM_ARCH_2 0x02000000
|
||||
#define VM_DONTDUMP 0x04000000 /* Do not include in the core dump */
|
||||
|
|
|
@ -54,7 +54,7 @@ static inline pgoff_t swp_offset(swp_entry_t entry)
|
|||
/* check whether a pte points to a swap entry */
|
||||
static inline int is_swap_pte(pte_t pte)
|
||||
{
|
||||
return !pte_none(pte) && !pte_present_nonuma(pte) && !pte_file(pte);
|
||||
return !pte_none(pte) && !pte_present_nonuma(pte);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -66,7 +66,6 @@ static inline swp_entry_t pte_to_swp_entry(pte_t pte)
|
|||
{
|
||||
swp_entry_t arch_entry;
|
||||
|
||||
BUG_ON(pte_file(pte));
|
||||
if (pte_swp_soft_dirty(pte))
|
||||
pte = pte_swp_clear_soft_dirty(pte);
|
||||
arch_entry = __pte_to_swp_entry(pte);
|
||||
|
@ -82,7 +81,6 @@ static inline pte_t swp_entry_to_pte(swp_entry_t entry)
|
|||
swp_entry_t arch_entry;
|
||||
|
||||
arch_entry = __swp_entry(swp_type(entry), swp_offset(entry));
|
||||
BUG_ON(pte_file(__swp_entry_to_pte(arch_entry)));
|
||||
return __swp_entry_to_pte(arch_entry);
|
||||
}
|
||||
|
||||
|
|
|
@ -130,7 +130,6 @@ static const struct trace_print_flags vmaflags_names[] = {
|
|||
{VM_ACCOUNT, "account" },
|
||||
{VM_NORESERVE, "noreserve" },
|
||||
{VM_HUGETLB, "hugetlb" },
|
||||
{VM_NONLINEAR, "nonlinear" },
|
||||
#if defined(CONFIG_X86)
|
||||
{VM_PAT, "pat" },
|
||||
#elif defined(CONFIG_PPC)
|
||||
|
|
2
mm/gup.c
2
mm/gup.c
|
@ -55,7 +55,7 @@ retry:
|
|||
*/
|
||||
if (likely(!(flags & FOLL_MIGRATION)))
|
||||
goto no_page;
|
||||
if (pte_none(pte) || pte_file(pte))
|
||||
if (pte_none(pte))
|
||||
goto no_page;
|
||||
entry = pte_to_swp_entry(pte);
|
||||
if (!is_migration_entry(entry))
|
||||
|
|
2
mm/ksm.c
2
mm/ksm.c
|
@ -1748,7 +1748,7 @@ int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
|
|||
*/
|
||||
if (*vm_flags & (VM_MERGEABLE | VM_SHARED | VM_MAYSHARE |
|
||||
VM_PFNMAP | VM_IO | VM_DONTEXPAND |
|
||||
VM_HUGETLB | VM_NONLINEAR | VM_MIXEDMAP))
|
||||
VM_HUGETLB | VM_MIXEDMAP))
|
||||
return 0; /* just ignore the advice */
|
||||
|
||||
#ifdef VM_SAO
|
||||
|
|
|
@ -155,7 +155,7 @@ static int swapin_walk_pmd_entry(pmd_t *pmd, unsigned long start,
|
|||
pte = *(orig_pte + ((index - start) / PAGE_SIZE));
|
||||
pte_unmap_unlock(orig_pte, ptl);
|
||||
|
||||
if (pte_present(pte) || pte_none(pte) || pte_file(pte))
|
||||
if (pte_present(pte) || pte_none(pte))
|
||||
continue;
|
||||
entry = pte_to_swp_entry(pte);
|
||||
if (unlikely(non_swap_entry(entry)))
|
||||
|
@ -296,7 +296,7 @@ static long madvise_remove(struct vm_area_struct *vma,
|
|||
|
||||
*prev = NULL; /* tell sys_madvise we drop mmap_sem */
|
||||
|
||||
if (vma->vm_flags & (VM_LOCKED|VM_NONLINEAR|VM_HUGETLB))
|
||||
if (vma->vm_flags & (VM_LOCKED | VM_HUGETLB))
|
||||
return -EINVAL;
|
||||
|
||||
f = vma->vm_file;
|
||||
|
|
|
@ -4926,10 +4926,7 @@ static struct page *mc_handle_file_pte(struct vm_area_struct *vma,
|
|||
return NULL;
|
||||
|
||||
mapping = vma->vm_file->f_mapping;
|
||||
if (pte_none(ptent))
|
||||
pgoff = linear_page_index(vma, addr);
|
||||
else /* pte_file(ptent) is true */
|
||||
pgoff = pte_to_pgoff(ptent);
|
||||
pgoff = linear_page_index(vma, addr);
|
||||
|
||||
/* page is moved even if it's not RSS of this task(page-faulted). */
|
||||
#ifdef CONFIG_SWAP
|
||||
|
@ -4961,7 +4958,7 @@ static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
|
|||
page = mc_handle_present_pte(vma, addr, ptent);
|
||||
else if (is_swap_pte(ptent))
|
||||
page = mc_handle_swap_pte(vma, addr, ptent, &ent);
|
||||
else if (pte_none(ptent) || pte_file(ptent))
|
||||
else if (pte_none(ptent))
|
||||
page = mc_handle_file_pte(vma, addr, ptent, &ent);
|
||||
|
||||
if (!page && !ent.val)
|
||||
|
|
70
mm/memory.c
70
mm/memory.c
|
@ -811,42 +811,40 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
|
|||
|
||||
/* pte contains position in swap or file, so copy. */
|
||||
if (unlikely(!pte_present(pte))) {
|
||||
if (!pte_file(pte)) {
|
||||
swp_entry_t entry = pte_to_swp_entry(pte);
|
||||
swp_entry_t entry = pte_to_swp_entry(pte);
|
||||
|
||||
if (likely(!non_swap_entry(entry))) {
|
||||
if (swap_duplicate(entry) < 0)
|
||||
return entry.val;
|
||||
if (likely(!non_swap_entry(entry))) {
|
||||
if (swap_duplicate(entry) < 0)
|
||||
return entry.val;
|
||||
|
||||
/* make sure dst_mm is on swapoff's mmlist. */
|
||||
if (unlikely(list_empty(&dst_mm->mmlist))) {
|
||||
spin_lock(&mmlist_lock);
|
||||
if (list_empty(&dst_mm->mmlist))
|
||||
list_add(&dst_mm->mmlist,
|
||||
&src_mm->mmlist);
|
||||
spin_unlock(&mmlist_lock);
|
||||
}
|
||||
rss[MM_SWAPENTS]++;
|
||||
} else if (is_migration_entry(entry)) {
|
||||
page = migration_entry_to_page(entry);
|
||||
/* make sure dst_mm is on swapoff's mmlist. */
|
||||
if (unlikely(list_empty(&dst_mm->mmlist))) {
|
||||
spin_lock(&mmlist_lock);
|
||||
if (list_empty(&dst_mm->mmlist))
|
||||
list_add(&dst_mm->mmlist,
|
||||
&src_mm->mmlist);
|
||||
spin_unlock(&mmlist_lock);
|
||||
}
|
||||
rss[MM_SWAPENTS]++;
|
||||
} else if (is_migration_entry(entry)) {
|
||||
page = migration_entry_to_page(entry);
|
||||
|
||||
if (PageAnon(page))
|
||||
rss[MM_ANONPAGES]++;
|
||||
else
|
||||
rss[MM_FILEPAGES]++;
|
||||
if (PageAnon(page))
|
||||
rss[MM_ANONPAGES]++;
|
||||
else
|
||||
rss[MM_FILEPAGES]++;
|
||||
|
||||
if (is_write_migration_entry(entry) &&
|
||||
is_cow_mapping(vm_flags)) {
|
||||
/*
|
||||
* COW mappings require pages in both
|
||||
* parent and child to be set to read.
|
||||
*/
|
||||
make_migration_entry_read(&entry);
|
||||
pte = swp_entry_to_pte(entry);
|
||||
if (pte_swp_soft_dirty(*src_pte))
|
||||
pte = pte_swp_mksoft_dirty(pte);
|
||||
set_pte_at(src_mm, addr, src_pte, pte);
|
||||
}
|
||||
if (is_write_migration_entry(entry) &&
|
||||
is_cow_mapping(vm_flags)) {
|
||||
/*
|
||||
* COW mappings require pages in both
|
||||
* parent and child to be set to read.
|
||||
*/
|
||||
make_migration_entry_read(&entry);
|
||||
pte = swp_entry_to_pte(entry);
|
||||
if (pte_swp_soft_dirty(*src_pte))
|
||||
pte = pte_swp_mksoft_dirty(pte);
|
||||
set_pte_at(src_mm, addr, src_pte, pte);
|
||||
}
|
||||
}
|
||||
goto out_set_pte;
|
||||
|
@ -1020,11 +1018,9 @@ int copy_page_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
|
|||
* readonly mappings. The tradeoff is that copy_page_range is more
|
||||
* efficient than faulting.
|
||||
*/
|
||||
if (!(vma->vm_flags & (VM_HUGETLB | VM_NONLINEAR |
|
||||
VM_PFNMAP | VM_MIXEDMAP))) {
|
||||
if (!vma->anon_vma)
|
||||
return 0;
|
||||
}
|
||||
if (!(vma->vm_flags & (VM_HUGETLB | VM_PFNMAP | VM_MIXEDMAP)) &&
|
||||
!vma->anon_vma)
|
||||
return 0;
|
||||
|
||||
if (is_vm_hugetlb_page(vma))
|
||||
return copy_hugetlb_page_range(dst_mm, src_mm, vma);
|
||||
|
|
|
@ -124,17 +124,13 @@ static void mincore_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
|
|||
ptep = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
|
||||
do {
|
||||
pte_t pte = *ptep;
|
||||
pgoff_t pgoff;
|
||||
|
||||
next = addr + PAGE_SIZE;
|
||||
if (pte_none(pte))
|
||||
mincore_unmapped_range(vma, addr, next, vec);
|
||||
else if (pte_present(pte))
|
||||
*vec = 1;
|
||||
else if (pte_file(pte)) {
|
||||
pgoff = pte_to_pgoff(pte);
|
||||
*vec = mincore_page(vma->vm_file->f_mapping, pgoff);
|
||||
} else { /* pte is a swap entry */
|
||||
else { /* pte is a swap entry */
|
||||
swp_entry_t entry = pte_to_swp_entry(pte);
|
||||
|
||||
if (non_swap_entry(entry)) {
|
||||
|
@ -145,9 +141,8 @@ static void mincore_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
|
|||
*vec = 1;
|
||||
} else {
|
||||
#ifdef CONFIG_SWAP
|
||||
pgoff = entry.val;
|
||||
*vec = mincore_page(swap_address_space(entry),
|
||||
pgoff);
|
||||
entry.val);
|
||||
#else
|
||||
WARN_ON(1);
|
||||
*vec = 1;
|
||||
|
|
|
@ -105,7 +105,7 @@ static unsigned long change_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
|
|||
}
|
||||
if (updated)
|
||||
pages++;
|
||||
} else if (IS_ENABLED(CONFIG_MIGRATION) && !pte_file(oldpte)) {
|
||||
} else if (IS_ENABLED(CONFIG_MIGRATION)) {
|
||||
swp_entry_t entry = pte_to_swp_entry(oldpte);
|
||||
|
||||
if (is_write_migration_entry(entry)) {
|
||||
|
|
|
@ -81,8 +81,6 @@ static pte_t move_soft_dirty_pte(pte_t pte)
|
|||
pte = pte_mksoft_dirty(pte);
|
||||
else if (is_swap_pte(pte))
|
||||
pte = pte_swp_mksoft_dirty(pte);
|
||||
else if (pte_file(pte))
|
||||
pte = pte_file_mksoft_dirty(pte);
|
||||
#endif
|
||||
return pte;
|
||||
}
|
||||
|
|
|
@ -86,10 +86,7 @@ SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags)
|
|||
(vma->vm_flags & VM_SHARED)) {
|
||||
get_file(file);
|
||||
up_read(&mm->mmap_sem);
|
||||
if (vma->vm_flags & VM_NONLINEAR)
|
||||
error = vfs_fsync(file, 1);
|
||||
else
|
||||
error = vfs_fsync_range(file, fstart, fend, 1);
|
||||
error = vfs_fsync_range(file, fstart, fend, 1);
|
||||
fput(file);
|
||||
if (error || start >= end)
|
||||
goto out;
|
||||
|
|
Загрузка…
Ссылка в новой задаче