lib/nvme: add naive poll_group implementation for rdma.
Signed-off-by: Seth Howell <seth.howell@intel.com> Change-Id: I55bae6dddc887a95c3e37195fac821de5aa1ed89 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/631 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
fe5e1db68e
commit
1b818a28b5
@ -128,6 +128,10 @@ struct nvme_rdma_ctrlr {
|
||||
struct nvme_rdma_cm_event_entry *cm_events;
|
||||
};
|
||||
|
||||
struct nvme_rdma_poll_group {
|
||||
struct spdk_nvme_transport_poll_group group;
|
||||
};
|
||||
|
||||
struct spdk_nvme_send_wr_list {
|
||||
struct ibv_send_wr *first;
|
||||
struct ibv_send_wr *last;
|
||||
@ -2150,7 +2154,14 @@ nvme_rdma_admin_qpair_abort_aers(struct spdk_nvme_qpair *qpair)
|
||||
static struct spdk_nvme_transport_poll_group *
|
||||
nvme_rdma_poll_group_create(void)
|
||||
{
|
||||
return NULL;
|
||||
struct nvme_rdma_poll_group *group = calloc(1, sizeof(*group));
|
||||
|
||||
if (group == NULL) {
|
||||
SPDK_ERRLOG("Unable to allocate poll group.\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return &group->group;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -2169,27 +2180,50 @@ static int
|
||||
nvme_rdma_poll_group_add(struct spdk_nvme_transport_poll_group *tgroup,
|
||||
struct spdk_nvme_qpair *qpair)
|
||||
{
|
||||
return -ENOTSUP;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
nvme_rdma_poll_group_remove(struct spdk_nvme_transport_poll_group *tgroup,
|
||||
struct spdk_nvme_qpair *qpair)
|
||||
{
|
||||
return -ENOTSUP;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int64_t
|
||||
nvme_rdma_poll_group_process_completions(struct spdk_nvme_transport_poll_group *tgroup,
|
||||
uint32_t completions_per_qpair, spdk_nvme_disconnected_qpair_cb disconnected_qpair_cb)
|
||||
{
|
||||
return -ENOTSUP;
|
||||
struct spdk_nvme_qpair *qpair, *tmp_qpair;
|
||||
int32_t local_completions = 0;
|
||||
int64_t total_completions = 0;
|
||||
|
||||
STAILQ_FOREACH_SAFE(qpair, &tgroup->disconnected_qpairs, poll_group_stailq, tmp_qpair) {
|
||||
disconnected_qpair_cb(qpair, tgroup->group->ctx);
|
||||
}
|
||||
|
||||
STAILQ_FOREACH_SAFE(qpair, &tgroup->connected_qpairs, poll_group_stailq, tmp_qpair) {
|
||||
local_completions = spdk_nvme_qpair_process_completions(qpair, completions_per_qpair);
|
||||
if (local_completions < 0) {
|
||||
disconnected_qpair_cb(qpair, tgroup->group->ctx);
|
||||
local_completions = 0;
|
||||
}
|
||||
total_completions += local_completions;
|
||||
}
|
||||
|
||||
return total_completions;
|
||||
}
|
||||
|
||||
static int
|
||||
nvme_rdma_poll_group_destroy(struct spdk_nvme_transport_poll_group *tgroup)
|
||||
{
|
||||
return -ENOTSUP;
|
||||
if (!STAILQ_EMPTY(&tgroup->connected_qpairs) || !STAILQ_EMPTY(&tgroup->disconnected_qpairs)) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
free(tgroup);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -95,6 +95,8 @@ DEFINE_STUB_V(spdk_nvme_trid_populate_transport, (struct spdk_nvme_transport_id
|
||||
enum spdk_nvme_transport_type trtype));
|
||||
DEFINE_STUB(nvme_get_transport, const struct spdk_nvme_transport *, (const char *transport_name),
|
||||
NULL);
|
||||
DEFINE_STUB(spdk_nvme_qpair_process_completions, int32_t, (struct spdk_nvme_qpair *qpair,
|
||||
uint32_t max_completions), 0);
|
||||
|
||||
/* Fabric transports only */
|
||||
DEFINE_STUB_V(nvme_ctrlr_disconnect_qpair, (struct spdk_nvme_qpair *qpair));
|
||||
|
@ -44,8 +44,6 @@ SPDK_LOG_REGISTER_COMPONENT("nvme", SPDK_LOG_NVME);
|
||||
|
||||
DEFINE_STUB(nvme_qpair_submit_request,
|
||||
int, (struct spdk_nvme_qpair *qpair, struct nvme_request *req), 0);
|
||||
DEFINE_STUB(spdk_nvme_qpair_process_completions, int32_t, (struct spdk_nvme_qpair *qpair,
|
||||
uint32_t max_completions), 0);
|
||||
|
||||
DEFINE_STUB(spdk_sock_set_priority,
|
||||
int, (struct spdk_sock *sock, int priority), 0);
|
||||
|
Loading…
Reference in New Issue
Block a user