diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2009-05-18 11:03:54 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2009-05-18 11:03:54 -0400 |
commit | 3ab7ab5db0f825fdd95d017cdd6d6ee5d207dbe8 (patch) | |
tree | 58fe0e6841e42e23d6a0064618b34c37a8aaed4a /support/nfs/rpc_socket.c | |
parent | c88c4091db87c0fc23ed67e76d63439b59a82369 (diff) | |
download | nfs-utils-3ab7ab5db0f825fdd95d017cdd6d6ee5d207dbe8.tar.gz nfs-utils-3ab7ab5db0f825fdd95d017cdd6d6ee5d207dbe8.tar.xz nfs-utils-3ab7ab5db0f825fdd95d017cdd6d6ee5d207dbe8.zip |
sm-notify: Don't orphan addrinfo structs
sm-notify orphans an addrinfo struct in its address list rotation
logic if only a single result was returned from getaddrinfo(3).
For each host, the first time through notify_host(), we want to
send a PMAP_GETPORT request. ->ai is NULL, and retries is set to 100,
forcing a DNS lookup and an address rotation. If only a single
addrinfo struct is returned, the rotation logic causes a NULL to be
planted in ->ai, copied from the ai_next field of the returned result.
This means that the second time through notify_host() (to perform the
actual SM_NOTIFY call) we do a second DNS lookup, since ->ai is NULL.
The result of the first lookup has been orphaned, and extra network
traffic is generated.
This scenario is actually fairly common. Since we pass
.ai_protocol = IPPROTO_UDP,
to getaddrinfo(3), for most hosts, which have a single forward and
reverse pointer in the DNS database, we get back a single addrinfo
struct as a result.
To address this problem, only perform the address list rotation if
there is more than one element on the list returned by getaddrinfo(3).
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'support/nfs/rpc_socket.c')
0 files changed, 0 insertions, 0 deletions