Index: util-linux-ng-2.12r+2.13pre7/mount/nfs.5 =================================================================== --- util-linux-ng-2.12r+2.13pre7.orig/mount/nfs.5 +++ util-linux-ng-2.12r+2.13pre7/mount/nfs.5 @@ -199,11 +199,11 @@ writing to common filesystem on the serv .TP 1.5i .I tcp Mount the NFS filesystem using the TCP protocol instead of the -default UDP protocol. Many NFS servers only support UDP. +UDP protocol. This is the default, but in case it fails (many NFS servers only +support UDP) it will fallback and try UDP. .TP 1.5i .I udp -Mount the NFS filesystem using the UDP protocol. This -is the default. +Mount the NFS filesystem using the UDP protocol. .TP 1.5i .I noacl Assume no extended access control mechanisms like POSIX ACLs are used @@ -227,8 +227,5 @@ interrupted. The posix, and nocto options are parsed by mount but currently are silently ignored. .P -The tcp and namlen options are implemented but are not currently -supported by the Linux kernel. -.P The umount command should notify the server when an NFS filesystem is unmounted. Index: util-linux-ng-2.12r+2.13pre7/mount/nfsmount.c =================================================================== --- util-linux-ng-2.12r+2.13pre7.orig/mount/nfsmount.c +++ util-linux-ng-2.12r+2.13pre7/mount/nfsmount.c @@ -317,7 +317,7 @@ int nfsmount(const char *spec, const cha noacl = 0; noac = 0; retry = 10000; /* 10000 minutes ~ 1 week */ - tcp = 0; + tcp = 2; mountprog = MOUNTPROG; mountvers = 0; @@ -437,6 +437,8 @@ int nfsmount(const char *spec, const cha } } } + +retry_udp: proto = (tcp) ? IPPROTO_TCP : IPPROTO_UDP; data.flags = (soft ? NFS_MOUNT_SOFT : 0) @@ -740,7 +742,13 @@ int nfsmount(const char *spec, const cha * '0' for port (service unavailable), we then exit, * notifying the user, rather than hanging up mount. */ - if (port == 0 && tcp == 1) { + if (port == 0 && tcp) { + if (tcp == 2) { + fprintf(stderr, "nfs server reported tcp not available, falling back to udp\n"); + close(fsock); + tcp = 0; + goto retry_udp; + } perror(_("nfs server reported service unavailable")); goto fail; }