/* * Delete all sessions from tport. * Caller holds ft_lport_lock. */ static void ft_sess_delete_all(struct ft_tport *tport) { struct hlist_head *head; struct ft_sess *sess; for (head = tport->hash; head < &tport->hash[FT_SESS_HASH_SIZE]; head++) { hlist_for_each_entry_rcu(sess, head, hash) { ft_sess_unhash(sess); ft_close_sess(sess); /* release from table */ } }
/* * Delete all sessions from tport. * Caller holds ft_lport_lock. */ static void ft_sess_delete_all(struct ft_tport *tport) { struct hlist_head *head; struct ft_sess *sess; for (head = tport->hash; head < &tport->hash[FT_SESS_HASH_SIZE]; head++) { hlist_for_each_entry_rcu(sess, head, hash) { ft_sess_unhash(sess); transport_deregister_session_configfs(sess->se_sess); ft_sess_put(sess); /* release from table */ } }
/* * Delete session from hash. * Caller holds ft_lport_lock. */ static struct ft_sess *ft_sess_delete(struct ft_tport *tport, u32 port_id) { struct hlist_head *head; struct ft_sess *sess; head = &tport->hash[ft_sess_hash(port_id)]; hlist_for_each_entry_rcu(sess, head, hash) { if (sess->port_id == port_id) { ft_sess_unhash(sess); return sess; } } return NULL; }