static void pscom_extoll_rma2_do_write(pscom_con_t *con) { unsigned int len; struct iovec iov[2]; pscom_req_t *req; req = pscom_write_get_iov(con, iov); if (req) { psex_con_info_t *ci = con->arch.extoll.ci; len = iov[0].iov_len + iov[1].iov_len; int rlen = psex_sendv(ci, iov, len); if (rlen >= 0) { pscom_write_done(con, req, rlen); } else if ((rlen == -EINTR) || (rlen == -EAGAIN)) { // Busy: Maybe out of tokens? try to read more tokens: _pscom_extoll_rma2_do_read(con, ci); } else { // Error pscom_con_error(con, PSCOM_OP_WRITE, PSCOM_ERR_STDERROR); } } }
static void _psex_send_tokens(psex_con_info_t *con_info) { if (con_info->n_tosend_toks >= psex_pending_tokens) { if (psex_sendv(con_info, NULL, 0) == -EAGAIN) { psex_stat.busy_token_refresh++; } } }