/* move to end of parent's list to avoid starvation */
                        write_lock_irq(&tasklist_lock);
                        remove_parent(p);
-                       add_parent(p, p->parent);
+                       add_parent(p);
                        write_unlock_irq(&tasklist_lock);
                        retval = ru ? getrusage(p, RUSAGE_BOTH, ru) : 0;
                        if (retval)
                                write_lock_irq(&tasklist_lock);
                                remove_parent(p);
                                p->parent = p->real_parent;
-                               add_parent(p, p->parent);
+                               add_parent(p);
                                do_notify_parent(p, SIGCHLD);
                                write_unlock_irq(&tasklist_lock);
                        } else
 
                current->group_leader = current;
                leader->group_leader = leader;
 
-               add_parent(current, current->parent);
-               add_parent(leader, leader->parent);
+               add_parent(current);
+               add_parent(leader);
                if (ptrace) {
                        current->ptrace = ptrace;
                        __ptrace_link(current, parent);
 
 #endif
 
 #define remove_parent(p)       list_del_init(&(p)->sibling)
-#define add_parent(p, parent)  list_add_tail(&(p)->sibling,&(parent)->children)
+#define add_parent(p)          list_add_tail(&(p)->sibling,&(p)->parent->children)
 
 #define REMOVE_LINKS(p) do {                                   \
        if (thread_group_leader(p))                             \
 #define SET_LINKS(p) do {                                      \
        if (thread_group_leader(p))                             \
                list_add_tail(&(p)->tasks,&init_task.tasks);    \
-       add_parent(p, (p)->parent);                             \
+       add_parent(p);                                          \
        } while (0)
 
 #define next_task(p)   list_entry((p)->tasks.next, struct task_struct, tasks)
 
 
        /* move to end of parent's list to avoid starvation */
        remove_parent(p);
-       add_parent(p, p->parent);
+       add_parent(p);
 
        write_unlock_irq(&tasklist_lock);