--- ./include/linux/fs.h.orig	Wed Feb  9 09:52:26 2000
+++ ./include/linux/fs.h	Fri Feb 18 19:16:18 2000
@@ -883,7 +883,10 @@
 extern kdev_t ROOT_DEV;
 
 extern void show_buffers(void);
-extern void mount_root(void);
+#define FS_TYPE_MAXLEN 32
+char root_fs_type[FS_TYPE_MAXLEN];
+extern void root_fstype_setup(char *line, int *ints);
+extern void mount_root(char *type);
 
 #ifdef CONFIG_BLK_DEV_INITRD
 extern kdev_t real_root_dev;
--- fs/super.c.orig	Tue Feb 22 21:55:19 2000
+++ fs/super.c	Tue Feb 22 22:02:25 2000
@@ -1133,7 +1133,17 @@
 	goto dput_and_out;
 }
 
-void __init mount_root(void)
+char root_fs_type[FS_TYPE_MAXLEN];
+
+__initfunc(void root_fstype_setup(char *line, int *ints))
+{
+	int n = strlen(line);
+	if (n >= sizeof(root_fs_type))
+		line[sizeof(root_fs_type) - 1] = '\0';
+	sprintf(root_fs_type, line);
+}
+
+void __init mount_root(char *type)
 {
 	struct file_system_type * fs_type;
 	struct super_block * sb;
@@ -1142,6 +1152,17 @@
 	struct file filp;
 	int retval;
 
+	if ( type ) 
+	        fs_type = get_fs_type(type);
+	else 
+	        fs_type = file_systems;
+
+	if ( !fs_type ) {
+   	        printk("Warning: file system option %s not found\n", type);
+	        fs_type = file_systems;
+	}
+	  
+
 #ifdef CONFIG_ROOT_NFS
 	if (MAJOR(ROOT_DEV) == UNNAMED_MAJOR) {
 		ROOT_DEV = 0;
@@ -1216,7 +1237,7 @@
 		 */
 		printk("VFS: Cannot open root device %s\n",
 		       kdevname(ROOT_DEV));
-	else for (fs_type = file_systems ; fs_type ; fs_type = fs_type->next) {
+	else for ( ; 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);
@@ -1232,6 +1253,7 @@
 				return;
 			panic("VFS: add_vfsmnt failed for root fs");
 		}
+
 	}
 	panic("VFS: Unable to mount root fs on %s",
 		kdevname(ROOT_DEV));
@@ -1255,7 +1277,7 @@
 		return -EBUSY;
 	}
 	ROOT_DEV = new_root_dev;
-	mount_root();
+	mount_root(NULL);
 	dput(old_root);
 	dput(old_pwd);
 #if 1
--- init/main.c.orig	Tue Jan  4 11:12:25 2000
+++ init/main.c	Tue Feb 22 22:00:36 2000
@@ -953,6 +953,7 @@
 
 static struct kernel_param raw_params[] __initdata = {
 	{ "root=", root_dev_setup },
+	{ "rootfstype=", root_fstype_setup},
 #ifdef CONFIG_ROOT_NFS
 	{ "nfsroot=", nfs_root_setup },
 	{ "nfsaddrs=", ip_auto_config_setup },
@@ -1420,7 +1421,7 @@
 	filesystem_setup();
 
 	/* Mount the root filesystem.. */
-	mount_root();
+	mount_root(root_fs_type);
 
 #ifdef CONFIG_BLK_DEV_INITRD
 	root_mountflags = real_root_mountflags;