I can't tell if this is a problem, though I suspect it's a small one
even if it's a problem at all.
In mca_bml_r2_del_proc_btl(), a BTL is removed from the send list and
from the RDMA list.
If the BTL is removed from the send list, the end-point's max send size
is recomputed to be the minimum of the max send sizes of the remaining
BTLs. The code looks like this, where I've removed some code to focus
on the parts that matter:
/* remove btl from send list */
if(mca_bml_base_btl_array_remove(&ep->btl_send, btl)) {
/* reset max_send_size to the min of all btl's */
for(b=0; b< mca_bml_base_btl_array_get_size(&ep->btl_send); b++) {
bml_btl = mca_bml_base_btl_array_get_index(&ep->btl_send, b);
ep_btl = bml_btl->btl;
if (ep_btl->btl_max_send_size < ep->btl_max_send_size) {
ep->btl_max_send_size = ep_btl->btl_max_send_size;
}
}
}
Shouldn't that inner loop be preceded by initialization of
ep->btl_max_send_size to some very large value (ironically enough,
perhaps "-1")?
Something similar happens in the same function when the BTL is removed
from the RDMA list and ep->btl_pipeline_send_length and
ep->btl_send_limit are recomputed.