Protocol negotiation in mount.nfs does not correctly negotiate with a server which only support NFSv3 and UDP. When mount.nfs attempts an NFSv4 mount and fails with ECONNREFUSED it does not fall back to NFSv3, as this is not recognised as a "does not support NFSv4" error. However ECONNREFUSED is a clear indication that the server doesn't support TCP, and ipso facto does not support NFSv4. So ECONNREFUSED should trigger a fallback from v4 to v2/3. Once we allow that error, NFSv3 is attempted and mount.nfs talks to rpcbind and discovers that UDP should be used for v3 and the mount succeeds. Signed-off-by: NeilBrown <neilb@xxxxxxx> Reported-by: Carsten Ziepke <kieltux@xxxxxxxxx> diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c index a642394d2f5a..6d4fd70b7b9e 100644 --- a/utils/mount/stropts.c +++ b/utils/mount/stropts.c @@ -807,6 +807,9 @@ static int nfs_autonegotiate(struct nfsmount_info *mi) /* Linux servers prior to 2.6.25 may return * EPERM when NFS version 4 is not supported. */ goto fall_back; + case ECONNREFUSED: + /* UDP-Only servers won't support v4 */ + goto fall_back; default: return result; }
Attachment:
signature.asc
Description: PGP signature