mm: Convert i_mmap_lock to a mutex
Straightforward conversion of i_mmap_lock to a mutex. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Acked-by: Hugh Dickins <hughd@google.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: David Miller <davem@davemloft.net> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Russell King <rmk@arm.linux.org.uk> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Jeff Dike <jdike@addtoit.com> Cc: Richard Weinberger <richard@nod.at> Cc: Tony Luck <tony.luck@intel.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Mel Gorman <mel@csn.ul.ie> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Nick Piggin <npiggin@kernel.dk> Cc: Namhyung Kim <namhyung@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
97a894136f
commit
3d48ae45e7
14
mm/hugetlb.c
14
mm/hugetlb.c
@@ -2205,7 +2205,7 @@ void __unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start,
|
||||
unsigned long sz = huge_page_size(h);
|
||||
|
||||
/*
|
||||
* A page gathering list, protected by per file i_mmap_lock. The
|
||||
* A page gathering list, protected by per file i_mmap_mutex. The
|
||||
* lock is used to avoid list corruption from multiple unmapping
|
||||
* of the same page since we are using page->lru.
|
||||
*/
|
||||
@@ -2274,9 +2274,9 @@ void __unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start,
|
||||
void unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start,
|
||||
unsigned long end, struct page *ref_page)
|
||||
{
|
||||
spin_lock(&vma->vm_file->f_mapping->i_mmap_lock);
|
||||
mutex_lock(&vma->vm_file->f_mapping->i_mmap_mutex);
|
||||
__unmap_hugepage_range(vma, start, end, ref_page);
|
||||
spin_unlock(&vma->vm_file->f_mapping->i_mmap_lock);
|
||||
mutex_unlock(&vma->vm_file->f_mapping->i_mmap_mutex);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2308,7 +2308,7 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
* this mapping should be shared between all the VMAs,
|
||||
* __unmap_hugepage_range() is called as the lock is already held
|
||||
*/
|
||||
spin_lock(&mapping->i_mmap_lock);
|
||||
mutex_lock(&mapping->i_mmap_mutex);
|
||||
vma_prio_tree_foreach(iter_vma, &iter, &mapping->i_mmap, pgoff, pgoff) {
|
||||
/* Do not unmap the current VMA */
|
||||
if (iter_vma == vma)
|
||||
@@ -2326,7 +2326,7 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
address, address + huge_page_size(h),
|
||||
page);
|
||||
}
|
||||
spin_unlock(&mapping->i_mmap_lock);
|
||||
mutex_unlock(&mapping->i_mmap_mutex);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -2810,7 +2810,7 @@ void hugetlb_change_protection(struct vm_area_struct *vma,
|
||||
BUG_ON(address >= end);
|
||||
flush_cache_range(vma, address, end);
|
||||
|
||||
spin_lock(&vma->vm_file->f_mapping->i_mmap_lock);
|
||||
mutex_lock(&vma->vm_file->f_mapping->i_mmap_mutex);
|
||||
spin_lock(&mm->page_table_lock);
|
||||
for (; address < end; address += huge_page_size(h)) {
|
||||
ptep = huge_pte_offset(mm, address);
|
||||
@@ -2825,7 +2825,7 @@ void hugetlb_change_protection(struct vm_area_struct *vma,
|
||||
}
|
||||
}
|
||||
spin_unlock(&mm->page_table_lock);
|
||||
spin_unlock(&vma->vm_file->f_mapping->i_mmap_lock);
|
||||
mutex_unlock(&vma->vm_file->f_mapping->i_mmap_mutex);
|
||||
|
||||
flush_tlb_range(vma, start, end);
|
||||
}
|
||||
|
Reference in New Issue
Block a user