• Oleg Nesterov's avatar
    kill PF_BORROWED_MM in favour of PF_KTHREAD · 246bb0b1
    Oleg Nesterov authored
    Kill PF_BORROWED_MM.  Change use_mm/unuse_mm to not play with ->flags, and
    do s/PF_BORROWED_MM/PF_KTHREAD/ for a couple of other users.
    
    No functional changes yet.  But this allows us to do further
    fixes/cleanups.
    
    oom_kill/ptrace/etc often check "p->mm != NULL" to filter out the
    kthreads, this is wrong because of use_mm().  The problem with
    PF_BORROWED_MM is that we need task_lock() to avoid races.  With this
    patch we can check PF_KTHREAD directly, or use a simple lockless helper:
    
    	/* The result must not be dereferenced !!! */
    	struct mm_struct *__get_task_mm(struct task_struct *tsk)
    	{
    		if (tsk->flags & PF_KTHREAD)
    			return NULL;
    		return tsk->mm;
    	}
    
    Note also ecard_task().  It runs with ->mm != NULL, but it's the kernel
    thread without PF_BORROWED_MM.
    Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
    Cc: Roland McGrath <roland@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    246bb0b1
fork.c 41.2 KB