+++ /dev/null
---- linux-2.6.22.19-chopstix/fs/dcookies.c 2009-02-28 03:10:05.000000000 -0500
-+++ linux-2.6.22.19-chopstix/fs/dcookies.c.orig 2008-02-25 18:59:40.000000000 -0500
-@@ -38,19 +38,14 @@
- static LIST_HEAD(dcookie_users);
- static DEFINE_MUTEX(dcookie_mutex);
- static struct kmem_cache *dcookie_cache __read_mostly;
--static struct list_head *dcookie_hashtable[2] __read_mostly;
-+static struct list_head *dcookie_hashtable __read_mostly;
- static size_t hash_size __read_mostly;
--unsigned int current_hash = 0;
-
- static inline int is_live(void)
- {
- return !(list_empty(&dcookie_users));
- }
-
--static inline int is_shared(void)
--{
-- return !(list_empty(&dcookie_users)) && !(list_empty(dcookie_users.next));
--}
-
- /* The dentry is locked, its address will do for the cookie */
- static inline unsigned long dcookie_value(struct dcookie_struct * dcs)
-@@ -72,7 +67,7 @@
- struct list_head * pos;
- struct list_head * list;
-
-- list = dcookie_hashtable[current_hash] + dcookie_hash(dcookie);
-+ list = dcookie_hashtable + dcookie_hash(dcookie);
-
- list_for_each(pos, list) {
- dcs = list_entry(pos, struct dcookie_struct, hash_list);
-@@ -88,7 +83,7 @@
-
- static void hash_dcookie(struct dcookie_struct * dcs)
- {
-- struct list_head * list = dcookie_hashtable[current_hash] + dcookie_hash(dcookie_value(dcs));
-+ struct list_head * list = dcookie_hashtable + dcookie_hash(dcookie_value(dcs));
- list_add(&dcs->hash_list, list);
- }
-
-@@ -96,7 +91,7 @@
- static struct dcookie_struct * alloc_dcookie(struct dentry * dentry,
- struct vfsmount * vfsmnt)
- {
-- struct dcookie_struct * dcs = kmem_cache_alloc(dcookie_cache, GFP_ATOMIC);
-+ struct dcookie_struct * dcs = kmem_cache_alloc(dcookie_cache, GFP_KERNEL);
- if (!dcs)
- return NULL;
-
-@@ -215,12 +210,8 @@
- if (!dcookie_cache)
- goto out;
-
-- dcookie_hashtable[0] = kmalloc(PAGE_SIZE, GFP_KERNEL);
-- if (!dcookie_hashtable[0])
-- goto out_kmem;
--
-- dcookie_hashtable[1] = kmalloc(PAGE_SIZE, GFP_KERNEL);
-- if (!dcookie_hashtable[1])
-+ dcookie_hashtable = kmalloc(PAGE_SIZE, GFP_KERNEL);
-+ if (!dcookie_hashtable)
- goto out_kmem;
-
- err = 0;
-@@ -244,15 +235,7 @@
- hash_size = 1UL << hash_bits;
-
- /* And initialize the newly allocated array */
-- d = dcookie_hashtable[0];
-- i = hash_size;
-- do {
-- INIT_LIST_HEAD(d);
-- d++;
-- i--;
-- } while (i);
--
-- d = dcookie_hashtable[1];
-+ d = dcookie_hashtable;
- i = hash_size;
- do {
- INIT_LIST_HEAD(d);
-@@ -276,30 +259,6 @@
- kmem_cache_free(dcookie_cache, dcs);
- }
-
--/* Switch to the second hash */
--int garbage_collect(void) {
-- struct list_head * list;
-- struct list_head * pos;
-- struct list_head * pos2;
-- struct dcookie_struct * dcs;
-- size_t i;
--
-- if (is_shared())
-- return -EAGAIN;
--
-- for (i = 0; i < hash_size; ++i) {
-- list = dcookie_hashtable[current_hash] + i;
-- list_for_each_safe(pos, pos2, list) {
-- dcs = list_entry(pos, struct dcookie_struct, hash_list);
-- list_del(&dcs->hash_list);
-- free_dcookie(dcs);
-- }
-- }
--
-- current_hash = (current_hash & 1) ^ 1;
--
-- return 0;
--}
-
- static void dcookie_exit(void)
- {
-@@ -310,14 +269,7 @@
- size_t i;
-
- for (i = 0; i < hash_size; ++i) {
-- list = dcookie_hashtable[0] + i;
-- list_for_each_safe(pos, pos2, list) {
-- dcs = list_entry(pos, struct dcookie_struct, hash_list);
-- list_del(&dcs->hash_list);
-- free_dcookie(dcs);
-- }
--
-- list = dcookie_hashtable[1] + i;
-+ list = dcookie_hashtable + i;
- list_for_each_safe(pos, pos2, list) {
- dcs = list_entry(pos, struct dcookie_struct, hash_list);
- list_del(&dcs->hash_list);
-@@ -325,8 +277,7 @@
- }
- }
-
-- kfree(dcookie_hashtable[0]);
-- kfree(dcookie_hashtable[1]);
-+ kfree(dcookie_hashtable);
- kmem_cache_destroy(dcookie_cache);
- }
-