On Wed, Oct 12, 2011 at 03:09:34PM +0800, Mi Jinlong wrote: > The result from ipv6_addr_scope() always not be a single SCOPE, > so we can't use equal to compare the result with IPV6_ADDR_SCOPE_LINKLOCAL > at nfs_sockaddr_match_ipaddr6. > > This patch fixs the problem, and lets checking address before scope_id. Looks right to me, thanks; committing unless someone else catches a problem. --b. > > Signed-off-by: Mi Jinlong <mijinlong@xxxxxxxxxxxxxx> > --- > fs/nfs/client.c | 7 ++++--- > 1 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/fs/nfs/client.c b/fs/nfs/client.c > index 5833fbb..b4e41dd 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, > -- > 1.7.6 > > > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html