Lines Matching refs:sess
98 struct sbp_session *sess, *found = NULL; in sbp_session_find_by_guid() local
102 sess = se_sess->fabric_sess_ptr; in sbp_session_find_by_guid()
103 if (sess->guid == guid) in sbp_session_find_by_guid()
104 found = sess; in sbp_session_find_by_guid()
132 struct sbp_session *sess; in sbp_login_count_all_by_lun() local
138 sess = se_sess->fabric_sess_ptr; in sbp_login_count_all_by_lun()
140 spin_lock_bh(&sess->lock); in sbp_login_count_all_by_lun()
141 list_for_each_entry(login, &sess->login_list, link) { in sbp_login_count_all_by_lun()
148 spin_unlock_bh(&sess->lock); in sbp_login_count_all_by_lun()
159 struct sbp_session *sess; in sbp_login_find_by_id() local
164 sess = se_sess->fabric_sess_ptr; in sbp_login_find_by_id()
166 spin_lock_bh(&sess->lock); in sbp_login_find_by_id()
167 list_for_each_entry(login, &sess->login_list, link) { in sbp_login_find_by_id()
171 spin_unlock_bh(&sess->lock); in sbp_login_find_by_id()
201 struct sbp_session *sess; in sbp_session_create() local
206 sess = kmalloc(sizeof(*sess), GFP_KERNEL); in sbp_session_create()
207 if (!sess) { in sbp_session_create()
212 sess->se_sess = transport_init_session(TARGET_PROT_NORMAL); in sbp_session_create()
213 if (IS_ERR(sess->se_sess)) { in sbp_session_create()
216 ret = PTR_ERR(sess->se_sess); in sbp_session_create()
217 kfree(sess); in sbp_session_create()
227 transport_free_session(sess->se_sess); in sbp_session_create()
228 kfree(sess); in sbp_session_create()
233 sess->se_sess->se_node_acl = se_nacl; in sbp_session_create()
235 spin_lock_init(&sess->lock); in sbp_session_create()
236 INIT_LIST_HEAD(&sess->login_list); in sbp_session_create()
237 INIT_DELAYED_WORK(&sess->maint_work, session_maintenance_work); in sbp_session_create()
239 sess->guid = guid; in sbp_session_create()
241 transport_register_session(&tpg->se_tpg, se_nacl, sess->se_sess, sess); in sbp_session_create()
243 return sess; in sbp_session_create()
246 static void sbp_session_release(struct sbp_session *sess, bool cancel_work) in sbp_session_release() argument
248 spin_lock_bh(&sess->lock); in sbp_session_release()
249 if (!list_empty(&sess->login_list)) { in sbp_session_release()
250 spin_unlock_bh(&sess->lock); in sbp_session_release()
253 spin_unlock_bh(&sess->lock); in sbp_session_release()
256 cancel_delayed_work_sync(&sess->maint_work); in sbp_session_release()
258 transport_deregister_session_configfs(sess->se_sess); in sbp_session_release()
259 transport_deregister_session(sess->se_sess); in sbp_session_release()
261 if (sess->card) in sbp_session_release()
262 fw_card_put(sess->card); in sbp_session_release()
264 kfree(sess); in sbp_session_release()
272 struct sbp_session *sess = login->sess; in sbp_login_release() local
278 if (sess) { in sbp_login_release()
279 spin_lock_bh(&sess->lock); in sbp_login_release()
281 spin_unlock_bh(&sess->lock); in sbp_login_release()
283 sbp_session_release(sess, cancel_work); in sbp_login_release()
301 struct sbp_session *sess; in sbp_management_request_login() local
331 sess = sbp_session_find_by_guid(tpg, guid); in sbp_management_request_login()
332 if (sess) { in sbp_management_request_login()
333 login = sbp_login_find_by_lun(sess, se_lun); in sbp_management_request_login()
397 if (!sess) { in sbp_management_request_login()
398 sess = sbp_session_create(tpg, guid); in sbp_management_request_login()
399 if (IS_ERR(sess)) { in sbp_management_request_login()
400 switch (PTR_ERR(sess)) { in sbp_management_request_login()
416 sess->node_id = req->node_addr; in sbp_management_request_login()
417 sess->card = fw_card_get(req->card); in sbp_management_request_login()
418 sess->generation = req->generation; in sbp_management_request_login()
419 sess->speed = req->speed; in sbp_management_request_login()
421 schedule_delayed_work(&sess->maint_work, in sbp_management_request_login()
426 sess->reconnect_hold = min( in sbp_management_request_login()
434 sbp_session_release(sess, true); in sbp_management_request_login()
442 login->sess = sess; in sbp_management_request_login()
453 sbp_session_release(sess, true); in sbp_management_request_login()
462 spin_lock_bh(&sess->lock); in sbp_management_request_login()
463 list_add_tail(&login->link, &sess->login_list); in sbp_management_request_login()
464 spin_unlock_bh(&sess->lock); in sbp_management_request_login()
485 response->reconnect_hold = cpu_to_be32(sess->reconnect_hold & 0xffff); in sbp_management_request_login()
489 ret = sbp_run_transaction(sess->card, TCODE_WRITE_BLOCK_REQUEST, in sbp_management_request_login()
490 sess->node_id, sess->generation, sess->speed, in sbp_management_request_login()
558 if (login->sess->guid != guid) { in sbp_management_request_reconnect()
567 spin_lock_bh(&login->sess->lock); in sbp_management_request_reconnect()
568 if (login->sess->card) in sbp_management_request_reconnect()
569 fw_card_put(login->sess->card); in sbp_management_request_reconnect()
572 login->sess->generation = req->generation; in sbp_management_request_reconnect()
573 login->sess->node_id = req->node_addr; in sbp_management_request_reconnect()
574 login->sess->card = fw_card_get(req->card); in sbp_management_request_reconnect()
575 login->sess->speed = req->speed; in sbp_management_request_reconnect()
576 spin_unlock_bh(&login->sess->lock); in sbp_management_request_reconnect()
607 if (req->node_addr != login->sess->node_id) { in sbp_management_request_logout()
623 static void session_check_for_reset(struct sbp_session *sess) in session_check_for_reset() argument
627 spin_lock_bh(&sess->lock); in session_check_for_reset()
629 if (sess->card) { in session_check_for_reset()
630 spin_lock_irq(&sess->card->lock); in session_check_for_reset()
631 card_valid = (sess->card->local_node != NULL); in session_check_for_reset()
632 spin_unlock_irq(&sess->card->lock); in session_check_for_reset()
635 fw_card_put(sess->card); in session_check_for_reset()
636 sess->card = NULL; in session_check_for_reset()
640 if (!card_valid || (sess->generation != sess->card->generation)) { in session_check_for_reset()
642 sess->guid); in session_check_for_reset()
644 sess->node_id = -1; in session_check_for_reset()
645 sess->reconnect_expires = get_jiffies_64() + in session_check_for_reset()
646 ((sess->reconnect_hold + 1) * HZ); in session_check_for_reset()
649 spin_unlock_bh(&sess->lock); in session_check_for_reset()
652 static void session_reconnect_expired(struct sbp_session *sess) in session_reconnect_expired() argument
657 pr_info("Reconnect timer expired for node: %016llx\n", sess->guid); in session_reconnect_expired()
659 spin_lock_bh(&sess->lock); in session_reconnect_expired()
660 list_for_each_entry_safe(login, temp, &sess->login_list, link) { in session_reconnect_expired()
661 login->sess = NULL; in session_reconnect_expired()
664 spin_unlock_bh(&sess->lock); in session_reconnect_expired()
671 sbp_session_release(sess, false); in session_reconnect_expired()
676 struct sbp_session *sess = container_of(work, struct sbp_session, in session_maintenance_work() local
680 spin_lock_bh(&sess->lock); in session_maintenance_work()
681 if (list_empty(&sess->login_list)) { in session_maintenance_work()
682 spin_unlock_bh(&sess->lock); in session_maintenance_work()
685 spin_unlock_bh(&sess->lock); in session_maintenance_work()
687 if (sess->node_id != -1) { in session_maintenance_work()
689 session_check_for_reset(sess); in session_maintenance_work()
691 schedule_delayed_work(&sess->maint_work, in session_maintenance_work()
693 } else if (!time_after64(get_jiffies_64(), sess->reconnect_expires)) { in session_maintenance_work()
695 schedule_delayed_work(&sess->maint_work, in session_maintenance_work()
699 session_reconnect_expired(sess); in session_maintenance_work()
837 struct sbp_session *sess = agent->login->sess; in tgt_agent_rw() local
840 spin_lock_bh(&sess->lock); in tgt_agent_rw()
841 sess_gen = sess->generation; in tgt_agent_rw()
842 sess_node = sess->node_id; in tgt_agent_rw()
843 spin_unlock_bh(&sess->lock); in tgt_agent_rw()
951 struct sbp_session *sess = agent->login->sess; in tgt_agent_fetch_work() local
975 ret = sbp_run_transaction(sess->card, TCODE_READ_BLOCK_REQUEST, in tgt_agent_fetch_work()
976 sess->node_id, sess->generation, sess->speed, in tgt_agent_fetch_work()
1108 struct sbp_session *sess = login->sess; in sbp_run_request_transaction() local
1112 spin_lock_bh(&sess->lock); in sbp_run_request_transaction()
1113 card = fw_card_get(sess->card); in sbp_run_request_transaction()
1114 node_id = sess->node_id; in sbp_run_request_transaction()
1115 generation = sess->generation; in sbp_run_request_transaction()
1116 speed = sess->speed; in sbp_run_request_transaction()
1117 spin_unlock_bh(&sess->lock); in sbp_run_request_transaction()
1213 struct sbp_session *sess = login->sess; in sbp_handle_command() local
1237 if (target_submit_cmd(&req->se_cmd, sess->se_sess, req->cmd_buf, in sbp_handle_command()
1260 struct sbp_session *sess = req->login->sess; in sbp_rw_data() local
1286 spin_lock_bh(&sess->lock); in sbp_rw_data()
1287 card = fw_card_get(sess->card); in sbp_rw_data()
1288 node_id = sess->node_id; in sbp_rw_data()
1289 generation = sess->generation; in sbp_rw_data()
1290 spin_unlock_bh(&sess->lock); in sbp_rw_data()