migration_entry_wait() needs to take the rcu read lock so that page counts can be guaranteed to be stable after one rcu grace period. Signed-off-by: Michel Lespinasse <walken@xxxxxxxxxx> --- mm/migrate.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/mm/migrate.c b/mm/migrate.c index 666e4e6..6f3b5db 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -193,6 +193,7 @@ void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, struct page *page; ptep = pte_offset_map_lock(mm, pmd, address, &ptl); + rcu_read_lock(); pte = *ptep; if (!is_swap_pte(pte)) goto out; @@ -212,11 +213,13 @@ void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, */ if (!get_page_unless_zero(page)) goto out; + rcu_read_unlock(); pte_unmap_unlock(ptep, ptl); wait_on_page_locked(page); put_page(page); return; out: + rcu_read_unlock(); pte_unmap_unlock(ptep, ptl); } -- 1.7.3.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>