mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 14:11:20 +00:00
[PATCH] pid: make session_of_pgrp use struct pid instead of pid_t
To properly implement a pid namespace I need to deal exclusively in terms of struct pid, because pid_t values become ambiguous. To this end session_of_pgrp is transformed to take and return a struct pid pointer. To avoid the need to worry about reference counting I now require my caller to hold the appropriate locks. Leaving callers repsonsible for increasing the reference count if they need access to the result outside of the locks. Since session_of_pgrp currently only has one caller and that caller simply uses only test the result for equality with another process group, the locking change means I don't actually have to acquire the tasklist_lock at all. tiocspgrp is also modified to take and release the lock. The logic there is a little more complicated but nothing I won't need when I convert pgrp of a tty to a struct pid pointer. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8d42db189c
commit
04a2e6a5cb
3 changed files with 26 additions and 17 deletions
|
@ -185,21 +185,19 @@ repeat:
|
|||
* This checks not only the pgrp, but falls back on the pid if no
|
||||
* satisfactory pgrp is found. I dunno - gdb doesn't work correctly
|
||||
* without this...
|
||||
*
|
||||
* The caller must hold rcu lock or the tasklist lock.
|
||||
*/
|
||||
int session_of_pgrp(int pgrp)
|
||||
struct pid *session_of_pgrp(struct pid *pgrp)
|
||||
{
|
||||
struct task_struct *p;
|
||||
int sid = 0;
|
||||
struct pid *sid = NULL;
|
||||
|
||||
read_lock(&tasklist_lock);
|
||||
|
||||
p = find_task_by_pid_type(PIDTYPE_PGID, pgrp);
|
||||
p = pid_task(pgrp, PIDTYPE_PGID);
|
||||
if (p == NULL)
|
||||
p = find_task_by_pid(pgrp);
|
||||
p = pid_task(pgrp, PIDTYPE_PID);
|
||||
if (p != NULL)
|
||||
sid = process_session(p);
|
||||
|
||||
read_unlock(&tasklist_lock);
|
||||
sid = task_session(p);
|
||||
|
||||
return sid;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue