summaryrefslogtreecommitdiffstats
path: root/support/nfs/rpc_socket.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2009-05-18 11:03:54 -0400
committerSteve Dickson <steved@redhat.com>2009-05-18 11:03:54 -0400
commit3ab7ab5db0f825fdd95d017cdd6d6ee5d207dbe8 (patch)
tree58fe0e6841e42e23d6a0064618b34c37a8aaed4a /support/nfs/rpc_socket.c
parentc88c4091db87c0fc23ed67e76d63439b59a82369 (diff)
downloadnfs-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