1
1

usnic: only warn about each unreachable endpoint once

fi_av_insert() is invoked with a context containing each endpoint
USNIC_NUM_CHANNELS times.  If the address on that endpoint fails to
resolve / is unreachable / has some error, we'll therefore get
USNIC_NUM_CHANNELS error completions with that same endpoint.  We
therefore only want to warn about the unreachability of (and
OBJ_RELEASE) that endpoint the *first* time.

Fixes CSCut46822.
Этот коммит содержится в:
Jeff Squyres 2015-03-27 11:55:59 -07:00
родитель 506431d1b6
Коммит 6da77ee940

Просмотреть файл

@ -240,6 +240,7 @@ add_procs_reap_fi_av_inserts(opal_btl_usnic_module_t *module,
else if (-FI_EAVAIL == ret) {
ret = fi_eq_readerr(module->av_eq, &err_entry, 0);
if (sizeof(err_entry) == ret) {
context = err_entry.context;
/* Got some kind of address failure. This usually means
that we couldn't find a route to that peer (e.g., the
@ -247,14 +248,14 @@ add_procs_reap_fi_av_inserts(opal_btl_usnic_module_t *module,
can't reach this peer, and print a pretty warning. */
if (EADDRNOTAVAIL == err_entry.err ||
EHOSTUNREACH == err_entry.err) {
context = err_entry.context;
add_procs_warn_unreachable(module, context->endpoint);
/* NULL out this endpoint in the array so that the
caller knows it's unreachable */
/* RFXXX - index in context? */
for (i = 0; i < array_len; ++i) {
if (endpoints[i] == context->endpoint) {
add_procs_warn_unreachable(module,
context->endpoint);
OBJ_RELEASE(context->endpoint);
endpoints[i] = NULL;