1
1

osc/rdma: fix deadlock with put_long protocol.

When sending PUT_LONG, the data is sent before headers, and sometimes 
the header is not flushed immediately. This creates a lot of unexpected 
receives in the peer, since it would posts a receive only when gets the 
header, which makes it run out of receive buffers. When the sender 
eventually flushes the window, the receiver already has no buffers to 
receive the header, which causes a deadlock.

The fix is to always flush the headers when doing put_long.

cmr=v1.8.1:reviewer=hjelmn

This commit was SVN r31378.
Этот коммит содержится в:
Yossi Etigin 2014-04-13 16:24:56 +00:00
родитель deff85ffc3
Коммит 7efb724d7b

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

@ -378,7 +378,7 @@ static inline int ompi_osc_rdma_put_w_req (void *origin_addr, int origin_count,
ret = ompi_osc_rdma_frag_finish(module, frag);
if (request) {
if (request || is_long_msg) {
/* need to flush now in case the caller decides to wait on the request */
ompi_osc_rdma_frag_flush_target (module, target);
}