mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 21:24:00 +08:00
NFSv4 handle port presence in fs_location server string
An fs_location attribute returns a string that can be ipv4, ipv6, or DNS name. An ip location can have a port appended to it and if no port is present a default port needs to be set. If rpc_pton() fails to parse, try calling rpc_uaddr2socaddr() that can convert an universal address. Signed-off-by: Olga Kornievskaia <kolga@netapp.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
f5b27cc676
commit
a8d54baba7
@ -281,7 +281,7 @@ int nfs4_submount(struct fs_context *, struct nfs_server *);
|
||||
int nfs4_replace_transport(struct nfs_server *server,
|
||||
const struct nfs4_fs_locations *locations);
|
||||
size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr *sa,
|
||||
size_t salen, struct net *net);
|
||||
size_t salen, struct net *net, int port);
|
||||
/* nfs4proc.c */
|
||||
extern int nfs4_handle_exception(struct nfs_server *, int, struct nfs4_exception *);
|
||||
extern int nfs4_async_handle_error(struct rpc_task *task,
|
||||
|
@ -165,15 +165,20 @@ static int nfs4_validate_fspath(struct dentry *dentry,
|
||||
}
|
||||
|
||||
size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr *sa,
|
||||
size_t salen, struct net *net)
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user