diff options
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/memory.c | 5 | ||||
| -rw-r--r-- | mm/mempolicy.c | 14 | ||||
| -rw-r--r-- | mm/swap.c | 3 | 
3 files changed, 17 insertions, 5 deletions
diff --git a/mm/memory.c b/mm/memory.c index 9abc6008544b..85e80a57db29 100644 --- a/mm/memory.c +++ b/mm/memory.c  | |||
| @@ -623,11 +623,12 @@ static unsigned long zap_pte_range(struct mmu_gather *tlb, | |||
| 623 | (*zap_work)--; | 623 | (*zap_work)--; | 
| 624 | continue; | 624 | continue; | 
| 625 | } | 625 | } | 
| 626 | |||
| 627 | (*zap_work) -= PAGE_SIZE; | ||
| 628 | |||
| 626 | if (pte_present(ptent)) { | 629 | if (pte_present(ptent)) { | 
| 627 | struct page *page; | 630 | struct page *page; | 
| 628 | 631 | ||
| 629 | (*zap_work) -= PAGE_SIZE; | ||
| 630 | |||
| 631 | page = vm_normal_page(vma, addr, ptent); | 632 | page = vm_normal_page(vma, addr, ptent); | 
| 632 | if (unlikely(details) && page) { | 633 | if (unlikely(details) && page) { | 
| 633 | /* | 634 | /* | 
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 2a8206009422..b21869a39f0b 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c  | |||
| @@ -330,9 +330,19 @@ check_range(struct mm_struct *mm, unsigned long start, unsigned long end, | |||
| 330 | int err; | 330 | int err; | 
| 331 | struct vm_area_struct *first, *vma, *prev; | 331 | struct vm_area_struct *first, *vma, *prev; | 
| 332 | 332 | ||
| 333 | /* Clear the LRU lists so pages can be isolated */ | 333 | if (flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) { | 
| 334 | if (flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) | 334 | /* Must have swap device for migration */ | 
| 335 | if (nr_swap_pages <= 0) | ||
| 336 | return ERR_PTR(-ENODEV); | ||
| 337 | |||
| 338 | /* | ||
| 339 | * Clear the LRU lists so pages can be isolated. | ||
| 340 | * Note that pages may be moved off the LRU after we have | ||
| 341 | * drained them. Those pages will fail to migrate like other | ||
| 342 | * pages that may be busy. | ||
| 343 | */ | ||
| 335 | lru_add_drain_all(); | 344 | lru_add_drain_all(); | 
| 345 | } | ||
| 336 | 346 | ||
| 337 | first = find_vma(mm, start); | 347 | first = find_vma(mm, start); | 
| 338 | if (!first) | 348 | if (!first) | 
| @@ -393,7 +393,8 @@ void pagevec_strip(struct pagevec *pvec) | |||
| 393 | struct page *page = pvec->pages[i]; | 393 | struct page *page = pvec->pages[i]; | 
| 394 | 394 | ||
| 395 | if (PagePrivate(page) && !TestSetPageLocked(page)) { | 395 | if (PagePrivate(page) && !TestSetPageLocked(page)) { | 
| 396 | try_to_release_page(page, 0); | 396 | if (PagePrivate(page)) | 
| 397 | try_to_release_page(page, 0); | ||
| 397 | unlock_page(page); | 398 | unlock_page(page); | 
| 398 | } | 399 | } | 
| 399 | } | 400 | } | 
