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
)) {
20 mutex_unlock(&transport_mutex
);
24 mutex_unlock(&transport_mutex
);
29 void iscsit_put_transport(struct iscsit_transport
*t
)
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
);
46 EXPORT_SYMBOL(iscsit_register_transport
);
48 void iscsit_unregister_transport(struct iscsit_transport
*t
)
50 mutex_lock(&transport_mutex
);
52 mutex_unlock(&transport_mutex
);
54 pr_debug("Unregistered iSCSI transport: %s\n", t
->name
);
56 EXPORT_SYMBOL(iscsit_unregister_transport
);