|
@@ -699,6 +699,11 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
|
|
dst_pte = huge_pte_alloc(dst, addr);
|
|
dst_pte = huge_pte_alloc(dst, addr);
|
|
if (!dst_pte)
|
|
if (!dst_pte)
|
|
goto nomem;
|
|
goto nomem;
|
|
|
|
+
|
|
|
|
+ /* If the pagetables are shared don't copy or take references */
|
|
|
|
+ if (dst_pte == src_pte)
|
|
|
|
+ continue;
|
|
|
|
+
|
|
spin_lock(&dst->page_table_lock);
|
|
spin_lock(&dst->page_table_lock);
|
|
spin_lock(&src->page_table_lock);
|
|
spin_lock(&src->page_table_lock);
|
|
if (!pte_none(*src_pte)) {
|
|
if (!pte_none(*src_pte)) {
|