summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/linux/init_task.h3
-rw-r--r--include/linux/sched.h19
-rw-r--r--kernel/exit.c2
-rw-r--r--kernel/fork.c4
-rw-r--r--kernel/sys.c2
5 files changed, 21 insertions, 9 deletions
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
index 5ac5945696a..cae35b6b9ae 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 4bbbe12880d..13df99fb276 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 68d27039ef7..6838d4d77e0 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 240aa6601f5..9d40367dd5d 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 2befc299129..304b5410d74 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;