--- ./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;