On Wed, 11 Mar 2009 18:09:11 -0400 Chuck Lever <chuck.lever@xxxxxxxxxx> wrote: > > + > > + switch (ss->ss_family) { > > + case AF_INET: > > + if (s4->sin_port != 0) { > > + printerr(2, "DEBUG: port already set to %d\n", > > + ntohs(s4->sin_port)); > > + return 1; > > + } > > + if (!inet_ntop(AF_INET, &s4->sin_addr, node, > > + sizeof(struct sockaddr_in))) > > + return 0; > > I know you are copying this mostly verbatim, but I'm not sure exactly > what this is doing. You can pass a C string containing the port > number, or a C string containing the service name, to getaddrinfo(3) > and have it fill in the port, I think. This part wasn't copied... What I'm trying to do here is skip doing a getaddrinfo if the port number was already sent in the upcall. There appear to be 2 versions of the info sent by the kernel in the upcall. The older one did not have a field for the port number. For older kernels that don't have this field, we need to look it up with getaddrinfo. But...there's really no need to do a getaddrinfo call if we already have a sockaddr that's ready to go, and I think that'll be the common case. Come to think of it, we could just do this for IPv4 since we know that all IPv6-enabled kernels will send the port. I'll have to think about that some more... Anyway, thanks for the review so far. I'll work on incorporating your suggestions (particularly the ones about sockaddr vs. sockaddr_storage) and will respin the set and resend after some more testing. Cheers, -- Jeff Layton <jlayton@xxxxxxxxxx> -- 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