ssize_t usdf_dgram_send(struct fid_ep *fep, const void *buf, size_t len, void *desc, fi_addr_t dest_addr, void *context) { struct usdf_dest *dest; struct usdf_ep *ep; uint32_t flags; ep = ep_ftou(fep); dest = (struct usdf_dest *)(uintptr_t) dest_addr; flags = (ep->ep_tx_completion) ? USD_SF_SIGNAL : 0; if (len + sizeof(struct usd_udp_hdr) <= USD_SEND_MAX_COPY) { return usd_post_send_one_copy(ep->e.dg.ep_qp, &dest->ds_dest, buf, len, flags, context); } else if (ep->e.dg.tx_op_flags & FI_INJECT) { USDF_DBG_SYS(EP_DATA, "given inject length (%zu) exceeds max inject length (%d)\n", len + sizeof(struct usd_udp_hdr), USD_SEND_MAX_COPY); return -FI_ENOSPC; } return usd_post_send_one(ep->e.dg.ep_qp, &dest->ds_dest, buf, len, flags, context); }
static inline ssize_t _usdf_dgram_send(struct usdf_ep *ep, struct usdf_dest *dest, const void *buf, size_t len, void *context) { if (len <= USD_SEND_MAX_COPY - sizeof(struct usd_udp_hdr)) { return usd_post_send_one_copy(ep->e.dg.ep_qp, &dest->ds_dest, buf, len, USD_SF_SIGNAL, context); } else { return usd_post_send_one(ep->e.dg.ep_qp, &dest->ds_dest, buf, len, USD_SF_SIGNAL, context); } }