From: William Lee Irwin III Split off from suparna's patches: Correct use_mm()/unuse_mm() to use task_lock() to protect task->mm. Signed-off-by: Andrew Morton --- 25-akpm/fs/aio.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletion(-) diff -puN fs/aio.c~correct-use_mm-unuse_mm-to-use-task_lock-to-protect-mm fs/aio.c --- 25/fs/aio.c~correct-use_mm-unuse_mm-to-use-task_lock-to-protect-mm 2004-06-01 00:20:19.144437192 -0700 +++ 25-akpm/fs/aio.c 2004-06-01 00:20:19.149436432 -0700 @@ -538,19 +538,25 @@ struct kioctx *lookup_ioctx(unsigned lon static void use_mm(struct mm_struct *mm) { - struct mm_struct *active_mm = current->active_mm; + struct mm_struct *active_mm; + atomic_inc(&mm->mm_count); + task_lock(current); + active_mm = current->active_mm; current->mm = mm; if (mm != active_mm) { current->active_mm = mm; activate_mm(active_mm, mm); } + task_unlock(current); mmdrop(active_mm); } static void unuse_mm(struct mm_struct *mm) { + task_lock(current); current->mm = NULL; + task_unlock(current); /* active_mm is still 'mm' */ enter_lazy_tlb(mm, current); } _