Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d610dd5 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Make sure we populate the initroot filesystem late enough



We should not initialize rootfs before all the core initializers have
run.  So do it as a separate stage just before starting the regular
driver initializers.

Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 8993780a
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -242,6 +242,7 @@
  	*(.initcall4s.init)						\
  	*(.initcall4s.init)						\
  	*(.initcall5.init)						\
  	*(.initcall5.init)						\
  	*(.initcall5s.init)						\
  	*(.initcall5s.init)						\
	*(.initcallrootfs.init)						\
  	*(.initcall6.init)						\
  	*(.initcall6.init)						\
  	*(.initcall6s.init)						\
  	*(.initcall6s.init)						\
  	*(.initcall7.init)						\
  	*(.initcall7.init)						\
+1 −0
Original line number Original line Diff line number Diff line
@@ -111,6 +111,7 @@ extern void setup_arch(char **);
#define subsys_initcall_sync(fn)	__define_initcall("4s",fn,4s)
#define subsys_initcall_sync(fn)	__define_initcall("4s",fn,4s)
#define fs_initcall(fn)			__define_initcall("5",fn,5)
#define fs_initcall(fn)			__define_initcall("5",fn,5)
#define fs_initcall_sync(fn)		__define_initcall("5s",fn,5s)
#define fs_initcall_sync(fn)		__define_initcall("5s",fn,5s)
#define rootfs_initcall(fn)		__define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn)		__define_initcall("6",fn,6)
#define device_initcall(fn)		__define_initcall("6",fn,6)
#define device_initcall_sync(fn)	__define_initcall("6s",fn,6s)
#define device_initcall_sync(fn)	__define_initcall("6s",fn,6s)
#define late_initcall(fn)		__define_initcall("7",fn,7)
#define late_initcall(fn)		__define_initcall("7",fn,7)
+4 −2
Original line number Original line Diff line number Diff line
@@ -526,7 +526,7 @@ static void __init free_initrd(void)


#endif
#endif


void __init populate_rootfs(void)
static int __init populate_rootfs(void)
{
{
	char *err = unpack_to_rootfs(__initramfs_start,
	char *err = unpack_to_rootfs(__initramfs_start,
			 __initramfs_end - __initramfs_start, 0);
			 __initramfs_end - __initramfs_start, 0);
@@ -544,7 +544,7 @@ void __init populate_rootfs(void)
			unpack_to_rootfs((char *)initrd_start,
			unpack_to_rootfs((char *)initrd_start,
				initrd_end - initrd_start, 0);
				initrd_end - initrd_start, 0);
			free_initrd();
			free_initrd();
			return;
			return 0;
		}
		}
		printk("it isn't (%s); looks like an initrd\n", err);
		printk("it isn't (%s); looks like an initrd\n", err);
		fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 0700);
		fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 0700);
@@ -565,4 +565,6 @@ void __init populate_rootfs(void)
#endif
#endif
	}
	}
#endif
#endif
	return 0;
}
}
rootfs_initcall(populate_rootfs);
+0 −7
Original line number Original line Diff line number Diff line
@@ -94,7 +94,6 @@ extern void pidmap_init(void);
extern void prio_tree_init(void);
extern void prio_tree_init(void);
extern void radix_tree_init(void);
extern void radix_tree_init(void);
extern void free_initmem(void);
extern void free_initmem(void);
extern void populate_rootfs(void);
extern void driver_init(void);
extern void driver_init(void);
extern void prepare_namespace(void);
extern void prepare_namespace(void);
#ifdef	CONFIG_ACPI
#ifdef	CONFIG_ACPI
@@ -745,12 +744,6 @@ static int init(void * unused)


	cpuset_init_smp();
	cpuset_init_smp();


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

	do_basic_setup();
	do_basic_setup();


	/*
	/*