|
@@ -404,6 +404,30 @@ void target_put_session(struct se_session *se_sess)
|
|
|
}
|
|
|
EXPORT_SYMBOL(target_put_session);
|
|
|
|
|
|
+ssize_t target_show_dynamic_sessions(struct se_portal_group *se_tpg, char *page)
|
|
|
+{
|
|
|
+ struct se_session *se_sess;
|
|
|
+ ssize_t len = 0;
|
|
|
+
|
|
|
+ spin_lock_bh(&se_tpg->session_lock);
|
|
|
+ list_for_each_entry(se_sess, &se_tpg->tpg_sess_list, sess_list) {
|
|
|
+ if (!se_sess->se_node_acl)
|
|
|
+ continue;
|
|
|
+ if (!se_sess->se_node_acl->dynamic_node_acl)
|
|
|
+ continue;
|
|
|
+ if (strlen(se_sess->se_node_acl->initiatorname) + 1 + len > PAGE_SIZE)
|
|
|
+ break;
|
|
|
+
|
|
|
+ len += snprintf(page + len, PAGE_SIZE - len, "%s\n",
|
|
|
+ se_sess->se_node_acl->initiatorname);
|
|
|
+ len += 1; /* Include NULL terminator */
|
|
|
+ }
|
|
|
+ spin_unlock_bh(&se_tpg->session_lock);
|
|
|
+
|
|
|
+ return len;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(target_show_dynamic_sessions);
|
|
|
+
|
|
|
static void target_complete_nacl(struct kref *kref)
|
|
|
{
|
|
|
struct se_node_acl *nacl = container_of(kref,
|