diff options
Diffstat (limited to 'mm/internal.h')
| -rw-r--r-- | mm/internal.h | 27 | 
1 files changed, 26 insertions, 1 deletions
diff --git a/mm/internal.h b/mm/internal.h index 0d5f720c75ab..3cf20ab3ca01 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -165,6 +165,9 @@ extern void post_alloc_hook(struct page *page, unsigned int order,  					gfp_t gfp_flags);  extern int user_min_free_kbytes; +extern void zone_pcp_update(struct zone *zone); +extern void zone_pcp_reset(struct zone *zone); +  #if defined CONFIG_COMPACTION || defined CONFIG_CMA  /* @@ -290,7 +293,8 @@ static inline bool is_data_mapping(vm_flags_t flags)  /* mm/util.c */  void __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma, -		struct vm_area_struct *prev, struct rb_node *rb_parent); +		struct vm_area_struct *prev); +void __vma_unlink_list(struct mm_struct *mm, struct vm_area_struct *vma);  #ifdef CONFIG_MMU  extern long populate_vma_page_range(struct vm_area_struct *vma, @@ -362,6 +366,27 @@ vma_address(struct page *page, struct vm_area_struct *vma)  	return max(start, vma->vm_start);  } +static inline struct file *maybe_unlock_mmap_for_io(struct vm_fault *vmf, +						    struct file *fpin) +{ +	int flags = vmf->flags; + +	if (fpin) +		return fpin; + +	/* +	 * FAULT_FLAG_RETRY_NOWAIT means we don't want to wait on page locks or +	 * anything, so we only pin the file and drop the mmap_sem if only +	 * FAULT_FLAG_ALLOW_RETRY is set. +	 */ +	if ((flags & (FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT)) == +	    FAULT_FLAG_ALLOW_RETRY) { +		fpin = get_file(vmf->vma->vm_file); +		up_read(&vmf->vma->vm_mm->mmap_sem); +	} +	return fpin; +} +  #else /* !CONFIG_MMU */  static inline void clear_page_mlock(struct page *page) { }  static inline void mlock_vma_page(struct page *page) { }  |