From: Liam R. Howlett <Liam.Howlett@Oracle.com>
Date: Tue, 16 Mar 2021 20:00:31 +0000 (-0400)
Subject: swapfile rcu fix
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fmaple_spf;p=users%2Fjedix%2Flinux-maple.git

swapfile rcu fix

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
---

diff --git a/mm/swapfile.c b/mm/swapfile.c
index 3992959c0872..5c2a2615e835 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -2105,6 +2105,7 @@ static int unuse_mm(struct mm_struct *mm, unsigned int type,
 	MA_STATE(mas, &mm->mm_mt, 0, 0);
 
 	mmap_read_lock(mm);
+	mas_lock(&mas);
 	mas_for_each(&mas, vma, ULONG_MAX) {
 		if (vma->anon_vma) {
 			ret = unuse_vma(vma, type, frontswap,
@@ -2112,8 +2113,13 @@ static int unuse_mm(struct mm_struct *mm, unsigned int type,
 			if (ret)
 				break;
 		}
+
+		mas_unlock(&mas);
+		mas_pause(&mas);
 		cond_resched();
+		mas_lock(&mas);
 	}
+	mas_unlock(&mas);
 	mmap_read_unlock(mm);
 	return ret;
 }