]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
mount: Set protocol family properly for "udp" and "tcp"
authorChuck Lever <chuck.lever@oracle.com>
Thu, 18 Feb 2010 11:41:11 +0000 (06:41 -0500)
committerSteve Dickson <steved@redhat.com>
Thu, 18 Feb 2010 11:41:11 +0000 (06:41 -0500)
In nfs_nfs_proto_family(), *family is never set if the legacy
"udp" or "tcp" mount options are specified.  The result is an error
message at umount time, for example:

umount.nfs: DNS resolution failed for
  2001:5c0:1101:2f00:250:8dff:fe95:5c61: ai_family not supported

even if mount was built with IPv6 support.

The man page says that "udp" is a synonym for "proto=udp", and
likewise for "tcp".  Thus, we don't look at config_default_family
here, but always use AF_INET explicitly, to be consistent with the
meaning of proto=.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
utils/mount/network.c

index f020933dfe87d6ed1d55e6e04b401943d5d768a2..8dc183a16e78983ef8fcf8f79506275b1c635763 100644 (file)
@@ -1373,8 +1373,9 @@ int nfs_nfs_proto_family(struct mount_options *options,
 
        switch (po_rightmost(options, nfs_transport_opttbl)) {
        case 0: /* udp */
 
        switch (po_rightmost(options, nfs_transport_opttbl)) {
        case 0: /* udp */
-               return 1;
        case 1: /* tcp */
        case 1: /* tcp */
+               /* for compatibility; these are always AF_INET */
+               *family = AF_INET;
                return 1;
        case 2: /* proto */
                option = po_get(options, "proto");
                return 1;
        case 2: /* proto */
                option = po_get(options, "proto");