[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 12:04:00 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).

In addition, there was also an issue in the multi-recv posting path not handling unexpected messages correctly.  I don't remember which version of libfabric correct the above issues, but they should be fixed in the upstream code.

- Sean

More information about the Libfabric-users mailing list