in src/nccl_ofi_net.c [157:241]
static inline int free_nccl_ofi_req(nccl_ofi_req_t *req, bool dec_inflight_cmds)
{
int ret = ncclSuccess;
sendComm_t *sComm = NULL;
recvComm_t *rComm = NULL;
uint64_t buffer_index;
if (OFI_UNLIKELY(req == NULL)) {
ret = ncclSystemError;
NCCL_OFI_WARN("Provided null request for cleanup");
goto exit;
}
if (req->direction == NCCL_OFI_SEND) {
sComm = req->sComm;
if (OFI_UNLIKELY(sComm == NULL)) {
ret = ncclSystemError;
NCCL_OFI_WARN("Invalid sComm provided for request of device %d",
sComm->dev);
goto exit;
}
/* Update free list */
if (OFI_UNLIKELY(sComm->nccl_ofi_reqs_fl == NULL)) {
ret = ncclSystemError;
NCCL_OFI_WARN("sComm for device %d does not have valid free list",
sComm->dev);
goto exit;
}
buffer_index = req->buffer_index;
/* Zero out buffer */
zero_nccl_ofi_req(req);
ret = stack_push(sComm->nccl_ofi_reqs_fl->free_index,
buffer_index);
if (OFI_UNLIKELY(ret != 0))
goto exit;
/* Reduce inflight commands */
if (OFI_LIKELY(dec_inflight_cmds == true))
sComm->num_inflight_reqs--;
}
else if (req->direction == NCCL_OFI_RECV) {
rComm = req->rComm;
if (OFI_UNLIKELY(rComm == NULL)) {
ret = ncclSystemError;
NCCL_OFI_WARN("Invalid rComm provided for request of device %d",
rComm->dev);
goto exit;
}
/* Update free list */
if (OFI_UNLIKELY(rComm->nccl_ofi_reqs_fl == NULL)) {
ret = ncclSystemError;
NCCL_OFI_WARN("rComm for device %d does not have valid free list",
rComm->dev);
goto exit;
}
buffer_index = req->buffer_index;
/* Zero out buffer */
zero_nccl_ofi_req(req);
ret = stack_push(rComm->nccl_ofi_reqs_fl->free_index,
buffer_index);
if (OFI_UNLIKELY(ret != 0))
goto exit;
/* Reduce inflight commands */
if (OFI_LIKELY(dec_inflight_cmds == true))
rComm->num_inflight_reqs--;
}
else {
ret = ncclSystemError;
NCCL_OFI_WARN("Unexpected transaction direction. Transaction direction: %d",
req->direction);
}
exit:
return ret;
}