diff --git a/mm/share_pool.c b/mm/share_pool.c index f785b6ed418661d78a5cdb2c78a881eb5d64ab97..eb15ad9a24e3117fda3dff30d6a688caf2cbc360 100644 --- a/mm/share_pool.c +++ b/mm/share_pool.c @@ -549,8 +549,6 @@ int sp_group_add_task(int pid, int spg_id) tsk = find_task_by_vpid(pid); if (!tsk || (tsk->flags & PF_EXITING)) ret = -ESRCH; - else if (tsk->mm->sp_group) /* if it's already in a sp_group */ - ret = -EEXIST; else get_task_struct(tsk); @@ -560,6 +558,11 @@ int sp_group_add_task(int pid, int spg_id) goto out_unlock; } + if (!tsk->mm || tsk->mm->sp_group) { /* if it's already in a sp_group */ + ret = -EEXIST; + goto out_unlock; + } + spg = find_or_alloc_sp_group(spg_id); if (IS_ERR(spg)) { ret = PTR_ERR(spg);