Re: [PATCH] Remove vfs_init_caches_early()

2008-01-17 Thread Nick Piggin
On Friday 18 January 2008 10:41, Rusty Russell wrote:
> vfs_init_caches_early() does nothing on IA-64 and x86-64 (unless you
> turn off CONFIG_NUMA): hashdist is set by default on these platforms.
>
> Maybe some obscure feature which requires VFS to be set up v. early
> (hence is broken in this configuration), or something arch-specific
> (which seems unlikely).

The use of hugepage mappings for your hashes rather than vmalloc
memory? Or did I misunderstand you? ... bootmem is needed for very
large physically contiguous allocations.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] Remove vfs_init_caches_early()

2008-01-17 Thread Rusty Russell
On Friday 18 January 2008 10:41:21 Rusty Russell wrote:
> vfs_init_caches_early() does nothing on IA-64 and x86-64 (unless you
> turn off CONFIG_NUMA): hashdist is set by default on these platforms.
>
> Maybe some obscure feature which requires VFS to be set up v. early
> (hence is broken in this configuration), or something arch-specific
> (which seems unlikely).  Most likely this is a relic.
>
> Unless someone has inside knowledge, the easiest way to find out is to
> rip it out and see if anyone screams.  Boots fine on my 32-bit x86 box
> here.

Ok, Chris Wright pointed me to the justification: it was because on 64G 
powerpc machines, MAX_ORDER of 11 was too small to allocate sufficient 
hashes.

See 
http://git.kernel.org/?p=linux/kernel/git/torvalds/old-2.6-bkcvs.git;a=commitdiff;h=50c2cb5183e4f101f923212e39a58a66a530cf77

Since MAX_ORDER is now 13 on powerpc, I think we're good.

Thanks Cdub!
Rusty.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] Remove vfs_init_caches_early()

2008-01-17 Thread Rusty Russell
vfs_init_caches_early() does nothing on IA-64 and x86-64 (unless you
turn off CONFIG_NUMA): hashdist is set by default on these platforms.

Maybe some obscure feature which requires VFS to be set up v. early
(hence is broken in this configuration), or something arch-specific
(which seems unlikely).  Most likely this is a relic.

Unless someone has inside knowledge, the easiest way to find out is to
rip it out and see if anyone screams.  Boots fine on my 32-bit x86 box here.

Signed-off-by: Rusty Russell <[EMAIL PROTECTED]>
---
 Documentation/kernel-parameters.txt |2 +-
 fs/dcache.c |   34 --
 fs/inode.c  |   31 ---
 include/linux/fs.h  |2 --
 init/main.c |1 -
 5 files changed, 1 insertion(+), 69 deletions(-)

diff -r e4dd27867542 Documentation/kernel-parameters.txt
--- a/Documentation/kernel-parameters.txt   Fri Jan 18 09:59:22 2008 +1100
+++ b/Documentation/kernel-parameters.txt   Fri Jan 18 10:07:13 2008 +1100
@@ -662,7 +662,7 @@ and is between 256 and 4096 characters. 
 
hashdist=   [KNL,NUMA] Large hashes allocated during boot
are distributed across NUMA nodes.  Defaults on
-   for IA-64, off otherwise.
+   for IA-64 and x86-64, off otherwise.
Format: 0 | 1 (for off | on)
 
hcl=[IA-64] SGI's Hardware Graph compatibility layer
diff -r e4dd27867542 fs/dcache.c
--- a/fs/dcache.c   Fri Jan 18 09:59:22 2008 +1100
+++ b/fs/dcache.c   Fri Jan 18 10:07:13 2008 +1100
@@ -2082,30 +2082,6 @@ static int __init set_dhash_entries(char
 }
 __setup("dhash_entries=", set_dhash_entries);
 
-static void __init dcache_init_early(void)
-{
-   int loop;
-
-   /* If hashes are distributed across NUMA nodes, defer
-* hash allocation until vmalloc space is available.
-*/
-   if (hashdist)
-   return;
-
-   dentry_hashtable =
-   alloc_large_system_hash("Dentry cache",
-   sizeof(struct hlist_head),
-   dhash_entries,
-   13,
-   HASH_EARLY,
-   &d_hash_shift,
-   &d_hash_mask,
-   0);
-
-   for (loop = 0; loop < (1 << d_hash_shift); loop++)
-   INIT_HLIST_HEAD(&dentry_hashtable[loop]);
-}
-
 static void __init dcache_init(void)
 {
int loop;
@@ -2119,10 +2095,6 @@ static void __init dcache_init(void)
SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|SLAB_MEM_SPREAD);

register_shrinker(&dcache_shrinker);
-
-   /* Hash may have been set up in dcache_init_early */
-   if (!hashdist)
-   return;
 
dentry_hashtable =
alloc_large_system_hash("Dentry cache",
@@ -2145,12 +2117,6 @@ struct kmem_cache *filp_cachep __read_mo
 struct kmem_cache *filp_cachep __read_mostly;
 
 EXPORT_SYMBOL(d_genocide);
-
-void __init vfs_caches_init_early(void)
-{
-   dcache_init_early();
-   inode_init_early();
-}
 
 void __init vfs_caches_init(unsigned long mempages)
 {
diff -r e4dd27867542 fs/inode.c
--- a/fs/inode.cFri Jan 18 09:59:22 2008 +1100
+++ b/fs/inode.cFri Jan 18 10:07:13 2008 +1100
@@ -1369,33 +1369,6 @@ static int __init set_ihash_entries(char
 }
 __setup("ihash_entries=", set_ihash_entries);
 
-/*
- * Initialize the waitqueues and inode hash table.
- */
-void __init inode_init_early(void)
-{
-   int loop;
-
-   /* If hashes are distributed across NUMA nodes, defer
-* hash allocation until vmalloc space is available.
-*/
-   if (hashdist)
-   return;
-
-   inode_hashtable =
-   alloc_large_system_hash("Inode-cache",
-   sizeof(struct hlist_head),
-   ihash_entries,
-   14,
-   HASH_EARLY,
-   &i_hash_shift,
-   &i_hash_mask,
-   0);
-
-   for (loop = 0; loop < (1 << i_hash_shift); loop++)
-   INIT_HLIST_HEAD(&inode_hashtable[loop]);
-}
-
 void __init inode_init(void)
 {
int loop;
@@ -1408,10 +1381,6 @@ void __init inode_init(void)
 SLAB_MEM_SPREAD),
 init_once);
register_shrinker(&icache_shrinker);
-
-   /* Hash may have been set up in inode_init_early */
-   if (!hashdist)
-   return;
 
inode_hashtable =
alloc_large_system_hash("Inode-cache",
diff -r e4dd27867542 include/linux/fs.h
--- a/i