diff options
author | Andrea Arcangeli <aarcange@redhat.com> | 2021-05-19 18:55:21 -0400 |
---|---|---|
committer | Andrea Arcangeli <aarcange@redhat.com> | 2023-11-11 22:03:37 -0500 |
commit | d8f1dc1351e3bb960a61375e7c908a8f558672ae (patch) | |
tree | 88f59151acc7417ea9a3fe053f2a8ba3f4470b7c | |
parent | b6ec57e1e972c2824a4a83d690ad6d15c204c26c (diff) | |
download | aa-d8f1dc1351e3bb960a61375e7c908a8f558672ae.tar.gz |
mm: mm_take_all_locks: add cond_resched()
Add cond_resched() to potentially long tight loops.
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
-rw-r--r-- | mm/mmap.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/mm/mmap.c b/mm/mmap.c index a0a4eadc8779d5..31fdd05adaa163 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -3604,6 +3604,7 @@ int mm_take_all_locks(struct mm_struct *mm) mutex_lock(&mm_all_locks_mutex); for (vma = mm->mmap; vma; vma = vma->vm_next) { + cond_resched(); if (signal_pending(current)) goto out_unlock; if (vma->vm_file && vma->vm_file->f_mapping && @@ -3612,6 +3613,7 @@ int mm_take_all_locks(struct mm_struct *mm) } for (vma = mm->mmap; vma; vma = vma->vm_next) { + cond_resched(); if (signal_pending(current)) goto out_unlock; if (vma->vm_file && vma->vm_file->f_mapping && @@ -3620,11 +3622,14 @@ int mm_take_all_locks(struct mm_struct *mm) } for (vma = mm->mmap; vma; vma = vma->vm_next) { + cond_resched(); if (signal_pending(current)) goto out_unlock; if (vma->anon_vma) - list_for_each_entry(avc, &vma->anon_vma_chain, same_vma) + list_for_each_entry(avc, &vma->anon_vma_chain, same_vma) { + cond_resched(); vm_lock_anon_vma(mm, avc->anon_vma); + } } return 0; @@ -3683,9 +3688,12 @@ void mm_drop_all_locks(struct mm_struct *mm) BUG_ON(!mutex_is_locked(&mm_all_locks_mutex)); for (vma = mm->mmap; vma; vma = vma->vm_next) { + cond_resched(); if (vma->anon_vma) - list_for_each_entry(avc, &vma->anon_vma_chain, same_vma) + list_for_each_entry(avc, &vma->anon_vma_chain, same_vma) { + cond_resched(); vm_unlock_anon_vma(avc->anon_vma); + } if (vma->vm_file && vma->vm_file->f_mapping) vm_unlock_mapping(vma->vm_file->f_mapping); } |