/* * rpmem_fip_close -- close connection to remote peer */ int rpmem_fip_close(struct rpmem_fip *fip) { int ret; int lret = 0; ret = fi_shutdown(fip->ep, 0); if (ret) { RPMEM_FI_ERR(ret, "disconnecting endpoint"); lret = ret; } struct fi_eq_cm_entry entry; ret = rpmem_fip_read_eq(fip->eq, &entry, FI_SHUTDOWN, &fip->ep->fid, -1); if (ret) lret = ret; ret = rpmem_fip_fini_ep(fip); if (ret) lret = ret; ret = rpmem_fip_fini_cq(fip); if (ret) lret = ret; return lret; }
/* * rpmem_fip_connect -- connect to remote peer */ int rpmem_fip_connect(struct rpmem_fip *fip) { int ret; struct fi_eq_cm_entry entry; ret = rpmem_fip_init_cq(fip); if (ret) goto err_init_cq; ret = rpmem_fip_init_ep(fip); if (ret) goto err_init_ep; ret = fip->ops->lanes_post(fip); if (ret) goto err_lanes_post; ret = fi_connect(fip->ep, fip->fi->dest_addr, NULL, 0); if (ret) { RPMEM_FI_ERR(ret, "initiating connection request"); goto err_fi_connect; } ret = rpmem_fip_read_eq(fip->eq, &entry, FI_CONNECTED, &fip->ep->fid, -1); if (ret) goto err_fi_eq_read; return 0; err_fi_eq_read: err_fi_connect: err_lanes_post: rpmem_fip_fini_ep(fip); err_init_ep: rpmem_fip_fini_cq(fip); err_init_cq: return ret; }
/* * rpmem_fip_close -- close connection to remote peer */ int rpmem_fip_close(struct rpmem_fip *fip) { int ret; int lret = 0; ret = fi_shutdown(fip->ep, 0); if (ret) { RPMEM_FI_ERR(ret, "disconnecting endpoint"); lret = ret; } ret = rpmem_fip_fini_ep(fip); if (ret) lret = ret; ret = rpmem_fip_fini_cq(fip); if (ret) lret = ret; return lret; }