// SPDX-License-Identifier: GPL-2.0
#include <linux/spinlock.h>
#include <linux/list.h>
#include <linux/module.h>
#include <target/iscsi/iscsi_transport.h>

static LIST_HEAD(g_transport_list);
static DEFINE_MUTEX(transport_mutex);

struct iscsit_transport *iscsit_get_transport(int type)
{
	struct iscsit_transport *t;

	mutex_lock(&transport_mutex);
	list_for_each_entry(t, &g_transport_list, t_node) {
		if (t->transport_type == type) {
			if (t->owner && !try_module_get(t->owner)) {
				t = NULL;
			}
			mutex_unlock(&transport_mutex);
			return t;
		}
	}
	mutex_unlock(&transport_mutex);

	return NULL;
}

void iscsit_put_transport(struct iscsit_transport *t)
{
	module_put(t->owner);
}

int iscsit_register_transport(struct iscsit_transport *t)
{
	INIT_LIST_HEAD(&t->t_node);

	mutex_lock(&transport_mutex);
	list_add_tail(&t->t_node, &g_transport_list);
	mutex_unlock(&transport_mutex);

	pr_debug("Registered iSCSI transport: %s\n", t->name);

	return 0;
}
EXPORT_SYMBOL(iscsit_register_transport);

void iscsit_unregister_transport(struct iscsit_transport *t)
{
	mutex_lock(&transport_mutex);
	list_del(&t->t_node);
	mutex_unlock(&transport_mutex);

	pr_debug("Unregistered iSCSI transport: %s\n", t->name);
}
EXPORT_SYMBOL(iscsit_unregister_transport);
