OpenVZ Forum


Home » Mailing lists » Devel » [patch -mm 00/17] new namespaces and related syscalls
Re: [patch -mm 08/17] nsproxy: add hashtable [message #16823 is a reply to message #16810] Tue, 05 December 2006 23:36 Go to previous messageGo to previous message
Herbert Poetzl is currently offline  Herbert Poetzl
Messages: 239
Registered: February 2006
Senior Member
On Tue, Dec 05, 2006 at 11:28:00AM +0100, clg@fr.ibm.com wrote:
> 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.

hmm? how is that going to work?

I mean, a simple clone() call (on the host) will
change the nsproxy and spawn new ones, but that
doesn't mean that the process has left the 'host'
it just means that some namespace is not shared
with the 'other' processes ...

best,
Herbert

> 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
_______________________________________________
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: Sat Jul 19 01:12:41 GMT 2025

Total time taken to generate the page: 0.04074 seconds