mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-17 02:31:27 +00:00
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@6477 d57e44dd-8a1f-0410-8b47-8ef2f437770f
70 lines
1.5 KiB
C
70 lines
1.5 KiB
C
|
|
#include <linux/spinlock.h>
|
|
#include "iscsi_trace_flag.h"
|
|
#ifdef INSIDE_KERNEL_TREE
|
|
#include <scst/iscsit_transport.h>
|
|
#else
|
|
#include "iscsit_transport.h"
|
|
#endif
|
|
#include "iscsi.h"
|
|
|
|
static LIST_HEAD(transport_list);
|
|
static DEFINE_MUTEX(transport_mutex);
|
|
|
|
static struct iscsit_transport *__iscsit_get_transport(enum iscsit_transport_type type)
|
|
{
|
|
struct iscsit_transport *t;
|
|
|
|
list_for_each_entry(t, &transport_list, transport_list_entry) {
|
|
if (t->transport_type == type)
|
|
return t;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
struct iscsit_transport *iscsit_get_transport(enum iscsit_transport_type type)
|
|
{
|
|
struct iscsit_transport *t;
|
|
|
|
mutex_lock(&transport_mutex);
|
|
t = __iscsit_get_transport(type);
|
|
mutex_unlock(&transport_mutex);
|
|
|
|
return t;
|
|
}
|
|
|
|
int iscsit_reg_transport(struct iscsit_transport *t)
|
|
{
|
|
struct iscsit_transport *tmp;
|
|
int ret = 0;
|
|
|
|
INIT_LIST_HEAD(&t->transport_list_entry);
|
|
|
|
mutex_lock(&transport_mutex);
|
|
tmp = __iscsit_get_transport(t->transport_type);
|
|
if (tmp) {
|
|
PRINT_ERROR("Unable to register transport type %d - Already registered",
|
|
t->transport_type);
|
|
ret = -EEXIST;
|
|
} else {
|
|
list_add_tail(&t->transport_list_entry, &transport_list);
|
|
PRINT_INFO("Registered iSCSI transport: %s", t->name);
|
|
}
|
|
mutex_unlock(&transport_mutex);
|
|
|
|
return ret;
|
|
}
|
|
EXPORT_SYMBOL(iscsit_reg_transport);
|
|
|
|
void iscsit_unreg_transport(struct iscsit_transport *t)
|
|
{
|
|
mutex_lock(&transport_mutex);
|
|
list_del(&t->transport_list_entry);
|
|
mutex_unlock(&transport_mutex);
|
|
|
|
PRINT_INFO("Unregistered iSCSI transport: %s", t->name);
|
|
}
|
|
EXPORT_SYMBOL(iscsit_unreg_transport);
|
|
|