|
@@ -1188,16 +1188,6 @@ static inline int rt_task(struct task_struct *p)
|
|
|
return rt_prio(p->prio);
|
|
|
}
|
|
|
|
|
|
-static inline pid_t task_pgrp_nr(struct task_struct *tsk)
|
|
|
-{
|
|
|
- return tsk->signal->pgrp;
|
|
|
-}
|
|
|
-
|
|
|
-static inline pid_t task_session_nr(struct task_struct *tsk)
|
|
|
-{
|
|
|
- return tsk->signal->__session;
|
|
|
-}
|
|
|
-
|
|
|
static inline void set_task_session(struct task_struct *tsk, pid_t session)
|
|
|
{
|
|
|
tsk->signal->__session = session;
|
|
@@ -1223,6 +1213,104 @@ static inline struct pid *task_session(struct task_struct *task)
|
|
|
return task->group_leader->pids[PIDTYPE_SID].pid;
|
|
|
}
|
|
|
|
|
|
+struct pid_namespace;
|
|
|
+
|
|
|
+/*
|
|
|
+ * the helpers to get the task's different pids as they are seen
|
|
|
+ * from various namespaces
|
|
|
+ *
|
|
|
+ * task_xid_nr() : global id, i.e. the id seen from the init namespace;
|
|
|
+ * task_xid_vnr() : virtual id, i.e. the id seen from the namespace the task
|
|
|
+ * belongs to. this only makes sence when called in the
|
|
|
+ * context of the task that belongs to the same namespace;
|
|
|
+ * task_xid_nr_ns() : id seen from the ns specified;
|
|
|
+ *
|
|
|
+ * set_task_vxid() : assigns a virtual id to a task;
|
|
|
+ *
|
|
|
+ * task_ppid_nr_ns() : the parent's id as seen from the namespace specified.
|
|
|
+ * the result depends on the namespace and whether the
|
|
|
+ * task in question is the namespace's init. e.g. for the
|
|
|
+ * namespace's init this will return 0 when called from
|
|
|
+ * the namespace of this init, or appropriate id otherwise.
|
|
|
+ *
|
|
|
+ *
|
|
|
+ * see also pid_nr() etc in include/linux/pid.h
|
|
|
+ */
|
|
|
+
|
|
|
+static inline pid_t task_pid_nr(struct task_struct *tsk)
|
|
|
+{
|
|
|
+ return tsk->pid;
|
|
|
+}
|
|
|
+
|
|
|
+static inline pid_t task_pid_nr_ns(struct task_struct *tsk,
|
|
|
+ struct pid_namespace *ns)
|
|
|
+{
|
|
|
+ return pid_nr_ns(task_pid(tsk), ns);
|
|
|
+}
|
|
|
+
|
|
|
+static inline pid_t task_pid_vnr(struct task_struct *tsk)
|
|
|
+{
|
|
|
+ return pid_vnr(task_pid(tsk));
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static inline pid_t task_tgid_nr(struct task_struct *tsk)
|
|
|
+{
|
|
|
+ return tsk->tgid;
|
|
|
+}
|
|
|
+
|
|
|
+static inline pid_t task_tgid_nr_ns(struct task_struct *tsk,
|
|
|
+ struct pid_namespace *ns)
|
|
|
+{
|
|
|
+ return pid_nr_ns(task_tgid(tsk), ns);
|
|
|
+}
|
|
|
+
|
|
|
+static inline pid_t task_tgid_vnr(struct task_struct *tsk)
|
|
|
+{
|
|
|
+ return pid_vnr(task_tgid(tsk));
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static inline pid_t task_pgrp_nr(struct task_struct *tsk)
|
|
|
+{
|
|
|
+ return tsk->signal->pgrp;
|
|
|
+}
|
|
|
+
|
|
|
+static inline pid_t task_pgrp_nr_ns(struct task_struct *tsk,
|
|
|
+ struct pid_namespace *ns)
|
|
|
+{
|
|
|
+ return pid_nr_ns(task_pgrp(tsk), ns);
|
|
|
+}
|
|
|
+
|
|
|
+static inline pid_t task_pgrp_vnr(struct task_struct *tsk)
|
|
|
+{
|
|
|
+ return pid_vnr(task_pgrp(tsk));
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static inline pid_t task_session_nr(struct task_struct *tsk)
|
|
|
+{
|
|
|
+ return tsk->signal->__session;
|
|
|
+}
|
|
|
+
|
|
|
+static inline pid_t task_session_nr_ns(struct task_struct *tsk,
|
|
|
+ struct pid_namespace *ns)
|
|
|
+{
|
|
|
+ return pid_nr_ns(task_session(tsk), ns);
|
|
|
+}
|
|
|
+
|
|
|
+static inline pid_t task_session_vnr(struct task_struct *tsk)
|
|
|
+{
|
|
|
+ return pid_vnr(task_session(tsk));
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static inline pid_t task_ppid_nr_ns(struct task_struct *tsk,
|
|
|
+ struct pid_namespace *ns)
|
|
|
+{
|
|
|
+ return pid_nr_ns(task_pid(rcu_dereference(tsk->real_parent)), ns);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* pid_alive - check that a task structure is not stale
|
|
|
* @p: Task structure to be checked.
|