|
@@ -186,6 +186,20 @@ out:
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
+static int ft_sess_alloc_cb(struct se_portal_group *se_tpg,
|
|
|
+ struct se_session *se_sess, void *p)
|
|
|
+{
|
|
|
+ struct ft_sess *sess = p;
|
|
|
+ struct ft_tport *tport = sess->tport;
|
|
|
+ struct hlist_head *head = &tport->hash[ft_sess_hash(sess->port_id)];
|
|
|
+
|
|
|
+ pr_debug("port_id %x sess %p\n", sess->port_id, sess);
|
|
|
+ hlist_add_head_rcu(&sess->hash, head);
|
|
|
+ tport->sess_count++;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Allocate session and enter it in the hash for the local port.
|
|
|
* Caller holds ft_lport_lock.
|
|
@@ -194,7 +208,6 @@ static struct ft_sess *ft_sess_create(struct ft_tport *tport, u32 port_id,
|
|
|
struct fc_rport_priv *rdata)
|
|
|
{
|
|
|
struct se_portal_group *se_tpg = &tport->tpg->se_tpg;
|
|
|
- struct se_node_acl *se_acl;
|
|
|
struct ft_sess *sess;
|
|
|
struct hlist_head *head;
|
|
|
unsigned char initiatorname[TRANSPORT_IQN_LEN];
|
|
@@ -210,31 +223,18 @@ static struct ft_sess *ft_sess_create(struct ft_tport *tport, u32 port_id,
|
|
|
if (!sess)
|
|
|
return NULL;
|
|
|
|
|
|
- sess->se_sess = transport_init_session_tags(TCM_FC_DEFAULT_TAGS,
|
|
|
- sizeof(struct ft_cmd),
|
|
|
- TARGET_PROT_NORMAL);
|
|
|
- if (IS_ERR(sess->se_sess)) {
|
|
|
- kfree(sess);
|
|
|
- return NULL;
|
|
|
- }
|
|
|
+ kref_init(&sess->kref); /* ref for table entry */
|
|
|
+ sess->tport = tport;
|
|
|
+ sess->port_id = port_id;
|
|
|
|
|
|
- se_acl = core_tpg_get_initiator_node_acl(se_tpg, &initiatorname[0]);
|
|
|
- if (!se_acl) {
|
|
|
- transport_free_session(sess->se_sess);
|
|
|
+ sess->se_sess = target_alloc_session(se_tpg, TCM_FC_DEFAULT_TAGS,
|
|
|
+ sizeof(struct ft_cmd),
|
|
|
+ TARGET_PROT_NORMAL, &initiatorname[0],
|
|
|
+ sess, ft_sess_alloc_cb);
|
|
|
+ if (IS_ERR(sess->se_sess)) {
|
|
|
kfree(sess);
|
|
|
return NULL;
|
|
|
}
|
|
|
- sess->se_sess->se_node_acl = se_acl;
|
|
|
- sess->tport = tport;
|
|
|
- sess->port_id = port_id;
|
|
|
- kref_init(&sess->kref); /* ref for table entry */
|
|
|
- hlist_add_head_rcu(&sess->hash, head);
|
|
|
- tport->sess_count++;
|
|
|
-
|
|
|
- pr_debug("port_id %x sess %p\n", port_id, sess);
|
|
|
-
|
|
|
- transport_register_session(&tport->tpg->se_tpg, se_acl,
|
|
|
- sess->se_sess, sess);
|
|
|
return sess;
|
|
|
}
|
|
|
|