On Sat, Nov 22, 2008 at 09:08:30PM -0500, Chuck Lever wrote: > Hi Bruce- > > On Nov 22, 2008, at Nov 22, 2008, 11:58 AM, Chuck Lever wrote: >> The nlm_cmp_addr() function, which compares two IP addresses, is >> sometimes used to check AF_UNSPEC addresses. If both addresses are >> AF_UNSPEC, then it should consider them equal -- the contents of an >> AF_UNSPEC address, other than the address family, are >> inconsequential. >> >> This is important because the loop in nlm_lookup_host() always >> compares the h_srcaddr field to the incoming source address. For >> client nlm_host entries, both are always AF_UNSPEC, and should allow >> the entry match to succeed. If it always fails, then we create a >> fresh nlm_host entry every time we mount the same server, even if >> all other items in the existing entry (protocol, NLM version, host >> address) match. >> >> These extra entries will eventually expire once the server is >> unmounted, so the impact of this bug, introduced in 2.6.28 with >> commit 781b61a6, should be minor. >> >> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> >> --- >> Bruce- >> >> Another minor lockd IPv6 bug fix for 2.6.28. >> >> Alternate fix for this problem is to change nlm_lookup_host() so that >> it compares the srcaddrs only when h_server is set. > > I now have a patch that does this instead, and it seems to make more > sense to me. OK. (I don't think you've sent it yet?) --b. > >> include/linux/lockd/lockd.h | 2 ++ >> 1 files changed, 2 insertions(+), 0 deletions(-) >> >> diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h >> index b56d5aa..e8aa108 100644 >> --- a/include/linux/lockd/lockd.h >> +++ b/include/linux/lockd/lockd.h >> @@ -344,6 +344,8 @@ static inline int nlm_cmp_addr(const struct >> sockaddr *sap1, >> { >> if (sap1->sa_family == sap2->sa_family) { >> switch (sap1->sa_family) { >> + case AF_UNSPEC: >> + return 1; >> case AF_INET: >> return __nlm_cmp_addr4(sap1, sap2); >> case AF_INET6: >> > > -- > Chuck Lever > chuck[dot]lever[at]oracle[dot]com -- 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