Re: [BUG?] Maybe NFS bug since 2.6.37 on SPARC64

Lukas Razik
2011-11-13T21:29:01Z

Chuck Lever <chuck.lever@oracle.com>:

> This changes the behavior of normal user space NFS mounts as well.  User space
> mounts are already retried by the mount.nfs program.  We risk making the
> mount(2) system call hang by retrying here.
>
> I think we prefer a solution that changes the behavior of only NFSROOT mounts.
> Have you tried wrapping mount_root_nfs() as I suggested?
>

No, because there's no "mount_root_nfs()" - hence I thought you've meant an older kernel and tried a work around - sorry for that.
Now I think you meant "mount_nfs_root()" and wrote the wrapper you've mentioned:
---
[ 1764.189975] ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 1765.212110] IP-Config: Complete:
[ 1765.212180]      device=eth0, addr=137.226.167.242, mask=255.255.255.224, gw=137.226.167.225,
[ 1765.212383]      host=137.226.167.242, domain=, nis-domain=(none),
[ 1765.212498]      bootserver=255.255.255.255, rootserver=137.226.167.241, rootpath=
[ 1765.212943] VFS: 1. attempt to mount root fs via NFS.
[ 1765.212992] Root-NFS: nfsroot=/srv/nfs/cluster2
[ 1765.213265] NFS: nfs mount opts='udp,nolock,addr=137.226.167.241'
[ 1765.213315] NFS:   parsing nfs mount option 'udp'
[ 1765.213353] NFS:   parsing nfs mount option 'nolock'
[ 1765.213399] NFS:   parsing nfs mount option 'addr=137.226.167.241'
[ 1765.213467] NFS: MNTPATH: '/srv/nfs/cluster2'
[ 1765.213501] NFS: sending MNT request for 137.226.167.241:/srv/nfs/cluster2
[ 1766.298480] e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx
[ 1766.318949] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 1800.284325] NFS: failed to create MNT RPC client, status=-60
[ 1800.284435] NFS: unable to mount server 137.226.167.241, error -60
[ 1800.284571] VFS: 2. attempt to mount root fs via NFS.
[ 1800.284682] Root-NFS: nfsroot=/srv/nfs/cluster2
[ 1800.285051] NFS: nfs mount opts='udp,nolock,addr=137.226.167.241,nolock,addr=137.226.167.241'
[ 1800.285167] NFS:   parsing nfs mount option 'udp'
[ 1800.285233] NFS:   parsing nfs mount option 'nolock'
[ 1800.285337] NFS:   parsing nfs mount option 'addr=137.226.167.241'
[ 1800.285455] NFS:   parsing nfs mount option 'nolock'
[ 1800.285531] NFS:   parsing nfs mount option 'addr=137.226.167.241'
[ 1800.285635] NFS: MNTPATH: '/srv/nfs/cluster2'
[ 1800.285699] NFS: sending MNT request for 137.226.167.241:/srv/nfs/cluster2
[ 1800.290635] NFS: received 1 auth flavors
[ 1800.290697] NFS:   auth flavor[0]: 1
[ 1800.290806] NFS: MNT request succeeded
[ 1800.290867] NFS: using auth flavor 1
[ 1800.295352] VFS: Mounted root (nfs filesystem) on device 0:13.
INIT: version 2.88 booting
---

I've used no while(true) because VFS tries to mount from floppy if NFS wasn't successful.
That's the patch:
--- linux-2.6.39.4/init/do_mounts.c    2011-08-03 21:43:28.000000000 +0200
+++ linux-2.6.39.4-fix/init/do_mounts.c    2011-11-13 22:22:29.000000000 +0100
@@ -405,9 +405,14 @@
void __init mount_root(void)
{
#ifdef CONFIG_ROOT_NFS
+    char attempt;
+
if (MAJOR(ROOT_DEV) == UNNAMED_MAJOR) {
-        if (mount_nfs_root())
-            return;
+        for(attempt = 1; attempt <= 3; attempt++) {
+            printk(KERN_INFO "VFS: %d. attempt to mount root fs via NFS.\n", attempt);
+            if (mount_nfs_root())
+                return;
+        }

printk(KERN_ERR "VFS: Unable to mount root fs via NFS, trying floppy.\n");
ROOT_DEV = Root_FD0;
--
Regards,
Lukas