Commit 13fe888c authored by Krzysztof Goreczny's avatar Krzysztof Goreczny Committed by Tomasz Zawadzki
Browse files

nvmf: add helper function to get a transport poll group



This allows to reuse the common code that looks for the
spdk_nvmf_transport_poll_group within a spdk_nvmf_poll_group.

Change-Id: I908197b3cf356cd0bc3b787a0daf64e4b9242f34
Signed-off-by: default avatarKrzysztof Goreczny <krzysztof.goreczny@dell.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/24091


Reviewed-by: default avatarJacek Kalwas <jacek.kalwas@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBoris Glimcher <Boris.Glimcher@emc.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 02f272e4
Loading
Loading
Loading
Loading
+16 −20
Original line number Diff line number Diff line
@@ -228,14 +228,12 @@ static int
nvmf_poll_group_add_transport(struct spdk_nvmf_poll_group *group,
			      struct spdk_nvmf_transport *transport)
{
	struct spdk_nvmf_transport_poll_group *tgroup;
	struct spdk_nvmf_transport_poll_group *tgroup = nvmf_get_transport_poll_group(group, transport);

	TAILQ_FOREACH(tgroup, &group->tgroups, link) {
		if (tgroup->transport == transport) {
	if (tgroup != NULL) {
		/* Transport already in the poll group */
		return 0;
	}
	}

	tgroup = nvmf_transport_poll_group_create(transport, group);
	if (!tgroup) {
@@ -1217,7 +1215,7 @@ int
spdk_nvmf_poll_group_add(struct spdk_nvmf_poll_group *group,
			 struct spdk_nvmf_qpair *qpair)
{
	int rc = -1;
	int rc;
	struct spdk_nvmf_transport_poll_group *tgroup;

	TAILQ_INIT(&qpair->outstanding);
@@ -1225,13 +1223,13 @@ spdk_nvmf_poll_group_add(struct spdk_nvmf_poll_group *group,
	qpair->ctrlr = NULL;
	qpair->disconnect_started = false;

	TAILQ_FOREACH(tgroup, &group->tgroups, link) {
		if (tgroup->transport == qpair->transport) {
			rc = nvmf_transport_poll_group_add(tgroup, qpair);
			break;
		}
	tgroup = nvmf_get_transport_poll_group(group, qpair->transport);
	if (tgroup == NULL) {
		return -1;
	}

	rc = nvmf_transport_poll_group_add(tgroup, qpair);

	/* We add the qpair to the group only it is successfully added into the tgroup */
	if (rc == 0) {
		SPDK_DTRACE_PROBE2_TICKS(nvmf_poll_group_add_qpair, qpair, spdk_thread_get_id(group->thread));
@@ -1308,15 +1306,13 @@ spdk_nvmf_poll_group_remove(struct spdk_nvmf_qpair *qpair)
	nvmf_qpair_set_state(qpair, SPDK_NVMF_QPAIR_ERROR);

	/* Find the tgroup and remove the qpair from the tgroup */
	TAILQ_FOREACH(tgroup, &qpair->group->tgroups, link) {
		if (tgroup->transport == qpair->transport) {
	tgroup = nvmf_get_transport_poll_group(qpair->group, qpair->transport);
	if (tgroup != NULL) {
		rc = nvmf_transport_poll_group_remove(tgroup, qpair);
		if (rc && (rc != ENOTSUP)) {
			SPDK_ERRLOG("Cannot remove qpair=%p from transport group=%p\n",
				    qpair, tgroup);
		}
			break;
		}
	}

	TAILQ_REMOVE(&qpair->group->qpairs, qpair, link);
+14 −0
Original line number Diff line number Diff line
@@ -581,4 +581,18 @@ int nvmf_publish_mdns_prr(struct spdk_nvmf_tgt *tgt);
 */
void nvmf_tgt_stop_mdns_prr(struct spdk_nvmf_tgt *tgt);

static inline struct spdk_nvmf_transport_poll_group *
nvmf_get_transport_poll_group(struct spdk_nvmf_poll_group *group,
			      struct spdk_nvmf_transport *transport)
{
	struct spdk_nvmf_transport_poll_group *tgroup;

	TAILQ_FOREACH(tgroup, &group->tgroups, link) {
		if (tgroup->transport == transport) {
			return tgroup;
		}
	}

	return NULL;
}
#endif /* __NVMF_INTERNAL_H__ */