示例#1
0
文件: rpmemd.c 项目: plebioda/nvml
/*
 * rpmemd_common_fip_init -- initialize fabric provider
 */
static int
rpmemd_common_fip_init(struct rpmemd *rpmemd, const struct rpmem_req_attr *req,
	struct rpmem_resp_attr *resp, int *status)
{
	/* register the whole pool with header in RDMA */
	void *addr = (void *)((uintptr_t)rpmemd->pool->pool_addr);
	struct rpmemd_fip_attr fip_attr = {
		.addr		= addr,
		.size		= req->pool_size,
		.nlanes		= req->nlanes,
		.nthreads	= rpmemd->nthreads,
		.provider	= req->provider,
		.persist_method = rpmemd->persist_method,
		.deep_persist	= rpmemd_deep_persist,
		.ctx		= rpmemd
	};

	const int is_pmem = rpmemd_db_pool_is_pmem(rpmemd->pool);
	if (rpmemd_apply_pm_policy(&fip_attr.persist_method, &fip_attr.persist,
			is_pmem)) {
		*status = RPMEM_ERR_FATAL;
		goto err_fip_init;
	}

	const char *node = rpmem_get_ssh_conn_addr();
	enum rpmem_err err;

	rpmemd->fip = rpmemd_fip_init(node, NULL, &fip_attr, resp, &err);
	if (!rpmemd->fip) {
		*status = (int)err;
		goto err_fip_init;
	}

	return 0;
err_fip_init:
	return -1;
}

/*
 * rpmemd_print_req_attr -- print request attributes
 */
static void
rpmemd_print_req_attr(const struct rpmem_req_attr *req)
{
	RPMEMD_LOG(NOTICE, RPMEMD_LOG_INDENT "pool descriptor: '%s'",
			_str(req->pool_desc));
	RPMEMD_LOG(NOTICE, RPMEMD_LOG_INDENT "pool size: %lu", req->pool_size);
	RPMEMD_LOG(NOTICE, RPMEMD_LOG_INDENT "nlanes: %u", req->nlanes);
	RPMEMD_LOG(NOTICE, RPMEMD_LOG_INDENT "provider: %s",
			rpmem_provider_to_str(req->provider));
}
示例#2
0
/*
 * rpmemd_common_fip_init -- initialize fabric provider
 */
static int
rpmemd_common_fip_init(struct rpmemd *rpmemd, const struct rpmem_req_attr *req,
                       struct rpmem_resp_attr *resp, int *status)
{
    void *addr = (void *)((uintptr_t)rpmemd->pool->pool_addr +
                          POOL_HDR_SIZE);
    struct rpmemd_fip_attr fip_attr = {
        .addr		= addr,
        .size		= req->pool_size,
        .nlanes		= req->nlanes,
        .nthreads	= rpmemd->nthreads,
        .provider	= req->provider,
        .persist_method = rpmemd->persist_method,
        .persist	= rpmemd->persist,
    };

    const char *node = rpmem_get_ssh_conn_addr();
    enum rpmem_err err;

    rpmemd->fip = rpmemd_fip_init(node, NULL, &fip_attr, resp, &err);
    if (!rpmemd->fip) {
        *status = (int)err;
        goto err_fip_init;
    }

    return 0;
err_fip_init:
    return -1;
}

/*
 * rpmemd_print_req_attr -- print request attributes
 */
static void
rpmemd_print_req_attr(const struct rpmem_req_attr *req)
{
    RPMEMD_LOG(NOTICE, "\tpool descriptor: '%s'", _str(req->pool_desc));
    RPMEMD_LOG(NOTICE, "\tpool size: %lu", req->pool_size);
    RPMEMD_LOG(NOTICE, "\tnlanes: %u", req->nlanes);
    RPMEMD_LOG(NOTICE, "\tprovider: %s",
               rpmem_provider_to_str(req->provider));
}