From: Simon Guo <wei.guo.simon@xxxxxxxxx> There is a typo/bug in count_mm_mlocked_page_nr() for "&" which is mistakenly used with "&&". Also add more checks and some minor change based on Kirill's previous comment. Suggested-by: Kirill A. Shutemov <kirill@xxxxxxxxxxxxx> Signed-off-by: Simon Guo <wei.guo.simon@xxxxxxxxx> --- mm/mlock.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/mlock.c b/mm/mlock.c index fafbb78..145a425 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -641,9 +641,11 @@ static int count_mm_mlocked_page_nr(struct mm_struct *mm, vma = mm->mmap; for (; vma ; vma = vma->vm_next) { + if (start >= vma->vm_end) + continue; if (start + len <= vma->vm_start) break; - if (vma->vm_flags && VM_LOCKED) { + if (vma->vm_flags & VM_LOCKED) { if (start > vma->vm_start) count -= (start - vma->vm_start); if (start + len < vma->vm_end) { @@ -654,7 +656,7 @@ static int count_mm_mlocked_page_nr(struct mm_struct *mm, } } - return (PAGE_ALIGN(count) >> PAGE_SHIFT); + return count >> PAGE_SHIFT; } static __must_check int do_mlock(unsigned long start, size_t len, vm_flags_t flags) -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html