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;