[PATCH v2 10/61] kernel/fork: Use maple tree for dup_mmap() during forking
From: Hillf Danton <hidden>
Date: 2021-08-18 08:36:28
From: Hillf Danton <hidden>
Date: 2021-08-18 08:36:28
On Tue, 17 Aug 2021 15:47:11 +0000 Liam R. Howlett wrote:
static inline void mmget(struct mm_struct *mm)
{
+ mt_set_in_rcu(&mm->mm_mt);
atomic_inc(&mm->mm_users);
}
static inline bool mmget_not_zero(struct mm_struct *mm)
{
+ /*
+ * There is a race below during task tear down that can cause the maple
+ * tree to enter rcu mode with only a single user. If this race
+ * happens, the result would be that the maple tree nodes would remain
+ * active for an extra RCU read cycle.
+ */
+ mt_set_in_rcu(&mm->mm_mt);
return atomic_inc_not_zero(&mm->mm_users);
}
Nit, leave the mm with zero refcount intact.
if (atomic_inc_not_zero(&mm->mm_users)) {
mt_set_in_rcu(&mm->mm_mt);
return true;
}
return false;