nvmf: Poll groups now automatically register pollers

This simplifies the public API and requirements for
user applications.

Change-Id: Ibb0d25a7838a0fa683f39e79cb4fef78adf6aee8
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/388040
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Ben Walker 2017-11-17 11:31:29 -07:00 committed by Jim Harris
parent 2bbe6a8021
commit eaaddf3d48
9 changed files with 21 additions and 86 deletions

View File

@ -44,7 +44,6 @@
struct nvmf_tgt_poll_group {
struct spdk_nvmf_poll_group *group;
struct spdk_poller *poller;
};
struct nvmf_tgt g_tgt = {};
@ -111,14 +110,6 @@ spdk_nvmf_shutdown_cb(void)
nvmf_tgt_advance_state(NULL, NULL);
}
static void
subsystem_poll(void *arg)
{
struct nvmf_tgt_subsystem *app_subsys = arg;
spdk_nvmf_subsystem_poll(app_subsys->subsystem);
}
static void
_nvmf_tgt_start_subsystem(void *arg1, void *arg2)
{
@ -126,8 +117,6 @@ _nvmf_tgt_start_subsystem(void *arg1, void *arg2)
struct spdk_nvmf_subsystem *subsystem = app_subsys->subsystem;
spdk_nvmf_subsystem_start(subsystem);
app_subsys->poller = spdk_poller_register(subsystem_poll, app_subsys, 0);
}
void
@ -210,14 +199,6 @@ acceptor_poll(void *arg)
spdk_nvmf_tgt_accept(tgt);
}
static void
nvmf_tgt_poll_group_poll(void *arg)
{
struct nvmf_tgt_poll_group *app_poll_group = arg;
spdk_nvmf_poll_group_poll(app_poll_group->group);
}
static void
nvmf_tgt_destroy_poll_group_done(void *arg1, void *arg2)
{
@ -236,8 +217,6 @@ nvmf_tgt_destroy_poll_group(void *arg1, void *arg2)
pg = &g_poll_groups[g_tgt.core];
assert(pg != NULL);
spdk_poller_unregister(&pg->poller);
spdk_nvmf_poll_group_destroy(pg->group);
pg->group = NULL;
@ -276,7 +255,6 @@ nvmf_tgt_create_poll_group(void *arg1, void *arg2)
SPDK_ERRLOG("Failed to create poll group for core %u\n", g_tgt.core);
}
pg->poller = spdk_poller_register(nvmf_tgt_poll_group_poll, pg, 0);
g_active_poll_groups++;
spdk_event_call(event);

View File

@ -111,11 +111,6 @@ struct spdk_nvmf_poll_group *spdk_nvmf_poll_group_create(struct spdk_nvmf_tgt *t
*/
void spdk_nvmf_poll_group_destroy(struct spdk_nvmf_poll_group *group);
/**
* Check a poll group for work completions.
*/
int spdk_nvmf_poll_group_poll(struct spdk_nvmf_poll_group *group);
/*
* The NVMf subsystem, as indicated in the specification, is a collection
* of controllers. Any individual controller has
@ -254,9 +249,6 @@ struct spdk_nvmf_listener *spdk_nvmf_subsystem_get_next_listener(
const struct spdk_nvme_transport_id *spdk_nvmf_listener_get_trid(
struct spdk_nvmf_listener *listener);
void spdk_nvmf_subsystem_poll(struct spdk_nvmf_subsystem *subsystem);
/**
* Add a namespace to a subsytem.
*

View File

@ -589,12 +589,6 @@ spdk_nvmf_property_set(struct spdk_nvmf_request *req)
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
}
int
spdk_nvmf_ctrlr_poll(struct spdk_nvmf_ctrlr *ctrlr)
{
return spdk_nvmf_poll_group_poll(ctrlr->group);
}
static int
spdk_nvmf_ctrlr_set_features_host_identifier(struct spdk_nvmf_request *req)
{

View File

@ -199,6 +199,21 @@ spdk_nvmf_tgt_accept(struct spdk_nvmf_tgt *tgt)
}
}
static void
spdk_nvmf_poll_group_poll(void *ctx)
{
struct spdk_nvmf_poll_group *group = ctx;
int rc;
struct spdk_nvmf_transport_poll_group *tgroup;
TAILQ_FOREACH(tgroup, &group->tgroups, link) {
rc = spdk_nvmf_transport_poll_group_poll(tgroup);
if (rc < 0) {
return;
}
}
}
struct spdk_nvmf_poll_group *
spdk_nvmf_poll_group_create(struct spdk_nvmf_tgt *tgt)
{
@ -223,6 +238,8 @@ spdk_nvmf_poll_group_create(struct spdk_nvmf_tgt *tgt)
TAILQ_INSERT_TAIL(&group->tgroups, tgroup, link);
}
group->poller = spdk_poller_register(spdk_nvmf_poll_group_poll, group, 0);
return group;
}
@ -231,6 +248,8 @@ spdk_nvmf_poll_group_destroy(struct spdk_nvmf_poll_group *group)
{
struct spdk_nvmf_transport_poll_group *tgroup, *tmp;
spdk_poller_unregister(&group->poller);
TAILQ_FOREACH_SAFE(tgroup, &group->tgroups, link, tmp) {
TAILQ_REMOVE(&group->tgroups, tgroup, link);
spdk_nvmf_transport_poll_group_destroy(tgroup);
@ -273,25 +292,6 @@ spdk_nvmf_poll_group_remove(struct spdk_nvmf_poll_group *group,
return rc;
}
int
spdk_nvmf_poll_group_poll(struct spdk_nvmf_poll_group *group)
{
int rc;
int count = 0;
struct spdk_nvmf_transport_poll_group *tgroup;
TAILQ_FOREACH(tgroup, &group->tgroups, link) {
rc = spdk_nvmf_transport_poll_group_poll(tgroup);
if (rc < 0) {
return rc;
}
count += rc;
break;
}
return count;
}
SPDK_TRACE_REGISTER_FN(nvmf_trace)
{
spdk_trace_register_object(OBJECT_NVMF_IO, 'r');

View File

@ -78,7 +78,8 @@ struct spdk_nvmf_transport_poll_group {
};
struct spdk_nvmf_poll_group {
TAILQ_HEAD(, spdk_nvmf_transport_poll_group) tgroups;
struct spdk_poller *poller;
TAILQ_HEAD(, spdk_nvmf_transport_poll_group) tgroups;
};
typedef enum _spdk_nvmf_request_exec_status {
@ -214,7 +215,6 @@ void spdk_nvmf_get_discovery_log_page(struct spdk_nvmf_tgt *tgt,
uint32_t length);
struct spdk_nvmf_qpair *spdk_nvmf_ctrlr_get_qpair(struct spdk_nvmf_ctrlr *ctrlr, uint16_t qid);
int spdk_nvmf_ctrlr_poll(struct spdk_nvmf_ctrlr *ctrlr);
void spdk_nvmf_ctrlr_destruct(struct spdk_nvmf_ctrlr *ctrlr);
int spdk_nvmf_ctrlr_process_fabrics_cmd(struct spdk_nvmf_request *req);
int spdk_nvmf_ctrlr_process_admin_cmd(struct spdk_nvmf_request *req);

View File

@ -50,17 +50,6 @@ spdk_nvmf_subsystem_start(struct spdk_nvmf_subsystem *subsystem)
return spdk_nvmf_subsystem_bdev_attach(subsystem);
}
void
spdk_nvmf_subsystem_poll(struct spdk_nvmf_subsystem *subsystem)
{
struct spdk_nvmf_ctrlr *ctrlr;
TAILQ_FOREACH(ctrlr, &subsystem->ctrlrs, link) {
/* For each connection in the ctrlr, check for completions */
spdk_nvmf_ctrlr_poll(ctrlr);
}
}
static bool
spdk_nvmf_valid_nqn(const char *nqn)
{

View File

@ -81,12 +81,6 @@ spdk_nvmf_poll_group_remove(struct spdk_nvmf_poll_group *group,
return 0;
}
int
spdk_nvmf_poll_group_poll(struct spdk_nvmf_poll_group *group)
{
return 0;
}
const char *
spdk_nvmf_subsystem_get_sn(const struct spdk_nvmf_subsystem *subsystem)
{

View File

@ -122,12 +122,6 @@ spdk_nvmf_ctrlr_destruct(struct spdk_nvmf_ctrlr *ctrlr)
{
}
int
spdk_nvmf_ctrlr_poll(struct spdk_nvmf_ctrlr *ctrlr)
{
return -1;
}
int
spdk_nvmf_subsystem_bdev_attach(struct spdk_nvmf_subsystem *subsystem)
{

View File

@ -142,12 +142,6 @@ spdk_nvmf_ctrlr_destruct(struct spdk_nvmf_ctrlr *ctrlr)
{
}
int
spdk_nvmf_ctrlr_poll(struct spdk_nvmf_ctrlr *ctrlr)
{
return -1;
}
int
spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_cb,
void *remove_ctx, struct spdk_bdev_desc **desc)