diff -urN -X dontdiff linux/Documentation/kernel-parameters.txt 2329-p1-rd/Documentation/kernel-parameters.txt
--- linux/Documentation/kernel-parameters.txt   Mon Nov  1 18:31:34 1999
+++ 2329-p1-rd/Documentation/kernel-parameters.txt      Fri Nov 19 11:31:42 1999
@@ -318,7 +318,9 @@

    ro                 [KNL] Mount root device read-only on boot.

-    root=
+    root=              [KNL] Mount root on specified (as hex or "/dev/XXX") device.
+
+    rootfs=            [KNL] Use filesystem type specified (e.g. rootfs=ext2) for root.

    rw                 [KNL] Mount root device read-write on boot.

diff -urN -X dontdiff linux/fs/super.c 2329-p1-rd/fs/super.c
--- linux/fs/super.c    Fri Nov 19 09:00:39 1999
+++ 2329-p1-rd/fs/super.c       Fri Nov 19 16:54:25 1999
@@ -15,6 +15,7 @@
 *
 *  Added kerneld support: Jacques Gelinas and Bjorn Ekwall
 *  Added change_root: Werner Almesberger & Hans Lermen, Feb '96
+ *  Added rootfs boot param. used by mount_root(): Tigran Aivazian, Nov 99.
 */

#include <linux/config.h>
@@ -54,6 +55,12 @@
/* this is initialized in init/main.c */
kdev_t ROOT_DEV;

+/* this can be set at boot time, e.g. rootfs=ext2
+ * if set to invalid value or if read_super() fails on the specified
+ * filesystem type then mount_root() will go through all registered filesystems.
+ */
+char rootfs[128] __initdata = "ext2";
+
int nr_super_blocks = 0;
int max_super_blocks = NR_SUPER;
LIST_HEAD(super_blocks);
@@ -1122,6 +1129,24 @@
       goto dput_and_out;
}

+
+#define TRY_MOUNT_ROOT(sb, vfsmnt) { \
+       sb = read_super(ROOT_DEV,fs_type->name,root_mountflags,NULL,1); \
+       if (sb) { \
+               sb->s_flags = root_mountflags; \
+               current->fs->root = dget(sb->s_root); \
+               current->fs->pwd = dget(sb->s_root); \
+               printk ("VFS: Mounted root (%s filesystem)%s.\n", \
+                       fs_type->name, \
+                       (sb->s_flags & MS_RDONLY) ? " readonly" : ""); \
+                       vfsmnt = add_vfsmnt(sb, "/dev/root", "/"); \
+                       if (vfsmnt) \
+                               return; \
+                       panic("VFS: add_vfsmnt failed for root fs"); \
+       } \
+}
+
+
void __init mount_root(void)
{
       struct file_system_type * fs_type;
@@ -1208,25 +1233,17 @@
                */
               printk("VFS: Cannot open root device %s\n",
                      kdevname(ROOT_DEV));
-       else for (fs_type = file_systems ; fs_type ; fs_type = fs_type->next) {
-               if (!(fs_type->fs_flags & FS_REQUIRES_DEV))
-                       continue;
-               sb = read_super(ROOT_DEV,fs_type->name,root_mountflags,NULL,1);
-               if (sb) {
-                       sb->s_flags = root_mountflags;
-                       current->fs->root = dget(sb->s_root);
-                       current->fs->pwd = dget(sb->s_root);
-                       printk ("VFS: Mounted root (%s filesystem)%s.\n",
-                               fs_type->name,
-                               (sb->s_flags & MS_RDONLY) ? " readonly" : "");
-                       vfsmnt = add_vfsmnt(sb, "/dev/root", "/");
-                       if (vfsmnt)
-                               return;
-                       panic("VFS: add_vfsmnt failed for root fs");
+       else {
+               if ((fs_type = get_fs_type(rootfs)) != NULL &&
+                        (fs_type->fs_flags & FS_REQUIRES_DEV))
+                       TRY_MOUNT_ROOT(sb, vfsmnt);
+               for (fs_type = file_systems ; fs_type ; fs_type = fs_type->next) {
+                       if (!(fs_type->fs_flags & FS_REQUIRES_DEV))
+                               continue;
+                       TRY_MOUNT_ROOT(sb, vfsmnt);
               }
       }
-       panic("VFS: Unable to mount root fs on %s",
-               kdevname(ROOT_DEV));
+       panic("VFS: Unable to mount root fs on %s", kdevname(ROOT_DEV));
}


diff -urN -X dontdiff linux/init/main.c 2329-p1-rd/init/main.c
--- linux/init/main.c   Tue Oct 19 18:22:19 1999
+++ 2329-p1-rd/init/main.c      Fri Nov 19 16:19:50 1999
@@ -269,6 +269,18 @@

__setup("root=", root_dev_setup);

+static int __init rootfs_setup(char *line)
+{
+       int n = strlen(line) + 1;
+       extern char rootfs[128]; /* in fs/super.c */
+
+       if (n > 1 && n < 128)
+               strncpy(rootfs, line, n);
+       return 1;
+}
+
+__setup("rootfs=", rootfs_setup);
+
static int __init checksetup(char *line)
{
       struct kernel_param *p;