|
@@ -248,7 +248,7 @@ static int migrate_page_move_mapping(struct address_space *mapping,
|
|
|
|
|
|
expected_count = 2 + page_has_private(page);
|
|
expected_count = 2 + page_has_private(page);
|
|
if (page_count(page) != expected_count ||
|
|
if (page_count(page) != expected_count ||
|
|
- (struct page *)radix_tree_deref_slot(pslot) != page) {
|
|
|
|
|
|
+ radix_tree_deref_slot_protected(pslot, &mapping->tree_lock) != page) {
|
|
spin_unlock_irq(&mapping->tree_lock);
|
|
spin_unlock_irq(&mapping->tree_lock);
|
|
return -EAGAIN;
|
|
return -EAGAIN;
|
|
}
|
|
}
|
|
@@ -320,7 +320,7 @@ int migrate_huge_page_move_mapping(struct address_space *mapping,
|
|
|
|
|
|
expected_count = 2 + page_has_private(page);
|
|
expected_count = 2 + page_has_private(page);
|
|
if (page_count(page) != expected_count ||
|
|
if (page_count(page) != expected_count ||
|
|
- (struct page *)radix_tree_deref_slot(pslot) != page) {
|
|
|
|
|
|
+ radix_tree_deref_slot_protected(pslot, &mapping->tree_lock) != page) {
|
|
spin_unlock_irq(&mapping->tree_lock);
|
|
spin_unlock_irq(&mapping->tree_lock);
|
|
return -EAGAIN;
|
|
return -EAGAIN;
|
|
}
|
|
}
|