OpenVZ Forum


Home » Mailing lists » Devel » [patch -mm 00/17] new namespaces and related syscalls
[patch -mm 08/17] nsproxy: add hashtable [message #16810 is a reply to message #16802] Tue, 05 December 2006 10:28 Go to previous messageGo to previous message
Cedric Le Goater is currently offline  Cedric Le Goater
Messages: 443
Registered: February 2006
Senior Member
From: Cedric Le Goater <clg@fr.ibm.com>

This patch adds a hashtable of nsproxy using the nsproxy as a key. 
init_nsproxy is hashed at init with key 0. This is considered to be 
the 'host' nsproxy.

Signed-off-by: Cedric Le Goater <clg@fr.ibm.com>
---
 include/linux/nsproxy.h |    3 +++
 kernel/nsproxy.c        |   43 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+)

Index: 2.6.19-rc6-mm2/include/linux/nsproxy.h
===================================================================
--- 2.6.19-rc6-mm2.orig/include/linux/nsproxy.h
+++ 2.6.19-rc6-mm2/include/linux/nsproxy.h
@@ -2,6 +2,7 @@
 #define _LINUX_NSPROXY_H
 
 #include <linux/spinlock.h>
+#include <linux/list.h>
 
 struct task_struct;
 
@@ -34,6 +35,8 @@ struct nsproxy {
 	struct pid_namespace *pid_ns;
 	struct net_namespace *net_ns;
 	struct user_namespace *user_ns;
+
+	struct hlist_node ns_hash_node;
 };
 extern struct nsproxy init_nsproxy;
 
Index: 2.6.19-rc6-mm2/kernel/nsproxy.c
===================================================================
--- 2.6.19-rc6-mm2.orig/kernel/nsproxy.c
+++ 2.6.19-rc6-mm2/kernel/nsproxy.c
@@ -22,6 +22,15 @@
 #include <linux/pid_namespace.h>
 #include <linux/net_namespace.h>
 
+#define NS_HASH_BITS 		3 /* this might need some configuration */
+#define NS_HASH_SIZE		(1 << NS_HASH_BITS)
+#define NS_HASH_MASK		(NS_HASH_SIZE - 1)
+#define ns_hashfn(id)		(((id >> NS_HASH_BITS) + id) & NS_HASH_MASK)
+#define ns_hash_head(id)	&ns_hash[ns_hashfn(id)]
+
+static struct hlist_head ns_hash[NS_HASH_SIZE];
+static DEFINE_SPINLOCK(ns_hash_lock);
+
 struct nsproxy init_nsproxy = INIT_NSPROXY(init_nsproxy);
 
 static inline void get_nsproxy(struct nsproxy *ns)
@@ -190,3 +199,37 @@ void put_nsproxy(struct nsproxy *ns)
 		free_nsproxy(ns);
 	}
 }
+
+/*
+ * This routine must be called with the ns_hash spin_locked
+ */
+static inline struct nsproxy *ns_hash_find(int id)
+{
+	struct hlist_node *elem;
+	struct nsproxy *ns;
+
+	hlist_for_each_entry(ns, elem, ns_hash_head(id), ns_hash_node) {
+		if (ns->id == id) {
+			get_nsproxy(ns);
+			return ns;
+		}
+	}
+
+	return NULL;
+}
+
+static int __init nshash_init(void)
+{
+	int i;
+
+	for (i = 0; i < NS_HASH_SIZE; ++i)
+		INIT_HLIST_HEAD(&ns_hash[i]);
+
+	spin_lock_irq(&ns_hash_lock);
+	hlist_add_head(&init_nsproxy.ns_hash_node, ns_hash_head(0));
+	spin_unlock_irq(&ns_hash_lock);
+
+	return 0;
+}
+
+module_init(nshash_init);

-- 
_______________________________________________
Containers mailing list
Containers@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/containers
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: seems to be a flaw in cfq
Next Topic: [PATCH] compat offsets size change
Goto Forum:
  


Current Time: Sun Sep 01 09:12:10 GMT 2024

Total time taken to generate the page: 0.05810 seconds