lkml.org 
[lkml]   [2006]   [Dec]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [patch] pipe: Don't oops when pipe filesystem isn't mounted
    On Mon, 11 Dec 2006 02:17:18 -0800
    Andrew Morton <akpm@osdl.org> wrote:

    > > Said that, I think that pipes should be initialized early.
    >
    > Judging by the comment there, the only reason we prepare the rootfs prior
    > to running initcalls is for firmware. So the sequence
    >
    > run initcalls
    > populate rootfs
    > run initcalls which want to access files
    >
    > fixes everything?

    Like this... The other part is hunting down all those drivers which want
    to access the filesystem at init time.


    include/asm-generic/vmlinux.lds.h | 6 +++++-
    include/linux/init.h | 5 +++++
    init/initramfs.c | 3 ++-
    init/main.c | 7 -------
    4 files changed, 12 insertions(+), 9 deletions(-)

    diff -puN init/main.c~dont-run-userspace-until-initcalls-have-completed init/main.c
    --- a/init/main.c~dont-run-userspace-until-initcalls-have-completed
    +++ a/init/main.c
    @@ -94,7 +94,6 @@ extern void pidmap_init(void);
    extern void prio_tree_init(void);
    extern void radix_tree_init(void);
    extern void free_initmem(void);
    -extern void populate_rootfs(void);
    extern void driver_init(void);
    extern void prepare_namespace(void);
    #ifdef CONFIG_ACPI
    @@ -739,12 +738,6 @@ static int init(void * unused)

    cpuset_init_smp();

    - /*
    - * Do this before initcalls, because some drivers want to access
    - * firmware files.
    - */
    - populate_rootfs();
    -
    do_basic_setup();

    /*
    diff -puN include/linux/init.h~dont-run-userspace-until-initcalls-have-completed include/linux/init.h
    --- a/include/linux/init.h~dont-run-userspace-until-initcalls-have-completed
    +++ a/include/linux/init.h
    @@ -115,6 +115,11 @@ extern void setup_arch(char **);
    #define device_initcall_sync(fn) __define_initcall("6s",fn,6s)
    #define late_initcall(fn) __define_initcall("7",fn,7)
    #define late_initcall_sync(fn) __define_initcall("7s",fn,7s)
    +#define populate_rootfs_initcall(fn) __define_initcall("8",fn,8)
    +#define populate_rootfs_initcall_sync(fn) __define_initcall("8s",fn,8s)
    +#define rootfs_neeeded_initcall(fn) __define_initcall("9",fn,9)
    +#define rootfs_neeeded_initcall_sync(fn) __define_initcall("9s",fn,9s)
    +

    #define __initcall(fn) device_initcall(fn)

    diff -puN include/asm-generic/vmlinux.lds.h~dont-run-userspace-until-initcalls-have-completed include/asm-generic/vmlinux.lds.h
    --- a/include/asm-generic/vmlinux.lds.h~dont-run-userspace-until-initcalls-have-completed
    +++ a/include/asm-generic/vmlinux.lds.h
    @@ -245,5 +245,9 @@
    *(.initcall6.init) \
    *(.initcall6s.init) \
    *(.initcall7.init) \
    - *(.initcall7s.init)
    + *(.initcall7s.init) \
    + *(.initcall8.init) \
    + *(.initcall8s.init) \
    + *(.initcall9.init) \
    + *(.initcall9s.init)

    diff -puN init/initramfs.c~dont-run-userspace-until-initcalls-have-completed init/initramfs.c
    --- a/init/initramfs.c~dont-run-userspace-until-initcalls-have-completed
    +++ a/init/initramfs.c
    @@ -526,7 +526,7 @@ static void __init free_initrd(void)

    #endif

    -void __init populate_rootfs(void)
    +static int __init populate_rootfs(void)
    {
    char *err = unpack_to_rootfs(__initramfs_start,
    __initramfs_end - __initramfs_start, 0);
    @@ -566,3 +566,4 @@ void __init populate_rootfs(void)
    }
    #endif
    }
    +populate_rootfs_initcall(populate_rootfs);
    _
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-12-11 11:31    [W:0.027 / U:67.184 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site