On Tue, 2010-09-07 at 13:41 -0700, Ben Greear wrote: > On 09/07/2010 10:56 AM, Trond Myklebust wrote: > > On Fri, 2010-09-03 at 11:55 -0700, Ben Greear wrote: > >> This patch lets one bind the local side of NFS sockets to a particular > >> IP address. This can be useful for users on multi-homed systems. > >> > >> This patch must be on top of the previous patch to fix the IPv6 address > >> comparison or it will not work. > >> > >> Comments and suggestions welcome...I'll incorporate those and post an > >> official signed-off patch after that. > >> > >> Thanks, > >> Ben > >> > > > > The code in nfs_callback_authenticate is going to break NFSv4 callbacks. > > Callbacks are sent to the -oclientaddr address, not srcaddr (btw, I > > really dislike that new boolean argument to nfs_find_client(). If you > > don't want to compare the source address, then have the caller pass a > > NULL pointer). > > > Would this fix the callback issue you speak of? The idea is to > use source and dest to match if it exists, but if we find one > where server address matches and srcaddr isn't specified, > then we will use that. No. As I said, it needs to match the clientaddr argument, not the srcaddr. The problem is that you are now potentially introducing cases where the server may have multiple combinations of clientaddr and srcaddr. > @@ -384,10 +390,30 @@ struct nfs_client *nfs_find_client(const struct sockaddr *addr, u32 nfsversion) > if (!nfs_sockaddr_match_ipaddr(addr, clap)) > continue; > > + if (srcaddr) { > + const struct sockaddr *sa; > + sa = (const struct sockaddr *)&clp->srcaddr; > + if (!nfs_sockaddr_match_ipaddr(srcaddr, sa)) { > + /* If clp doesn't bind to srcaddr, then > + * it is a potential match if we don't find > + * a better one. > + */ > + if (sa->sa_family == AF_UNSPEC && !ok_fit) > + ok_fit = clp; > + continue; > + } > + } > +found_one: > atomic_inc(&clp->cl_count); > spin_unlock(&nfs_client_lock); > return clp; > } > + > + if (ok_fit) { > + clp = ok_fit; > + goto found_one; > + } > + > spin_unlock(&nfs_client_lock); > return NULL; > } > > > Thanks, > Ben > -- 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