+ percpu_down_write(&cgroup_threadgroup_rwsem);
+ if (threadgroup) {
+ if (!thread_group_leader(tsk)) {
+ /*
+ * a race with de_thread from another thread's exec()
+ * may strip us of our leadership, if this happens,
+ * there is no choice but to throw this task away and
+ * try again; this is
+ * "double-double-toil-and-trouble-check locking".
+ */
+ percpu_up_write(&cgroup_threadgroup_rwsem);
+ put_task_struct(tsk);
+ goto retry_find_task;
+ }
+ }
+