/** * frwr_wc_fastreg - Invoked by RDMA provider for each polled FastReg WC * @cq: completion queue (ignored) * @wc: completed WR * */ static void frwr_wc_fastreg(struct ib_cq *cq, struct ib_wc *wc) { struct rpcrdma_frmr *frmr; struct ib_cqe *cqe; /* WARNING: Only wr_cqe and status are reliable at this point */ if (wc->status != IB_WC_SUCCESS) { cqe = wc->wr_cqe; frmr = container_of(cqe, struct rpcrdma_frmr, fr_cqe); __frwr_sendcompletion_flush(wc, frmr, "fastreg"); }
/** * frwr_wc_localinv - Invoked by RDMA provider for a flushed LocalInv WC * @cq: completion queue (ignored) * @wc: completed WR * */ static void frwr_wc_localinv(struct ib_cq *cq, struct ib_wc *wc) { struct ib_cqe *cqe = wc->wr_cqe; struct rpcrdma_frwr *frwr = container_of(cqe, struct rpcrdma_frwr, fr_cqe); /* WARNING: Only wr_cqe and status are reliable at this point */ if (wc->status != IB_WC_SUCCESS) { frwr->fr_state = FRWR_FLUSHED_LI; __frwr_sendcompletion_flush(wc, "localinv"); } trace_xprtrdma_wc_li(wc, frwr); }