aboutsummaryrefslogtreecommitdiffstats
path: root/mm/hugetlb.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r--mm/hugetlb.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index c03273807182..2697806746d0 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -2380,8 +2380,11 @@ retry_avoidcopy:
2380 * When the original hugepage is shared one, it does not have 2380 * When the original hugepage is shared one, it does not have
2381 * anon_vma prepared. 2381 * anon_vma prepared.
2382 */ 2382 */
2383 if (unlikely(anon_vma_prepare(vma))) 2383 if (unlikely(anon_vma_prepare(vma))) {
2384 /* Caller expects lock to be held */
2385 spin_lock(&mm->page_table_lock);
2384 return VM_FAULT_OOM; 2386 return VM_FAULT_OOM;
2387 }
2385 2388
2386 copy_huge_page(new_page, old_page, address, vma); 2389 copy_huge_page(new_page, old_page, address, vma);
2387 __SetPageUptodate(new_page); 2390 __SetPageUptodate(new_page);
@@ -2665,7 +2668,8 @@ out_page_table_lock:
2665 unlock_page(pagecache_page); 2668 unlock_page(pagecache_page);
2666 put_page(pagecache_page); 2669 put_page(pagecache_page);
2667 } 2670 }
2668 unlock_page(page); 2671 if (page != pagecache_page)
2672 unlock_page(page);
2669 2673
2670out_mutex: 2674out_mutex:
2671 mutex_unlock(&hugetlb_instantiation_mutex); 2675 mutex_unlock(&hugetlb_instantiation_mutex);