diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 5ac5945696a0..cae35b6b9aec 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h @@ -67,9 +67,6 @@ .posix_timers = LIST_HEAD_INIT(sig.posix_timers), \ .cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \ .rlim = INIT_RLIMITS, \ - .pgrp = 0, \ - .tty_old_pgrp = NULL, \ - { .__session = 0}, \ } extern struct nsproxy init_nsproxy; diff --git a/include/linux/sched.h b/include/linux/sched.h index 4bbbe12880d7..13df99fb2769 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -429,7 +429,17 @@ struct signal_struct { cputime_t it_prof_incr, it_virt_incr; /* job control IDs */ - pid_t pgrp; + + /* + * pgrp and session fields are deprecated. + * use the task_session_Xnr and task_pgrp_Xnr routines below + */ + + union { + pid_t pgrp __deprecated; + pid_t __pgrp; + }; + struct pid *tty_old_pgrp; union { @@ -1196,6 +1206,11 @@ static inline void set_task_session(struct task_struct *tsk, pid_t session) tsk->signal->__session = session; } +static inline void set_task_pgrp(struct task_struct *tsk, pid_t pgrp) +{ + tsk->signal->__pgrp = pgrp; +} + static inline struct pid *task_pid(struct task_struct *task) { return task->pids[PIDTYPE_PID].pid; @@ -1268,7 +1283,7 @@ static inline pid_t task_tgid_vnr(struct task_struct *tsk) static inline pid_t task_pgrp_nr(struct task_struct *tsk) { - return tsk->signal->pgrp; + return tsk->signal->__pgrp; } pid_t task_pgrp_nr_ns(struct task_struct *tsk, struct pid_namespace *ns); diff --git a/kernel/exit.c b/kernel/exit.c index 68d27039ef7d..6838d4d77e05 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -306,7 +306,7 @@ void __set_special_pids(pid_t session, pid_t pgrp) } if (task_pgrp_nr(curr) != pgrp) { detach_pid(curr, PIDTYPE_PGID); - curr->signal->pgrp = pgrp; + set_task_pgrp(curr, pgrp); attach_pid(curr, PIDTYPE_PGID, find_pid(pgrp)); } } diff --git a/kernel/fork.c b/kernel/fork.c index 240aa6601f5b..9d40367dd5db 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1293,13 +1293,13 @@ static struct task_struct *copy_process(unsigned long clone_flags, if (clone_flags & CLONE_NEWPID) { p->nsproxy->pid_ns->child_reaper = p; p->signal->tty = NULL; - p->signal->pgrp = p->pid; + set_task_pgrp(p, p->pid); set_task_session(p, p->pid); attach_pid(p, PIDTYPE_PGID, pid); attach_pid(p, PIDTYPE_SID, pid); } else { p->signal->tty = current->signal->tty; - p->signal->pgrp = task_pgrp_nr(current); + set_task_pgrp(p, task_pgrp_nr(current)); set_task_session(p, task_session_nr(current)); attach_pid(p, PIDTYPE_PGID, task_pgrp(current)); diff --git a/kernel/sys.c b/kernel/sys.c index 2befc299129d..304b5410d746 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -977,7 +977,7 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid) detach_pid(p, PIDTYPE_PGID); pid = find_vpid(pgid); attach_pid(p, PIDTYPE_PGID, pid); - p->signal->pgrp = pid_nr(pid); + set_task_pgrp(p, pid_nr(pid)); } err = 0;