]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/target/iscsi/iscsi_target_transport.c
Merge tag 'media/v4.10-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[karo-tx-linux.git] / drivers / target / iscsi / iscsi_target_transport.c
1 #include <linux/spinlock.h>
2 #include <linux/list.h>
3 #include <linux/module.h>
4 #include <target/iscsi/iscsi_transport.h>
5
6 static LIST_HEAD(g_transport_list);
7 static DEFINE_MUTEX(transport_mutex);
8
9 struct iscsit_transport *iscsit_get_transport(int type)
10 {
11         struct iscsit_transport *t;
12
13         mutex_lock(&transport_mutex);
14         list_for_each_entry(t, &g_transport_list, t_node) {
15                 if (t->transport_type == type) {
16                         if (t->owner && !try_module_get(t->owner)) {
17                                 t = NULL;
18                         }
19                         mutex_unlock(&transport_mutex);
20                         return t;
21                 }
22         }
23         mutex_unlock(&transport_mutex);
24
25         return NULL;
26 }
27
28 void iscsit_put_transport(struct iscsit_transport *t)
29 {
30         module_put(t->owner);
31 }
32
33 int iscsit_register_transport(struct iscsit_transport *t)
34 {
35         INIT_LIST_HEAD(&t->t_node);
36
37         mutex_lock(&transport_mutex);
38         list_add_tail(&t->t_node, &g_transport_list);
39         mutex_unlock(&transport_mutex);
40
41         pr_debug("Registered iSCSI transport: %s\n", t->name);
42
43         return 0;
44 }
45 EXPORT_SYMBOL(iscsit_register_transport);
46
47 void iscsit_unregister_transport(struct iscsit_transport *t)
48 {
49         mutex_lock(&transport_mutex);
50         list_del(&t->t_node);
51         mutex_unlock(&transport_mutex);
52
53         pr_debug("Unregistered iSCSI transport: %s\n", t->name);
54 }
55 EXPORT_SYMBOL(iscsit_unregister_transport);