diff options
Diffstat (limited to 'fs/nfs/nfs4namespace.c')
| -rw-r--r-- | fs/nfs/nfs4namespace.c | 19 | 
1 files changed, 12 insertions, 7 deletions
diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c index 873342308dc0..3680c8da510c 100644 --- a/fs/nfs/nfs4namespace.c +++ b/fs/nfs/nfs4namespace.c @@ -164,16 +164,21 @@ static int nfs4_validate_fspath(struct dentry *dentry,  	return 0;  } -static size_t nfs_parse_server_name(char *string, size_t len, -		struct sockaddr *sa, size_t salen, struct net *net) +size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr *sa, +			     size_t salen, struct net *net, int port)  {  	ssize_t ret;  	ret = rpc_pton(net, string, len, sa, salen);  	if (ret == 0) { -		ret = nfs_dns_resolve_name(net, string, len, sa, salen); -		if (ret < 0) -			ret = 0; +		ret = rpc_uaddr2sockaddr(net, string, len, sa, salen); +		if (ret == 0) { +			ret = nfs_dns_resolve_name(net, string, len, sa, salen); +			if (ret < 0) +				ret = 0; +		} +	} else if (port) { +		rpc_set_port(sa, port);  	}  	return ret;  } @@ -328,7 +333,7 @@ static int try_location(struct fs_context *fc,  			nfs_parse_server_name(buf->data, buf->len,  					      &ctx->nfs_server.address,  					      sizeof(ctx->nfs_server._address), -					      fc->net_ns); +					      fc->net_ns, 0);  		if (ctx->nfs_server.addrlen == 0)  			continue; @@ -496,7 +501,7 @@ static int nfs4_try_replacing_one_location(struct nfs_server *server,  			continue;  		salen = nfs_parse_server_name(buf->data, buf->len, -						sap, addr_bufsize, net); +						sap, addr_bufsize, net, 0);  		if (salen == 0)  			continue;  		rpc_set_port(sap, NFS_PORT);  |