From 6816a63b4cc3e4f401b56cf77d542cbbd60647e3 Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Mon, 5 Jul 2021 15:32:20 -0400 Subject: [PATCH] mm/gup: Fix potential sleep issue in __mm_populate Signed-off-by: Liam R. Howlett --- mm/gup.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index 0f375f6ef0a38..28ade832baf60 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -1551,10 +1551,8 @@ int __mm_populate(unsigned long start, unsigned long len, int ignore_errors) struct vm_area_struct *vma = NULL; int locked = 0; long ret = 0; - MA_STATE(mas, &mm->mm_mt, start, start); end = start + len; - for (nstart = start; nstart < end; nstart = nend) { /* * We want to fault in pages for [nstart; end) address range. @@ -1563,9 +1561,9 @@ int __mm_populate(unsigned long start, unsigned long len, int ignore_errors) if (!locked) { locked = 1; mmap_read_lock(mm); - vma = mas_find(&mas, end); + vma = find_vma_intersection(mm, start, end); } else if (nstart >= vma->vm_end) - vma = mas_next(&mas, end); + vma = vma_next(mm, vma); if (!vma) break; /* -- 2.50.1