thp: vma_adjust_trans_huge(): adjust file-backed VMA too
This series of patches adds support for using PMD page table entries to map DAX files. We expect NV-DIMMs to start showing up that are many gigabytes in size and the memory consumption of 4kB PTEs will be astronomical. The patch series leverages much of the Transparant Huge Pages infrastructure, going so far as to borrow one of Kirill's patches from his THP page cache series. This patch (of 10): Since we're going to have huge pages in page cache, we need to call adjust file-backed VMA, which potentially can contain huge pages. For now we call it for all VMAs. Probably later we will need to introduce a flag to indicate that the VMA has huge pages. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com> Acked-by: Hillf Danton <dhillf@gmail.com> Cc: Theodore Ts'o <tytso@mit.edu> Cc: Jan Kara <jack@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:
parent
ce75799b83
commit
e1b9996b85
|
@ -122,7 +122,7 @@ extern void split_huge_page_pmd_mm(struct mm_struct *mm, unsigned long address,
|
||||||
#endif
|
#endif
|
||||||
extern int hugepage_madvise(struct vm_area_struct *vma,
|
extern int hugepage_madvise(struct vm_area_struct *vma,
|
||||||
unsigned long *vm_flags, int advice);
|
unsigned long *vm_flags, int advice);
|
||||||
extern void __vma_adjust_trans_huge(struct vm_area_struct *vma,
|
extern void vma_adjust_trans_huge(struct vm_area_struct *vma,
|
||||||
unsigned long start,
|
unsigned long start,
|
||||||
unsigned long end,
|
unsigned long end,
|
||||||
long adjust_next);
|
long adjust_next);
|
||||||
|
@ -138,15 +138,6 @@ static inline int pmd_trans_huge_lock(pmd_t *pmd, struct vm_area_struct *vma,
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline void vma_adjust_trans_huge(struct vm_area_struct *vma,
|
|
||||||
unsigned long start,
|
|
||||||
unsigned long end,
|
|
||||||
long adjust_next)
|
|
||||||
{
|
|
||||||
if (!vma->anon_vma || vma->vm_ops)
|
|
||||||
return;
|
|
||||||
__vma_adjust_trans_huge(vma, start, end, adjust_next);
|
|
||||||
}
|
|
||||||
static inline int hpage_nr_pages(struct page *page)
|
static inline int hpage_nr_pages(struct page *page)
|
||||||
{
|
{
|
||||||
if (unlikely(PageTransHuge(page)))
|
if (unlikely(PageTransHuge(page)))
|
||||||
|
|
|
@ -2991,7 +2991,7 @@ static void split_huge_page_address(struct mm_struct *mm,
|
||||||
split_huge_page_pmd_mm(mm, address, pmd);
|
split_huge_page_pmd_mm(mm, address, pmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __vma_adjust_trans_huge(struct vm_area_struct *vma,
|
void vma_adjust_trans_huge(struct vm_area_struct *vma,
|
||||||
unsigned long start,
|
unsigned long start,
|
||||||
unsigned long end,
|
unsigned long end,
|
||||||
long adjust_next)
|
long adjust_next)
|
||||||
|
|
Loading…
Reference in New Issue