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.
Этот коммит содержится в:
родитель
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);
|
||||
}
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user