[Gluster-devel] rdma: misuse of ibv_ack_cq_events api

Lorne Li lorneli.cs at gmail.com
Wed Sep 5 14:09:13 UTC 2018

Hello folks,

I think ibv_ack_cq_events may be used incorrectly in 
and gf_rdma_send_completion_proc functions in 

Function gf_rdma_recv_completion_proc calls ibv_ack_cq_events(event_cq, 
before it returns, where the num_wr is the number of work completions 
by ibv_poll_cq function. Therefore, this function regards the number of work
completions(ibv_wc) as the number of completion queue events.

But if I have understood correctly, completion queue events are produced by
ibv_get_cq_event instead of ibv_poll_cq. So after ibv_get_cq_event producing
an event, users should call `ibv_ack_cq_events(event_cq, 1)` to ack this 

Looking forward to your reply. Thanks.


Here is example code of `ibv_get_cq_event` man page, which supports my 

     /* https://linux.die.net/man/3/ibv_get_cq_event */

     /* Wait for the completion event */
     if (ibv_get_cq_event(channel, &ev_cq, &ev_ctx)) {
         fprintf(stderr, "Failed to get cq_event\n");
         return 1;

     /* Ack the event */
     ibv_ack_cq_events(ev_cq, 1);

     /* Request notification upon the next completion event */
     if (ibv_req_notify_cq(ev_cq, 0)) {
         fprintf(stderr, "Couldn't request CQ notification\n");
         return 1;

More information about the Gluster-devel mailing list