Messages in this thread Patch in this message | | | From | Mike Rapoport <> | Subject | [PATCH 3/7] userfaultfd: shmem: introduce vma_is_shmem | Date | Thu, 4 Aug 2016 11:14:14 +0300 |
| |
Currently userfault relies on vma_is_anonymous and vma_is_hugetlb to ensure compatibility of a VMA with userfault. Introduction of vma_is_shmem allows detection if tmpfs backed VMAs, so that they may be used with userfaultfd. Current implementation presumes usage of vma_is_shmem only by slow path routines in userfaultfd, therefore the vma_is_shmem is not made inline to leave the few remaining free bits in vm_flags.
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com> --- include/linux/mm.h | 10 ++++++++++ mm/shmem.c | 5 +++++ 2 files changed, 15 insertions(+)
diff --git a/include/linux/mm.h b/include/linux/mm.h index 1dedeb8..7a20398 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1343,6 +1343,16 @@ static inline bool vma_is_anonymous(struct vm_area_struct *vma) return !vma->vm_ops; } +#ifdef CONFIG_SHMEM +/* + * The vma_is_shmem is not inline because it is used only by slow + * paths in userfault. + */ +bool vma_is_shmem(struct vm_area_struct *vma); +#else +static inline bool vma_is_shmem(struct vm_area_struct *vma) { return false; } +#endif + static inline int stack_guard_page_start(struct vm_area_struct *vma, unsigned long addr) { diff --git a/mm/shmem.c b/mm/shmem.c index fcf560c..881b7a0 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -194,6 +194,11 @@ static const struct inode_operations shmem_dir_inode_operations; static const struct inode_operations shmem_special_inode_operations; static const struct vm_operations_struct shmem_vm_ops; +bool vma_is_shmem(struct vm_area_struct *vma) +{ + return vma->vm_ops == &shmem_vm_ops; +} + static LIST_HEAD(shmem_swaplist); static DEFINE_MUTEX(shmem_swaplist_mutex); -- 1.9.1
| |