Lines Matching refs:pid
49 struct pid init_struct_pid = {
112 void put_pid(struct pid *pid) in put_pid() argument
116 if (!pid) in put_pid()
119 ns = pid->numbers[pid->level].ns; in put_pid()
120 if (refcount_dec_and_test(&pid->count)) { in put_pid()
121 kmem_cache_free(ns->pid_cachep, pid); in put_pid()
129 struct pid *pid = container_of(rhp, struct pid, rcu); in delayed_put_pid() local
130 put_pid(pid); in delayed_put_pid()
133 void free_pid(struct pid *pid) in free_pid() argument
140 for (i = 0; i <= pid->level; i++) { in free_pid()
141 struct upid *upid = pid->numbers + i; in free_pid()
163 call_rcu(&pid->rcu, delayed_put_pid); in free_pid()
166 struct pid *alloc_pid(struct pid_namespace *ns, pid_t *set_tid, in alloc_pid()
169 struct pid *pid; in alloc_pid() local
187 pid = kmem_cache_alloc(ns->pid_cachep, GFP_KERNEL); in alloc_pid()
188 if (!pid) in alloc_pid()
192 pid->level = ns->level; in alloc_pid()
251 pid->numbers[i].nr = nr; in alloc_pid()
252 pid->numbers[i].ns = tmp; in alloc_pid()
267 refcount_set(&pid->count, 1); in alloc_pid()
268 spin_lock_init(&pid->lock); in alloc_pid()
270 INIT_HLIST_HEAD(&pid->tasks[type]); in alloc_pid()
272 init_waitqueue_head(&pid->wait_pidfd); in alloc_pid()
273 INIT_HLIST_HEAD(&pid->inodes); in alloc_pid()
275 upid = pid->numbers + ns->level; in alloc_pid()
279 pid->stashed = NULL; in alloc_pid()
280 pid->ino = ++pidfs_ino; in alloc_pid()
281 for ( ; upid >= pid->numbers; --upid) { in alloc_pid()
283 idr_replace(&upid->ns->idr, pid, upid->nr); in alloc_pid()
288 return pid; in alloc_pid()
297 upid = pid->numbers + i; in alloc_pid()
307 kmem_cache_free(ns->pid_cachep, pid); in alloc_pid()
318 struct pid *find_pid_ns(int nr, struct pid_namespace *ns) in find_pid_ns()
324 struct pid *find_vpid(int nr) in find_vpid()
330 static struct pid **task_pid_ptr(struct task_struct *task, enum pid_type type) in task_pid_ptr()
342 struct pid *pid = *task_pid_ptr(task, type); in attach_pid() local
343 hlist_add_head_rcu(&task->pid_links[type], &pid->tasks[type]); in attach_pid()
347 struct pid *new) in __change_pid()
349 struct pid **pid_ptr = task_pid_ptr(task, type); in __change_pid()
350 struct pid *pid; in __change_pid() local
353 pid = *pid_ptr; in __change_pid()
359 WARN_ON_ONCE(pid_has_task(pid, PIDTYPE_PID)); in __change_pid()
360 wake_up_all(&pid->wait_pidfd); in __change_pid()
364 if (pid_has_task(pid, tmp)) in __change_pid()
367 free_pid(pid); in __change_pid()
376 struct pid *pid) in change_pid() argument
378 __change_pid(task, type, pid); in change_pid()
384 struct pid *pid1 = left->thread_pid; in exchange_tids()
385 struct pid *pid2 = right->thread_pid; in exchange_tids()
397 WRITE_ONCE(left->pid, pid_nr(pid2)); in exchange_tids()
398 WRITE_ONCE(right->pid, pid_nr(pid1)); in exchange_tids()
409 struct task_struct *pid_task(struct pid *pid, enum pid_type type) in pid_task() argument
412 if (pid) { in pid_task()
414 first = rcu_dereference_check(hlist_first_rcu(&pid->tasks[type]), in pid_task()
451 struct pid *get_task_pid(struct task_struct *task, enum pid_type type) in get_task_pid()
453 struct pid *pid; in get_task_pid() local
455 pid = get_pid(rcu_dereference(*task_pid_ptr(task, type))); in get_task_pid()
457 return pid; in get_task_pid()
461 struct task_struct *get_pid_task(struct pid *pid, enum pid_type type) in get_pid_task() argument
465 result = pid_task(pid, type); in get_pid_task()
473 struct pid *find_get_pid(pid_t nr) in find_get_pid()
475 struct pid *pid; in find_get_pid() local
478 pid = get_pid(find_vpid(nr)); in find_get_pid()
481 return pid; in find_get_pid()
485 pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns) in pid_nr_ns() argument
490 if (pid && ns->level <= pid->level) { in pid_nr_ns()
491 upid = &pid->numbers[ns->level]; in pid_nr_ns()
499 pid_t pid_vnr(struct pid *pid) in pid_vnr() argument
501 return pid_nr_ns(pid, task_active_pid_ns(current)); in pid_vnr()
531 struct pid *find_ge_pid(int nr, struct pid_namespace *ns) in find_ge_pid()
537 struct pid *pidfd_get_pid(unsigned int fd, unsigned int *flags) in pidfd_get_pid()
540 struct pid *pid; in pidfd_get_pid() local
546 pid = pidfd_pid(fd_file(f)); in pidfd_get_pid()
547 if (!IS_ERR(pid)) { in pidfd_get_pid()
548 get_pid(pid); in pidfd_get_pid()
553 return pid; in pidfd_get_pid()
571 struct pid *pid; in pidfd_get_task() local
574 pid = pidfd_get_pid(pidfd, &f_flags); in pidfd_get_task()
575 if (IS_ERR(pid)) in pidfd_get_task()
576 return ERR_CAST(pid); in pidfd_get_task()
578 task = get_pid_task(pid, PIDTYPE_TGID); in pidfd_get_task()
579 put_pid(pid); in pidfd_get_task()
603 static int pidfd_create(struct pid *pid, unsigned int flags) in pidfd_create() argument
608 pidfd = pidfd_prepare(pid, flags, &pidfd_file); in pidfd_create()
629 SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags) in SYSCALL_DEFINE2() argument
632 struct pid *p; in SYSCALL_DEFINE2()
637 if (pid <= 0) in SYSCALL_DEFINE2()
640 p = find_get_pid(pid); in SYSCALL_DEFINE2()
665 struct_size_t(struct pid, numbers, 1), in pid_idr_init()
666 __alignof__(struct pid), in pid_idr_init()
709 static int pidfd_getfd(struct pid *pid, int fd) in pidfd_getfd() argument
715 task = get_pid_task(pid, PIDTYPE_PID); in pidfd_getfd()
749 struct pid *pid; in SYSCALL_DEFINE3() local
761 pid = pidfd_pid(fd_file(f)); in SYSCALL_DEFINE3()
762 if (IS_ERR(pid)) in SYSCALL_DEFINE3()
763 ret = PTR_ERR(pid); in SYSCALL_DEFINE3()
765 ret = pidfd_getfd(pid, fd); in SYSCALL_DEFINE3()