Linux 4.16.11
[linux/fpc-iii.git] / drivers / target / iscsi / iscsi_target_transport.c
blob036940518bfe4a6da1c0b835807f9bb8537f8e60
1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/spinlock.h>
3 #include <linux/list.h>
4 #include <linux/module.h>
5 #include <target/iscsi/iscsi_transport.h>
7 static LIST_HEAD(g_transport_list);
8 static DEFINE_MUTEX(transport_mutex);
10 struct iscsit_transport *iscsit_get_transport(int type)
12 struct iscsit_transport *t;
14 mutex_lock(&transport_mutex);
15 list_for_each_entry(t, &g_transport_list, t_node) {
16 if (t->transport_type == type) {
17 if (t->owner && !try_module_get(t->owner)) {
18 t = NULL;
20 mutex_unlock(&transport_mutex);
21 return t;
24 mutex_unlock(&transport_mutex);
26 return NULL;
29 void iscsit_put_transport(struct iscsit_transport *t)
31 module_put(t->owner);
34 int iscsit_register_transport(struct iscsit_transport *t)
36 INIT_LIST_HEAD(&t->t_node);
38 mutex_lock(&transport_mutex);
39 list_add_tail(&t->t_node, &g_transport_list);
40 mutex_unlock(&transport_mutex);
42 pr_debug("Registered iSCSI transport: %s\n", t->name);
44 return 0;
46 EXPORT_SYMBOL(iscsit_register_transport);
48 void iscsit_unregister_transport(struct iscsit_transport *t)
50 mutex_lock(&transport_mutex);
51 list_del(&t->t_node);
52 mutex_unlock(&transport_mutex);
54 pr_debug("Unregistered iSCSI transport: %s\n", t->name);
56 EXPORT_SYMBOL(iscsit_unregister_transport);