ibat/resolve: retry ibat resolution
authorshefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 18 Feb 2010 21:51:19 +0000 (21:51 +0000)
committershefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 18 Feb 2010 21:51:19 +0000 (21:51 +0000)
commite5d2b0e37ea5b8f286642ba52ce2cb0ff035e426
tree0b8c39abc61e0e035c602d23afa6c813eb82a92d
parent7c5192b22709210c783daf52aea285b3107ba282
ibat/resolve: retry ibat resolution

Winverbs ND scale out testing showed that IBAT::Resolve() can
return E_PENDING, which requires that the resolution be retried.
A similar issue to this was seen when testing with the librdmacm.
Rather than duplicating retry logic in the winverbs ND provider,
add new functionality to ibat, with retry capability.  To
avoid breaking the ibat.dll interface, extend the API with a
new call ResolvePath() that takes a timeout value.

ResolvePath() automatically retries Resolve() while the result
is E_PENDING, until the request times out.  Modify the winverbs
ND provider to call ResolvePath().  Also update other places
where Resolve() is called in a loop: the librdmacm and wsd.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2703 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86
core/ibat/user/ibat.cpp
inc/user/iba/ibat.h
ulp/librdmacm/src/cma.cpp
ulp/netdirect/user/nd_connect.cpp
ulp/wsd/user/ibsp_ip.c