diff options
Diffstat (limited to 'kernel/cpuset.c')
-rw-r--r-- | kernel/cpuset.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index cc0395d7eba1..8c3c400cce91 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -1225,7 +1225,12 @@ static int attach_task(struct cpuset *cs, char *pidbuf, char **ppathbuf) | |||
1225 | 1225 | ||
1226 | task_lock(tsk); | 1226 | task_lock(tsk); |
1227 | oldcs = tsk->cpuset; | 1227 | oldcs = tsk->cpuset; |
1228 | if (!oldcs) { | 1228 | /* |
1229 | * After getting 'oldcs' cpuset ptr, be sure still not exiting. | ||
1230 | * If 'oldcs' might be the top_cpuset due to the_top_cpuset_hack | ||
1231 | * then fail this attach_task(), to avoid breaking top_cpuset.count. | ||
1232 | */ | ||
1233 | if (tsk->flags & PF_EXITING) { | ||
1229 | task_unlock(tsk); | 1234 | task_unlock(tsk); |
1230 | mutex_unlock(&callback_mutex); | 1235 | mutex_unlock(&callback_mutex); |
1231 | put_task_struct(tsk); | 1236 | put_task_struct(tsk); |