summaryrefslogtreecommitdiffstats
path: root/mm/migrate.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/migrate.c')
-rw-r--r--mm/migrate.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/mm/migrate.c b/mm/migrate.c
index 2cff57e7116e..962cb62c621f 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -767,12 +767,12 @@ recheck_buffers:
767 } 767 }
768 bh = bh->b_this_page; 768 bh = bh->b_this_page;
769 } while (bh != head); 769 } while (bh != head);
770 spin_unlock(&mapping->private_lock);
771 if (busy) { 770 if (busy) {
772 if (invalidated) { 771 if (invalidated) {
773 rc = -EAGAIN; 772 rc = -EAGAIN;
774 goto unlock_buffers; 773 goto unlock_buffers;
775 } 774 }
775 spin_unlock(&mapping->private_lock);
776 invalidate_bh_lrus(); 776 invalidate_bh_lrus();
777 invalidated = true; 777 invalidated = true;
778 goto recheck_buffers; 778 goto recheck_buffers;
@@ -805,6 +805,8 @@ recheck_buffers:
805 805
806 rc = MIGRATEPAGE_SUCCESS; 806 rc = MIGRATEPAGE_SUCCESS;
807unlock_buffers: 807unlock_buffers:
808 if (check_refs)
809 spin_unlock(&mapping->private_lock);
808 bh = head; 810 bh = head;
809 do { 811 do {
810 unlock_buffer(bh); 812 unlock_buffer(bh);
@@ -2328,16 +2330,13 @@ next:
2328static void migrate_vma_collect(struct migrate_vma *migrate) 2330static void migrate_vma_collect(struct migrate_vma *migrate)
2329{ 2331{
2330 struct mmu_notifier_range range; 2332 struct mmu_notifier_range range;
2331 struct mm_walk mm_walk; 2333 struct mm_walk mm_walk = {
2332 2334 .pmd_entry = migrate_vma_collect_pmd,
2333 mm_walk.pmd_entry = migrate_vma_collect_pmd; 2335 .pte_hole = migrate_vma_collect_hole,
2334 mm_walk.pte_entry = NULL; 2336 .vma = migrate->vma,
2335 mm_walk.pte_hole = migrate_vma_collect_hole; 2337 .mm = migrate->vma->vm_mm,
2336 mm_walk.hugetlb_entry = NULL; 2338 .private = migrate,
2337 mm_walk.test_walk = NULL; 2339 };
2338 mm_walk.vma = migrate->vma;
2339 mm_walk.mm = migrate->vma->vm_mm;
2340 mm_walk.private = migrate;
2341 2340
2342 mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, NULL, mm_walk.mm, 2341 mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, NULL, mm_walk.mm,
2343 migrate->start, 2342 migrate->start,