[Devel] [PATCH RHEL COMMIT] ve/proc: print VE id and virtual pid in process status

Konstantin Khorenko khorenko at virtuozzo.com
Tue Sep 28 19:31:12 MSK 2021


The commit is pushed to "branch-rh9-5.14.vz9.1.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after ark-5.14
------>
commit 66ed840faa379b65da372d1e50e0b4079b221297
Author: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>
Date:   Tue Sep 28 19:31:12 2021 +0300

    ve/proc: print VE id and virtual pid in process status
    
    Signed-off-by: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>
    
    (cherry picked from vz8 commit 0ee34d1e220c125e2fae8496e358ff36c99921ba)
    Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
 fs/proc/array.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/fs/proc/array.c b/fs/proc/array.c
index d726b2836c48..481139b434c5 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -150,6 +150,18 @@ static inline const char *get_task_state(struct task_struct *tsk)
 	return task_state_array[task_state_index(tsk)];
 }
 
+static int task_virtual_pid(struct task_struct *t)
+{
+	struct pid *pid;
+
+	pid = task_pid(t);
+	/*
+	 * this will give wrong result for tasks,
+	 * that failed to enter VE, but that's OK
+	 */
+	return pid ? pid->numbers[pid->level].nr : 0;
+}
+
 static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
 				struct pid *pid, struct task_struct *p)
 {
@@ -158,7 +170,7 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
 	int g, umask = -1;
 	struct task_struct *tracer;
 	const struct cred *cred;
-	pid_t ppid, tpid = 0, tgid, ngid;
+	pid_t ppid, tpid = 0, tgid, ngid, vpid;
 	unsigned int max_fds = 0;
 
 	rcu_read_lock();
@@ -171,6 +183,7 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
 
 	tgid = task_tgid_nr_ns(p, ns);
 	ngid = task_numa_group_id(p);
+	vpid = task_virtual_pid(p);
 	cred = get_task_cred(p);
 
 	task_lock(p);
@@ -225,6 +238,12 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
 		seq_put_decimal_ull(m, "\t", task_session_nr_ns(p, pid->numbers[g].ns));
 #endif
 	seq_putc(m, '\n');
+#ifdef CONFIG_VE
+	rcu_read_lock();
+	seq_printf(m, "envID:\t%s\nVPid:\t%d\n",
+			task_ve_name(p), vpid);
+	rcu_read_unlock();
+#endif
 }
 
 void render_sigset_t(struct seq_file *m, const char *header,


More information about the Devel mailing list