diff options
| -rw-r--r-- | mm/khugepaged.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 93d5f87c00d5..566148489e33 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c | |||
| @@ -891,9 +891,10 @@ static bool __collapse_huge_page_swapin(struct mm_struct *mm, | |||
| 891 | /* do_swap_page returns VM_FAULT_RETRY with released mmap_sem */ | 891 | /* do_swap_page returns VM_FAULT_RETRY with released mmap_sem */ |
| 892 | if (ret & VM_FAULT_RETRY) { | 892 | if (ret & VM_FAULT_RETRY) { |
| 893 | down_read(&mm->mmap_sem); | 893 | down_read(&mm->mmap_sem); |
| 894 | /* vma is no longer available, don't continue to swapin */ | 894 | if (hugepage_vma_revalidate(mm, address)) { |
| 895 | if (hugepage_vma_revalidate(mm, address)) | 895 | /* vma is no longer available, don't continue to swapin */ |
| 896 | return false; | 896 | return false; |
| 897 | } | ||
| 897 | /* check if the pmd is still valid */ | 898 | /* check if the pmd is still valid */ |
| 898 | if (mm_find_pmd(mm, address) != pmd) | 899 | if (mm_find_pmd(mm, address) != pmd) |
| 899 | return false; | 900 | return false; |
| @@ -969,7 +970,7 @@ static void collapse_huge_page(struct mm_struct *mm, | |||
| 969 | 970 | ||
| 970 | /* | 971 | /* |
| 971 | * __collapse_huge_page_swapin always returns with mmap_sem locked. | 972 | * __collapse_huge_page_swapin always returns with mmap_sem locked. |
| 972 | * If it fails, release mmap_sem and jump directly out. | 973 | * If it fails, we release mmap_sem and jump out_nolock. |
| 973 | * Continuing to collapse causes inconsistency. | 974 | * Continuing to collapse causes inconsistency. |
| 974 | */ | 975 | */ |
| 975 | if (!__collapse_huge_page_swapin(mm, vma, address, pmd)) { | 976 | if (!__collapse_huge_page_swapin(mm, vma, address, pmd)) { |
