/* * Connection request attempt failed */ void usdf_cm_msg_connreq_failed(struct usdf_connreq *crp, int error) { struct usdf_pep *pep; struct usdf_ep *ep; struct usdf_eq *eq; fid_t fid; struct fi_eq_err_entry err; pep = crp->cr_pep; ep = crp->cr_ep; if (ep != NULL) { fid = ep_utofid(ep); eq = ep->ep_eq; ep->ep_domain->dom_peer_tab[ep->e.msg.ep_rem_peer_id] = NULL; } else { fid = pep_utofid(pep); eq = pep->pep_eq; } err.fid = fid; err.context = NULL; err.data = 0; err.err = -error; err.prov_errno = 0; err.err_data = NULL; err.err_data_size = 0; usdf_eq_write_internal(eq, 0, &err, sizeof(err), USDF_EVENT_FLAG_ERROR); usdf_cm_msg_connreq_cleanup(crp); }
/* Report a connection management related failure. Sometimes there is connection * event data that should be copied into the generated event. If the copy_data * parameter evaluates to true, then the data will be copied. * * If data is to be generated for the error entry, then the connection request * is assumed to have the data size in host order. If something fails during * processing of the error data, then the EQ entry will still be generated * without the error data. */ void usdf_cm_report_failure(struct usdf_connreq *crp, int error, bool copy_data) { struct fi_eq_err_entry err = {0}; struct usdf_pep *pep; struct usdf_ep *ep; struct usdf_eq *eq; fid_t fid; int ret; USDF_DBG_SYS(EP_CTRL, "error=%d (%s)\n", error, fi_strerror(error)); pep = crp->cr_pep; ep = crp->cr_ep; if (ep != NULL) { fid = ep_utofid(ep); eq = ep->ep_eq; ep->ep_domain->dom_peer_tab[ep->e.msg.ep_rem_peer_id] = NULL; } else { fid = pep_utofid(pep); eq = pep->pep_eq; } /* Try to generate the space necessary for the error data. If the * function returns a number greater than or equal to 0, then it was a * success. The return value is the size of the data. */ if (copy_data) { ret = usdf_cm_generate_err_data(eq, crp, &err.err_data); if (ret >= 0) err.err_data_size = ret; } err.fid = fid; err.err = -error; usdf_eq_write_internal(eq, 0, &err, sizeof(err), USDF_EVENT_FLAG_ERROR); usdf_cm_msg_connreq_cleanup(crp); }