Re: recent names_cachep change

From: Tigran Aivazian (tigran@veritas.com)
Date: Thu Jul 27 2000 - 15:08:06 EST


On Thu, 27 Jul 2000, Alexander Viro wrote:
> On Thu, 27 Jul 2000, Tigran Aivazian wrote:
>
> > Greetings Alexander,
> >
> > I am not sure if you have seen the recent discussion on linux-kernel about
> > Ooopses in kmem_cache_alloc() which may suggest that there are users of
> > getname() before names_cachep is created (due to module_init nature of
> > namecache_init()).
> >
> > Have you given this some thought? I may be missing something obvious
> > (e.g. you may have proved a theorem that _no_ getname() user is possible
> > in principle before do_initcalls() is invoked?).
>
> Not my patch. Yes, such scenarios are possible. I'll try to look through
> that stuff, but it certainly looks like namecache_init() must be moved to
> the group of explicit cache initializations (in kernel/main.c). Linus,
> your opinion?
> Cheers,
> Al

To make this discussion more specific, here is the patch (I haven't heard
back from people who reported these oopses and I only did a _very_ brief
analysis of the problem but the patch seems valid anyway).

diff -urN -X dontdiff linux/init/main.c work/init/main.c
--- linux/init/main.c Thu Jul 27 07:31:21 2000
+++ work/init/main.c Thu Jul 27 21:04:35 2000
@@ -565,6 +565,7 @@
         fork_init(mempages);
         filescache_init();
         dcache_init(mempages);
+ namecache_init();
         vma_init();
         buffer_init(mempages);
         page_cache_init(mempages);
diff -urN -X dontdiff linux/include/linux/fs.h work/include/linux/fs.h
--- linux/include/linux/fs.h Thu Jul 27 07:31:21 2000
+++ work/include/linux/fs.h Thu Jul 27 21:04:06 2000
@@ -195,6 +195,7 @@
 extern void inode_init(unsigned long);
 extern void file_table_init(void);
 extern void dcache_init(unsigned long);
+extern void namecache_init(void);
 
 /* bh state bits */
 #define BH_Uptodate 0 /* 1 if the buffer contains valid data */
diff -urN -X dontdiff linux/fs/namei.c work/fs/namei.c
--- linux/fs/namei.c Thu Jul 27 07:31:19 2000
+++ work/fs/namei.c Thu Jul 27 21:04:29 2000
@@ -1958,7 +1958,7 @@
 /* SLAB cache for name blocks */
 kmem_cache_t *names_cachep;
 
-static int __init namecache_init(void)
+int __init namecache_init(void)
 {
         names_cachep = kmem_cache_create("names_cache",
                         PAGE_SIZE,
@@ -1969,5 +1969,3 @@
                 panic("Cannot create names cache");
         return 0;
 }
-
-module_init(namecache_init)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Jul 31 2000 - 21:00:24 EST