diff -ur linux-2.6.0-test1.orig/Documentation/kernel-parameters.txt linux-2.6.0-test1/Documentation/kernel-parameters.txt --- linux-2.6.0-test1.orig/Documentation/kernel-parameters.txt 2003-07-14 05:39:36.000000000 +0200 +++ linux-2.6.0-test1/Documentation/kernel-parameters.txt 2003-08-01 01:19:46.000000000 +0200 @@ -816,6 +816,8 @@ resume= [SWSUSP] Specify the partition device for software suspension + resume_initrd [SWSUSP] Run initrd before resuming from software suspension + riscom8= [HW,SERIAL] Format: [,[,...]] diff -ur linux-2.6.0-test1.orig/init/do_mounts.c linux-2.6.0-test1/init/do_mounts.c --- linux-2.6.0-test1.orig/init/do_mounts.c 2003-07-14 05:32:44.000000000 +0200 +++ linux-2.6.0-test1/init/do_mounts.c 2003-08-01 01:21:44.000000000 +0200 @@ -49,6 +49,15 @@ __setup("ro", readonly); __setup("rw", readwrite); +static int resume_initrd = 0; +static int __init set_resume_initrd(char *str) +{ + resume_initrd = 1; + return 1; +} + +__setup("resume_initrd", set_resume_initrd); + static dev_t __init try_name(char *name, int part) { char path[64]; @@ -365,12 +374,21 @@ is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR; - /* This has to be before mounting root, because even readonly mount of reiserfs would replay - log corrupting stuff */ - software_resume(); + /* software_resume() has to be before mounting root, because even + readonly mount of reiserfs would replay log corrupting stuff. + However, users may still want to run initrd first. */ + if (resume_initrd) { + if (initrd_load()) { + software_resume(); + goto out; + } + } + else { + software_resume(); - if (initrd_load()) - goto out; + if (initrd_load()) + goto out; + } if (is_floppy && rd_doload && rd_load_disk(0)) ROOT_DEV = Root_RAM0;