OpenVZ Forum


Home » Mailing lists » Devel » [RFC][PATCH 2/6] Reimplement pid_nr() using struct pid_nr
[RFC][PATCH 2/6] Reimplement pid_nr() using struct pid_nr [message #17653] Sat, 10 March 2007 03:58
Sukadev Bhattiprolu is currently offline  Sukadev Bhattiprolu
Messages: 413
Registered: August 2006
Senior Member
From: Sukadev Bhattiprolu <sukadev@us.ibm.com>
Subject [RFC][PATCH 2/6] Reimplement pid_nr() using struct pid_nr

Replace the pid_nr() stub with a version that uses struct pid_nr
and returns the pid_t based on the pid namespace of the caller.

Signed-off-by: Sukadev Bhattiprolu <sukadev@us.ibm.com>
Cc: Cedric Le Goater <clg@fr.ibm.com>
Cc: Dave Hansen <haveblue@us.ibm.com>
Cc: Serge Hallyn <serue@us.ibm.com>
Cc: containers@lists.osdl.org
---
 include/linux/pid.h |    9 +--------
 kernel/pid.c        |   19 +++++++++++++++++++
 2 files changed, 20 insertions(+), 8 deletions(-)

Index: lx26-20-mm2b/include/linux/pid.h
===================================================================
--- lx26-20-mm2b.orig/include/linux/pid.h	2007-03-09 18:27:51.000000000 -0800
+++ lx26-20-mm2b/include/linux/pid.h	2007-03-09 18:28:00.000000000 -0800
@@ -118,14 +118,7 @@ extern void free_pid_nr(struct pid_nr *p
 extern struct pid_nr *alloc_pid_nr(struct pid_namespace *pid_ns);
 extern struct pid *alloc_pid(void);
 extern void FASTCALL(free_pid(struct pid *pid));
-
-static inline pid_t pid_nr(struct pid *pid)
-{
-	pid_t nr = 0;
-	if (pid)
-		nr = pid->nr;
-	return nr;
-}
+extern pid_t pid_nr(struct pid *pid);
 
 #define do_each_pid_task(pid, type, task)				\
 	do {								\
Index: lx26-20-mm2b/kernel/pid.c
===================================================================
--- lx26-20-mm2b.orig/kernel/pid.c	2007-03-09 18:27:51.000000000 -0800
+++ lx26-20-mm2b/kernel/pid.c	2007-03-09 18:28:00.000000000 -0800
@@ -263,6 +263,25 @@ int attach_pid_nr(struct pid *pid, struc
 	return 0;
 }
 
+pid_t pid_nr(struct pid *pid)
+{
+	struct pid_nr* pid_nr;
+	struct hlist_node *pos;
+
+	if (!pid)
+		return 0;
+
+	rcu_read_lock();
+	hlist_for_each_entry_rcu(pid_nr, pos, &pid->pid_nrs, node)
+		if (pid_nr->pid_ns == task_pid_ns(current)) {
+			rcu_read_unlock();
+			return pid_nr->nr;
+		}
+
+	rcu_read_unlock();
+	return 0;
+}
+
 struct pid *alloc_pid(void)
 {
 	struct pid *pid;
_______________________________________________
Containers mailing list
Containers@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/containers
Previous Topic: [RFC][PATCH] Define/use task_pid_ns() wrapper
Next Topic: [RFC][PATCH 0/5] Remove nsproxy->pid_ns
Goto Forum:
  


Current Time: Mon Aug 11 22:42:48 GMT 2025

Total time taken to generate the page: 0.29724 seconds