diff options
| author | Pavel Emelyanov <xemul@openvz.org> | 2007-09-18 22:46:44 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-09-19 11:24:18 -0700 | 
| commit | 735de2230f09741077a645a913de0a04b10208bf (patch) | |
| tree | b408a671c9c07bec41a9ca8056fa7a6710982f3b | |
| parent | d8a4821dca693867a7953104c1e3cc830eb9191f (diff) | |
| download | olio-linux-3.10-735de2230f09741077a645a913de0a04b10208bf.tar.xz olio-linux-3.10-735de2230f09741077a645a913de0a04b10208bf.zip  | |
Convert uid hash to hlist
Surprisingly, but (spotted by Alexey Dobriyan) the uid hash still uses
list_heads, thus occupying twice as much place as it could.  Convert it to
hlist_heads.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: Alexey Dobriyan <adobriyan@openvz.org>
Acked-by: Serge Hallyn <serue@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | include/linux/sched.h | 2 | ||||
| -rw-r--r-- | include/linux/user_namespace.h | 2 | ||||
| -rw-r--r-- | kernel/user.c | 15 | ||||
| -rw-r--r-- | kernel/user_namespace.c | 2 | 
4 files changed, 11 insertions, 10 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index f4e324ed2e4..6239bc2c2ba 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -593,7 +593,7 @@ struct user_struct {  #endif  	/* Hash table maintenance information */ -	struct list_head uidhash_list; +	struct hlist_node uidhash_node;  	uid_t uid;  }; diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h index 1101b0ce878..b5f41d4c2ee 100644 --- a/include/linux/user_namespace.h +++ b/include/linux/user_namespace.h @@ -11,7 +11,7 @@  struct user_namespace {  	struct kref		kref; -	struct list_head	uidhash_table[UIDHASH_SZ]; +	struct hlist_head	uidhash_table[UIDHASH_SZ];  	struct user_struct	*root_user;  }; diff --git a/kernel/user.c b/kernel/user.c index e080ba863ae..add57c7e4c0 100644 --- a/kernel/user.c +++ b/kernel/user.c @@ -55,21 +55,22 @@ struct user_struct root_user = {  /*   * These routines must be called with the uidhash spinlock held!   */ -static inline void uid_hash_insert(struct user_struct *up, struct list_head *hashent) +static inline void uid_hash_insert(struct user_struct *up, struct hlist_head *hashent)  { -	list_add(&up->uidhash_list, hashent); +	hlist_add_head(&up->uidhash_node, hashent);  }  static inline void uid_hash_remove(struct user_struct *up)  { -	list_del(&up->uidhash_list); +	hlist_del(&up->uidhash_node);  } -static inline struct user_struct *uid_hash_find(uid_t uid, struct list_head *hashent) +static inline struct user_struct *uid_hash_find(uid_t uid, struct hlist_head *hashent)  {  	struct user_struct *user; +	struct hlist_node *h; -	list_for_each_entry(user, hashent, uidhash_list) { +	hlist_for_each_entry(user, h, hashent, uidhash_node) {  		if(user->uid == uid) {  			atomic_inc(&user->__count);  			return user; @@ -118,7 +119,7 @@ void free_uid(struct user_struct *up)  struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)  { -	struct list_head *hashent = uidhashentry(ns, uid); +	struct hlist_head *hashent = uidhashentry(ns, uid);  	struct user_struct *up;  	spin_lock_irq(&uidhash_lock); @@ -207,7 +208,7 @@ static int __init uid_cache_init(void)  			0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);  	for(n = 0; n < UIDHASH_SZ; ++n) -		INIT_LIST_HEAD(init_user_ns.uidhash_table + n); +		INIT_HLIST_HEAD(init_user_ns.uidhash_table + n);  	/* Insert the root user immediately (init already runs as root) */  	spin_lock_irq(&uidhash_lock); diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c index 85af9422ea6..e7ba1bf8457 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c @@ -39,7 +39,7 @@ static struct user_namespace *clone_user_ns(struct user_namespace *old_ns)  	kref_init(&ns->kref);  	for (n = 0; n < UIDHASH_SZ; ++n) -		INIT_LIST_HEAD(ns->uidhash_table + n); +		INIT_HLIST_HEAD(ns->uidhash_table + n);  	/* Insert new root user.  */  	ns->root_user = alloc_uid(ns, 0);  |