Linux Audio

Check our new training course

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