Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 #include <linux/spinlock.h>
0003 #include <linux/list.h>
0004 #include <linux/module.h>
0005 #include <target/iscsi/iscsi_transport.h>
0006 
0007 static LIST_HEAD(g_transport_list);
0008 static DEFINE_MUTEX(transport_mutex);
0009 
0010 struct iscsit_transport *iscsit_get_transport(int type)
0011 {
0012     struct iscsit_transport *t;
0013 
0014     mutex_lock(&transport_mutex);
0015     list_for_each_entry(t, &g_transport_list, t_node) {
0016         if (t->transport_type == type) {
0017             if (t->owner && !try_module_get(t->owner)) {
0018                 t = NULL;
0019             }
0020             mutex_unlock(&transport_mutex);
0021             return t;
0022         }
0023     }
0024     mutex_unlock(&transport_mutex);
0025 
0026     return NULL;
0027 }
0028 
0029 void iscsit_put_transport(struct iscsit_transport *t)
0030 {
0031     module_put(t->owner);
0032 }
0033 
0034 void iscsit_register_transport(struct iscsit_transport *t)
0035 {
0036     INIT_LIST_HEAD(&t->t_node);
0037 
0038     mutex_lock(&transport_mutex);
0039     list_add_tail(&t->t_node, &g_transport_list);
0040     mutex_unlock(&transport_mutex);
0041 
0042     pr_debug("Registered iSCSI transport: %s\n", t->name);
0043 }
0044 EXPORT_SYMBOL(iscsit_register_transport);
0045 
0046 void iscsit_unregister_transport(struct iscsit_transport *t)
0047 {
0048     mutex_lock(&transport_mutex);
0049     list_del(&t->t_node);
0050     mutex_unlock(&transport_mutex);
0051 
0052     pr_debug("Unregistered iSCSI transport: %s\n", t->name);
0053 }
0054 EXPORT_SYMBOL(iscsit_unregister_transport);