* Vlastimil Babka <vbabka@xxxxxxx> [220120 07:46]: > On 12/1/21 15:30, Liam Howlett wrote: > > From: "Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx> > > > > Signed-off-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx> > > Acked-by: Vlastimil Babka <vbabka@xxxxxxx> > > > --- > > mm/swapfile.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/mm/swapfile.c b/mm/swapfile.c > > index e59e08ef46e1..21c88b0944f9 100644 > > --- a/mm/swapfile.c > > +++ b/mm/swapfile.c > > @@ -2103,15 +2103,18 @@ static int unuse_mm(struct mm_struct *mm, unsigned int type, > > { > > struct vm_area_struct *vma; > > int ret = 0; > > + MA_STATE(mas, &mm->mm_mt, 0, 0); > > > > mmap_read_lock(mm); > > - for (vma = mm->mmap; vma; vma = vma->vm_next) { > > + mas_for_each(&mas, vma, ULONG_MAX) { > > if (vma->anon_vma) { > > ret = unuse_vma(vma, type, frontswap, > > fs_pages_to_unuse); > > if (ret) > > break; > > } > > + > > + mas_pause(&mas); > > AFAIU unnecessary for the resched as we don't drop anything and keep the > mmap_lock? > (and without that it could be VMA_ITERATOR?) Agreed. This was missed with the conversion of the locking. Thanks. > > > cond_resched(); > > } > > mmap_read_unlock(mm); >