예제 #1
0
파일: rpmem_fip.c 프로젝트: janekmi/nvml
/*
 * 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;
}
예제 #2
0
파일: rpmem_fip.c 프로젝트: janekmi/nvml
/*
 * 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;
}
예제 #3
0
파일: rpmem_fip.c 프로젝트: mslusarz/nvml
/*
 * 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;
}