From: Liam R. Howlett Date: Tue, 16 Mar 2021 19:58:05 +0000 (-0400) Subject: task_mmu rcu fix X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=e011cc81666d7dd04f93f8979356b8fcdf6f0b82;p=users%2Fjedix%2Flinux-maple.git task_mmu rcu fix Signed-off-by: Liam R. Howlett --- diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 5dec40a64023..e1b6c070a5c7 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -1241,12 +1241,14 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, } tlb_gather_mmu(&tlb, mm, 0, -1); if (type == CLEAR_REFS_SOFT_DIRTY) { + mas_lock(&mas); mas_for_each(&mas, vma, ULONG_MAX) { if (!(vma->vm_flags & VM_SOFTDIRTY)) continue; mmap_read_unlock(mm); if (mmap_write_lock_killable(mm)) { count = -EINTR; + mas_unlock(&mas); goto out_mm; } mas_set(&mas, 0); @@ -1257,6 +1259,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, mmap_write_downgrade(mm); break; } + mas_unlock(&mas); mmu_notifier_range_init(&range, MMU_NOTIFY_SOFT_DIRTY, 0, NULL, mm, 0, -1UL);