Here is my fix for the NFS root issue and optional 
floppy fallback ...
the (short) story: root_dev_setup() calls name_to_kdev_t()
which searches root_dev_names[], and if no device can be
found, (0:0) is returned, which in turn, if NFS root is
enabled, leads to a doomed NFS root attempt, finally 
leading to some ancient floppy fallback ...
the first patch 'corrects' the behaviour, in such way, 
that only root=/dev/nfs or a root device of (0:255) will
lead to the NFS root attempt (I guess this was the
original intention of the author).
the second patch adds a config option to disable the
Floppy Fallback entirely, which is disabled by default
(so no changes to the default behaviour).
best,
Herbert
-----
diff -NurbP --minimal linux-2.4.22-pre3/include/linux/nfs.h linux-2.4.22-pre3-fix/include/linux/nfs.h
--- linux-2.4.22-pre3/include/linux/nfs.h	Sat Apr  1 18:04:27 2000
+++ linux-2.4.22-pre3-fix/include/linux/nfs.h	Wed Jul  9 22:39:37 2003
@@ -30,6 +30,9 @@
 #define NFS_MNT_PROGRAM	100005
 #define NFS_MNT_PORT	627
 
+#define NFS_MAJOR   	UNNAMED_MAJOR
+#define NFS_MINOR   	0xff
+
 /*
  * NFS stats. The good thing with these values is that NFSv3 errors are
  * a superset of NFSv2 errors (with the exception of NFSERR_WFLUSH which
diff -NurbP --minimal linux-2.4.22-pre3/init/do_mounts.c linux-2.4.22-pre3-fix/init/do_mounts.c
--- linux-2.4.22-pre3/init/do_mounts.c	Sun Jul  6 22:55:07 2003
+++ linux-2.4.22-pre3-fix/init/do_mounts.c	Wed Jul  9 22:41:43 2003
@@ -88,7 +88,7 @@
 	const char *name;
 	const int num;
 } root_dev_names[] __initdata = {
-	{ "nfs",     0x00ff },
+	{ "nfs",     MKDEV(NFS_MAJOR, NFS_MINOR) },
 	{ "hda",     0x0300 },
 	{ "hdb",     0x0340 },
 	{ "loop",    0x0700 },
@@ -759,7 +759,8 @@
 static void __init mount_root(void)
 {
 #ifdef CONFIG_ROOT_NFS
-	if (MAJOR(ROOT_DEV) == UNNAMED_MAJOR) {
+       if (MAJOR(ROOT_DEV) == NFS_MAJOR
+           && MINOR(ROOT_DEV) == NFS_MINOR) {
 		if (mount_nfs_root()) {
 			sys_chdir("/root");
 			ROOT_DEV = current->fs->pwdmnt->mnt_sb->s_dev;
-----
diff -NurbP --minimal linux-2.4.22-pre3-fix/Documentation/Configure.help linux-2.4.22-pre3-fix-ffb/Documentation/Configure.help
--- linux-2.4.22-pre3-fix/Documentation/Configure.help	Sun Jul  6 22:54:52 2003
+++ linux-2.4.22-pre3-fix-ffb/Documentation/Configure.help	Wed Jul  9 23:00:08 2003
@@ -15942,6 +15942,18 @@
 
   Most people say N here.
 
+Disable Fallback to Floppy
+CONFIG_NO_FLOPPY_FALLBACK
+  If root file system on NFS is enabled but the root device isn't
+  /dev/nfs (or the NFS root can not be mounted for any other reason)
+  the kernel usually falls back to a floppy boot.
+  
+  This option will disable the default behaviour, which could be a
+  security risk, allowing either to boot from a specified root device 
+  or not at all. 
+
+  If unsure say N here.
+
 NFS server support
 CONFIG_NFSD
   If you want your Linux box to act as an NFS *server*, so that other
diff -NurbP --minimal linux-2.4.22-pre3-fix/fs/Config.in linux-2.4.22-pre3-fix-ffb/fs/Config.in
--- linux-2.4.22-pre3-fix/fs/Config.in	Sun Jul  6 22:55:05 2003
+++ linux-2.4.22-pre3-fix-ffb/fs/Config.in	Wed Jul  9 22:49:40 2003
@@ -105,6 +105,7 @@
    dep_tristate 'NFS file system support' CONFIG_NFS_FS $CONFIG_INET
    dep_mbool '  Provide NFSv3 client support' CONFIG_NFS_V3 $CONFIG_NFS_FS
    dep_bool '  Root file system on NFS' CONFIG_ROOT_NFS $CONFIG_NFS_FS $CONFIG_IP_PNP
+   dep_bool '    Disable Floppy Fallback' CONFIG_NO_FLOPPY_FALLBACK $CONFIG_ROOT_NFS
 
    dep_tristate 'NFS server support' CONFIG_NFSD $CONFIG_INET
    dep_mbool '  Provide NFSv3 server support' CONFIG_NFSD_V3 $CONFIG_NFSD
diff -NurbP --minimal linux-2.4.22-pre3-fix/init/do_mounts.c linux-2.4.22-pre3-fix-ffb/init/do_mounts.c
--- linux-2.4.22-pre3-fix/init/do_mounts.c	Wed Jul  9 22:48:48 2003
+++ linux-2.4.22-pre3-fix-ffb/init/do_mounts.c	Wed Jul  9 22:49:40 2003
@@ -767,8 +767,10 @@
 			printk("VFS: Mounted root (nfs filesystem).\n");
 			return;
 		}
+# ifndef CONFIG_NO_FLOPPY_FALLBACK
 		printk(KERN_ERR "VFS: Unable to mount root fs via NFS, trying floppy.\n");
 		ROOT_DEV = MKDEV(FLOPPY_MAJOR, 0);
+# endif
 	}
 #endif
 	devfs_make_root(root_device_name);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/