PMDK man page

librpma

NAME

rpma_cq_get_completion - receive a completion of an operation

SYNOPSIS

      #include <librpma.h>

      struct rpma_cq;
      enum rpma_op {
              RPMA_OP_READ,
              RPMA_OP_WRITE,
              RPMA_OP_FLUSH,
              RPMA_OP_SEND,
              RPMA_OP_RECV,
              RPMA_OP_RECV_RDMA_WITH_IMM,
      };
      struct rpma_completion {
              void *op_context;
              enum rpma_op op;
              uint32_t byte_len;
              enum ibv_wc_status op_status;
              unsigned flags;
              uint32_t imm;
      };

      int rpma_cq_get_completion(struct rpma_cq *cq,
                      struct rpma_completion *cmpl);

DESCRIPTION

rpma_cq_get_completion() receives the next available completion of an already posted operation. All operations generate completion on error. The operations posted with the RPMA_F_COMPLETION_ALWAYS flag also generate a completion on success.

The rpma_completion structure provides the following fields:

The available op values are:

Note that if the provided cq is the main CQ and the receive CQ is present on the same connection this function won't return RPMA_OP_RECV and RPMA_OP_RECV_RDMA_WITH_IMM at any time. The receive CQ has to be used instead to collect these completions. Please see the rpma_conn_get_rcq(3) for details about the receive CQ.

RETURN VALUE

The rpma_cq_get_completion() function returns 0 on success or a negative error code on failure. On success, it writes the first available completion to cmpl. If op_status of the written cmpl is not equal to IBV_WC_SUCCESS then only op_context of the returned cmpl is valid.

ERRORS

rpma_cq_get_completion() can fail with the following errors:

SEE ALSO

rpma_conn_get_cq(3), rpma_conn_get_rcq(3), rpma_conn_req_recv(3), rpma_cq_wait(3), rpma_cq_get_fd(3), rpma_flush(3), rpma_read(3), rpma_recv(3), rpma_send(3), rpma_send_with_imm(3), rpma_write(3), rpma_write_atomic(3), rpma_write_with_imm(3), librpma(7) and https://pmem.io/rpma/