Lines Matching refs:pid

44 struct pid init_struct_pid = {
101 void put_pid(struct pid *pid) in put_pid() argument
105 if (!pid) in put_pid()
108 ns = pid->numbers[pid->level].ns; in put_pid()
109 if ((atomic_read(&pid->count) == 1) || in put_pid()
110 atomic_dec_and_test(&pid->count)) { in put_pid()
111 kmem_cache_free(ns->pid_cachep, pid); in put_pid()
119 struct pid *pid = container_of(rhp, struct pid, rcu); in delayed_put_pid() local
120 put_pid(pid); in delayed_put_pid()
123 void free_pid(struct pid *pid) in free_pid() argument
130 for (i = 0; i <= pid->level; i++) { in free_pid()
131 struct upid *upid = pid->numbers + i; in free_pid()
156 call_rcu(&pid->rcu, delayed_put_pid); in free_pid()
159 struct pid *alloc_pid(struct pid_namespace *ns) in alloc_pid()
161 struct pid *pid; in alloc_pid() local
168 pid = kmem_cache_alloc(ns->pid_cachep, GFP_KERNEL); in alloc_pid()
169 if (!pid) in alloc_pid()
173 pid->level = ns->level; in alloc_pid()
202 pid->numbers[i].nr = nr; in alloc_pid()
203 pid->numbers[i].ns = tmp; in alloc_pid()
207 if (unlikely(is_child_reaper(pid))) { in alloc_pid()
213 atomic_set(&pid->count, 1); in alloc_pid()
215 INIT_HLIST_HEAD(&pid->tasks[type]); in alloc_pid()
217 upid = pid->numbers + ns->level; in alloc_pid()
221 for ( ; upid >= pid->numbers; --upid) { in alloc_pid()
223 idr_replace(&upid->ns->idr, pid, upid->nr); in alloc_pid()
228 return pid; in alloc_pid()
237 idr_remove(&ns->idr, (pid->numbers + i)->nr); in alloc_pid()
245 kmem_cache_free(ns->pid_cachep, pid); in alloc_pid()
256 struct pid *find_pid_ns(int nr, struct pid_namespace *ns) in find_pid_ns()
262 struct pid *find_vpid(int nr) in find_vpid()
268 static struct pid **task_pid_ptr(struct task_struct *task, enum pid_type type) in task_pid_ptr()
280 struct pid *pid = *task_pid_ptr(task, type); in attach_pid() local
281 hlist_add_head_rcu(&task->pid_links[type], &pid->tasks[type]); in attach_pid()
285 struct pid *new) in __change_pid()
287 struct pid **pid_ptr = task_pid_ptr(task, type); in __change_pid()
288 struct pid *pid; in __change_pid() local
291 pid = *pid_ptr; in __change_pid()
297 if (!hlist_empty(&pid->tasks[tmp])) in __change_pid()
300 free_pid(pid); in __change_pid()
309 struct pid *pid) in change_pid() argument
311 __change_pid(task, type, pid); in change_pid()
324 struct task_struct *pid_task(struct pid *pid, enum pid_type type) in pid_task() argument
327 if (pid) { in pid_task()
329 first = rcu_dereference_check(hlist_first_rcu(&pid->tasks[type]), in pid_task()
366 struct pid *get_task_pid(struct task_struct *task, enum pid_type type) in get_task_pid()
368 struct pid *pid; in get_task_pid() local
370 pid = get_pid(rcu_dereference(*task_pid_ptr(task, type))); in get_task_pid()
372 return pid; in get_task_pid()
376 struct task_struct *get_pid_task(struct pid *pid, enum pid_type type) in get_pid_task() argument
380 result = pid_task(pid, type); in get_pid_task()
388 struct pid *find_get_pid(pid_t nr) in find_get_pid()
390 struct pid *pid; in find_get_pid() local
393 pid = get_pid(find_vpid(nr)); in find_get_pid()
396 return pid; in find_get_pid()
400 pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns) in pid_nr_ns() argument
405 if (pid && ns->level <= pid->level) { in pid_nr_ns()
406 upid = &pid->numbers[ns->level]; in pid_nr_ns()
414 pid_t pid_vnr(struct pid *pid) in pid_vnr() argument
416 return pid_nr_ns(pid, task_active_pid_ns(current)); in pid_vnr()
447 struct pid *find_ge_pid(int nr, struct pid_namespace *ns) in find_ge_pid()
466 init_pid_ns.pid_cachep = KMEM_CACHE(pid, in pid_idr_init()