pid: use pid_has_task() in pidfd_open()
Use the new pid_has_task() helper in pidfd_open(). This simplifies the code and avoids taking rcu_read_{lock,unlock}() and leads to overall nicer code. Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com> Reviewed-by: Oleg Nesterov <oleg@redhat.com> Link: https://lore.kernel.org/r/20191017101832.5985-5-christian.brauner@ubuntu.com
This commit is contained in:
parent
1722c14a20
commit
1e1d0f0b1a
12
kernel/pid.c
12
kernel/pid.c
@ -497,7 +497,7 @@ static int pidfd_create(struct pid *pid)
|
||||
*/
|
||||
SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags)
|
||||
{
|
||||
int fd, ret;
|
||||
int fd;
|
||||
struct pid *p;
|
||||
|
||||
if (flags)
|
||||
@ -510,13 +510,11 @@ SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags)
|
||||
if (!p)
|
||||
return -ESRCH;
|
||||
|
||||
ret = 0;
|
||||
rcu_read_lock();
|
||||
if (!pid_task(p, PIDTYPE_TGID))
|
||||
ret = -EINVAL;
|
||||
rcu_read_unlock();
|
||||
if (pid_has_task(p, PIDTYPE_TGID))
|
||||
fd = pidfd_create(p);
|
||||
else
|
||||
fd = -EINVAL;
|
||||
|
||||
fd = ret ?: pidfd_create(p);
|
||||
put_pid(p);
|
||||
return fd;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user