[patch] /linuxrc - Why is this excluded if root=/dev/ram0?

Dave Cinege (dcinege@psychosis.com)
Fri, 16 Jan 1998 07:25:14 -0500


Is there any reason that -

pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
if (pid>0)
while (pid != wait(&i));

Should not be just before this, instead of enclosed in it?

linux/init/main.c line 1140 2.1.78, 982 2.0.33

#ifdef CONFIG_BLK_DEV_INITRD
root_mountflags = real_root_mountflags;
if (mount_initrd && ROOT_DEV != real_root_dev && ROOT_DEV == MKDEV(RAMDISK_MAJOR,0)) {
int error;

pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
if (pid>0)
while (pid != wait(&i));

As far as I'm concerned if /linuxrc is present it should just be run, even if initrd is not
present, or if the root=/dev/ram0. This fixes it, if there is no reason it should not
be this way:

linux-2.0.33/init/main.c line 918
linux-2.1.78/init/main.c line 1069

-#ifdef CONFIG_BLK_DEV_INITRD
static int do_linuxrc(void * shell)
{

linux-2.0.33/init/main.c line 930
linux-2.1.78/init/main.c line 1081

+#ifdef CONFIG_BLK_DEV_INITRD
static void no_initrd(char *s,int *ints)
{
mount_initrd = 0;

linux-2.0.33/init/main.c line 985

int error;

- pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
- if (pid>0)
- while (pid != wait(&i));
if (real_root_dev != MKDEV(RAMDISK_MAJOR, 0)) {
error = change_root(real_root_dev,"/initrd");

linux-2.1.78/init/main.c line 1142

if (mount_initrd && ROOT_DEV != real_root_dev && ROOT_DEV == MKDEV(RAMDISK_MAJOR,0)) {
int error;
- int i, pid;

- pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
- if (pid>0)
- while (pid != wait(&i));
if (real_root_dev != MKDEV(RAMDISK_MAJOR, 0)) {
error = change_root(real_root_dev,"/initrd");

linux-2.0.33/init/main.c line 980
linux-2.1.78/init/main.c line 1138

#endif

+ pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
+ if (pid>0)
+ while (pid != wait(&i));

#ifdef CONFIG_BLK_DEV_INITRD

linux-2.1.78/init/main.c line 1090

+ int i, pid;
#ifdef CONFIG_BLK_DEV_INITRD
int real_root_mountflags;
#endif