[libfabric-users] multi-receive CQ entry with FI_MULTI_RECV, not the last one read by fi_cq_read()?

Hefty, Sean sean.hefty at intel.com
Wed Jun 24 11:29:04 PDT 2020

> I post a multi-receive buffer via fi_recvmsg(..., FI_MULTI_RECV) and then process it by
> reading CQ entries which refer to the messages landing there. When I see a CQ entry
> with FI_MULTI_RECV in its flags I re-post that same multi-receive buffer with
> fi_recvmsg() again. Based on reading the man pages, I've put an assertion in my CQ
> entry processing that if an entry has FI_MULTI_RECV in its flags, that entry must be
> the last one my fi_cq_read() read. Essentially, this assertion is to confirm my
> understanding that nothing can be placed in the multi-receive buffer after the provider
> releases it.

This should be the case.  What version of the library are you using?

Are you posting more than 1 multi-recv buffer?  There were issues in older code where providers were reposting multi-recv buffers to the end of the receive queue.  So, if there were 2 buffers posted, received data would intermingle between them.  (Data ordering was unaffected).

- Sean

More information about the Libfabric-users mailing list