|
@@ -2408,7 +2408,14 @@ retry_avoidcopy:
|
|
BUG_ON(page_count(old_page) != 1);
|
|
BUG_ON(page_count(old_page) != 1);
|
|
BUG_ON(huge_pte_none(pte));
|
|
BUG_ON(huge_pte_none(pte));
|
|
spin_lock(&mm->page_table_lock);
|
|
spin_lock(&mm->page_table_lock);
|
|
- goto retry_avoidcopy;
|
|
|
|
|
|
+ ptep = huge_pte_offset(mm, address & huge_page_mask(h));
|
|
|
|
+ if (likely(pte_same(huge_ptep_get(ptep), pte)))
|
|
|
|
+ goto retry_avoidcopy;
|
|
|
|
+ /*
|
|
|
|
+ * race occurs while re-acquiring page_table_lock, and
|
|
|
|
+ * our job is done.
|
|
|
|
+ */
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
WARN_ON_ONCE(1);
|
|
WARN_ON_ONCE(1);
|
|
}
|
|
}
|