diff options
Diffstat (limited to 'fs/nfs/client.c')
| -rw-r--r-- | fs/nfs/client.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 5833fbbf59b0..873bf00d51a2 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -336,11 +336,12 @@ static int nfs_sockaddr_match_ipaddr6(const struct sockaddr *sa1,  	const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sa1;  	const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sa2; -	if (ipv6_addr_scope(&sin1->sin6_addr) == IPV6_ADDR_SCOPE_LINKLOCAL && -	    sin1->sin6_scope_id != sin2->sin6_scope_id) +	if (!ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr))  		return 0; +	else if (ipv6_addr_type(&sin1->sin6_addr) & IPV6_ADDR_LINKLOCAL) +		return sin1->sin6_scope_id == sin2->sin6_scope_id; -	return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); +	return 1;  }  #else	/* !defined(CONFIG_IPV6) && !defined(CONFIG_IPV6_MODULE) */  static int nfs_sockaddr_match_ipaddr6(const struct sockaddr *sa1, @@ -1867,6 +1868,10 @@ static int nfs_server_list_show(struct seq_file *m, void *v)  	/* display one transport per line on subsequent lines */  	clp = list_entry(v, struct nfs_client, cl_share_link); +	/* Check if the client is initialized */ +	if (clp->cl_cons_state != NFS_CS_READY) +		return 0; +  	seq_printf(m, "v%u %s %s %3d %s\n",  		   clp->rpc_ops->version,  		   rpc_peeraddr2str(clp->cl_rpcclient, RPC_DISPLAY_HEX_ADDR), |