Lines Matching refs:sess
95 struct sbp_session *sess, *found = NULL; in sbp_session_find_by_guid() local
99 sess = se_sess->fabric_sess_ptr; in sbp_session_find_by_guid()
100 if (sess->guid == guid) in sbp_session_find_by_guid()
101 found = sess; in sbp_session_find_by_guid()
129 struct sbp_session *sess; in sbp_login_count_all_by_lun() local
135 sess = se_sess->fabric_sess_ptr; in sbp_login_count_all_by_lun()
137 spin_lock_bh(&sess->lock); in sbp_login_count_all_by_lun()
138 list_for_each_entry(login, &sess->login_list, link) { in sbp_login_count_all_by_lun()
145 spin_unlock_bh(&sess->lock); in sbp_login_count_all_by_lun()
156 struct sbp_session *sess; in sbp_login_find_by_id() local
161 sess = se_sess->fabric_sess_ptr; in sbp_login_find_by_id()
163 spin_lock_bh(&sess->lock); in sbp_login_find_by_id()
164 list_for_each_entry(login, &sess->login_list, link) { in sbp_login_find_by_id()
168 spin_unlock_bh(&sess->lock); in sbp_login_find_by_id()
198 struct sbp_session *sess; in sbp_session_create() local
203 sess = kmalloc(sizeof(*sess), GFP_KERNEL); in sbp_session_create()
204 if (!sess) { in sbp_session_create()
209 sess->se_sess = transport_init_session(TARGET_PROT_NORMAL); in sbp_session_create()
210 if (IS_ERR(sess->se_sess)) { in sbp_session_create()
213 ret = PTR_ERR(sess->se_sess); in sbp_session_create()
214 kfree(sess); in sbp_session_create()
224 transport_free_session(sess->se_sess); in sbp_session_create()
225 kfree(sess); in sbp_session_create()
230 sess->se_sess->se_node_acl = se_nacl; in sbp_session_create()
232 spin_lock_init(&sess->lock); in sbp_session_create()
233 INIT_LIST_HEAD(&sess->login_list); in sbp_session_create()
234 INIT_DELAYED_WORK(&sess->maint_work, session_maintenance_work); in sbp_session_create()
236 sess->guid = guid; in sbp_session_create()
238 transport_register_session(&tpg->se_tpg, se_nacl, sess->se_sess, sess); in sbp_session_create()
240 return sess; in sbp_session_create()
243 static void sbp_session_release(struct sbp_session *sess, bool cancel_work) in sbp_session_release() argument
245 spin_lock_bh(&sess->lock); in sbp_session_release()
246 if (!list_empty(&sess->login_list)) { in sbp_session_release()
247 spin_unlock_bh(&sess->lock); in sbp_session_release()
250 spin_unlock_bh(&sess->lock); in sbp_session_release()
253 cancel_delayed_work_sync(&sess->maint_work); in sbp_session_release()
255 transport_deregister_session_configfs(sess->se_sess); in sbp_session_release()
256 transport_deregister_session(sess->se_sess); in sbp_session_release()
258 if (sess->card) in sbp_session_release()
259 fw_card_put(sess->card); in sbp_session_release()
261 kfree(sess); in sbp_session_release()
269 struct sbp_session *sess = login->sess; in sbp_login_release() local
275 if (sess) { in sbp_login_release()
276 spin_lock_bh(&sess->lock); in sbp_login_release()
278 spin_unlock_bh(&sess->lock); in sbp_login_release()
280 sbp_session_release(sess, cancel_work); in sbp_login_release()
295 struct sbp_session *sess; in sbp_management_request_login() local
327 sess = sbp_session_find_by_guid(tpg, guid); in sbp_management_request_login()
328 if (sess) { in sbp_management_request_login()
329 login = sbp_login_find_by_lun(sess, unpacked_lun); in sbp_management_request_login()
393 if (!sess) { in sbp_management_request_login()
394 sess = sbp_session_create(tpg, guid); in sbp_management_request_login()
395 if (IS_ERR(sess)) { in sbp_management_request_login()
396 switch (PTR_ERR(sess)) { in sbp_management_request_login()
412 sess->node_id = req->node_addr; in sbp_management_request_login()
413 sess->card = fw_card_get(req->card); in sbp_management_request_login()
414 sess->generation = req->generation; in sbp_management_request_login()
415 sess->speed = req->speed; in sbp_management_request_login()
417 schedule_delayed_work(&sess->maint_work, in sbp_management_request_login()
422 sess->reconnect_hold = min( in sbp_management_request_login()
430 sbp_session_release(sess, true); in sbp_management_request_login()
438 login->sess = sess; in sbp_management_request_login()
449 sbp_session_release(sess, true); in sbp_management_request_login()
458 spin_lock_bh(&sess->lock); in sbp_management_request_login()
459 list_add_tail(&login->link, &sess->login_list); in sbp_management_request_login()
460 spin_unlock_bh(&sess->lock); in sbp_management_request_login()
481 response->reconnect_hold = cpu_to_be32(sess->reconnect_hold & 0xffff); in sbp_management_request_login()
485 ret = sbp_run_transaction(sess->card, TCODE_WRITE_BLOCK_REQUEST, in sbp_management_request_login()
486 sess->node_id, sess->generation, sess->speed, in sbp_management_request_login()
554 if (login->sess->guid != guid) { in sbp_management_request_reconnect()
563 spin_lock_bh(&login->sess->lock); in sbp_management_request_reconnect()
564 if (login->sess->card) in sbp_management_request_reconnect()
565 fw_card_put(login->sess->card); in sbp_management_request_reconnect()
568 login->sess->generation = req->generation; in sbp_management_request_reconnect()
569 login->sess->node_id = req->node_addr; in sbp_management_request_reconnect()
570 login->sess->card = fw_card_get(req->card); in sbp_management_request_reconnect()
571 login->sess->speed = req->speed; in sbp_management_request_reconnect()
572 spin_unlock_bh(&login->sess->lock); in sbp_management_request_reconnect()
603 if (req->node_addr != login->sess->node_id) { in sbp_management_request_logout()
619 static void session_check_for_reset(struct sbp_session *sess) in session_check_for_reset() argument
623 spin_lock_bh(&sess->lock); in session_check_for_reset()
625 if (sess->card) { in session_check_for_reset()
626 spin_lock_irq(&sess->card->lock); in session_check_for_reset()
627 card_valid = (sess->card->local_node != NULL); in session_check_for_reset()
628 spin_unlock_irq(&sess->card->lock); in session_check_for_reset()
631 fw_card_put(sess->card); in session_check_for_reset()
632 sess->card = NULL; in session_check_for_reset()
636 if (!card_valid || (sess->generation != sess->card->generation)) { in session_check_for_reset()
638 sess->guid); in session_check_for_reset()
640 sess->node_id = -1; in session_check_for_reset()
641 sess->reconnect_expires = get_jiffies_64() + in session_check_for_reset()
642 ((sess->reconnect_hold + 1) * HZ); in session_check_for_reset()
645 spin_unlock_bh(&sess->lock); in session_check_for_reset()
648 static void session_reconnect_expired(struct sbp_session *sess) in session_reconnect_expired() argument
653 pr_info("Reconnect timer expired for node: %016llx\n", sess->guid); in session_reconnect_expired()
655 spin_lock_bh(&sess->lock); in session_reconnect_expired()
656 list_for_each_entry_safe(login, temp, &sess->login_list, link) { in session_reconnect_expired()
657 login->sess = NULL; in session_reconnect_expired()
660 spin_unlock_bh(&sess->lock); in session_reconnect_expired()
667 sbp_session_release(sess, false); in session_reconnect_expired()
672 struct sbp_session *sess = container_of(work, struct sbp_session, in session_maintenance_work() local
676 spin_lock_bh(&sess->lock); in session_maintenance_work()
677 if (list_empty(&sess->login_list)) { in session_maintenance_work()
678 spin_unlock_bh(&sess->lock); in session_maintenance_work()
681 spin_unlock_bh(&sess->lock); in session_maintenance_work()
683 if (sess->node_id != -1) { in session_maintenance_work()
685 session_check_for_reset(sess); in session_maintenance_work()
687 schedule_delayed_work(&sess->maint_work, in session_maintenance_work()
689 } else if (!time_after64(get_jiffies_64(), sess->reconnect_expires)) { in session_maintenance_work()
691 schedule_delayed_work(&sess->maint_work, in session_maintenance_work()
695 session_reconnect_expired(sess); in session_maintenance_work()
833 struct sbp_session *sess = agent->login->sess; in tgt_agent_rw() local
836 spin_lock_bh(&sess->lock); in tgt_agent_rw()
837 sess_gen = sess->generation; in tgt_agent_rw()
838 sess_node = sess->node_id; in tgt_agent_rw()
839 spin_unlock_bh(&sess->lock); in tgt_agent_rw()
947 struct sbp_session *sess = agent->login->sess; in tgt_agent_fetch_work() local
971 ret = sbp_run_transaction(sess->card, TCODE_READ_BLOCK_REQUEST, in tgt_agent_fetch_work()
972 sess->node_id, sess->generation, sess->speed, in tgt_agent_fetch_work()
1104 struct sbp_session *sess = login->sess; in sbp_run_request_transaction() local
1108 spin_lock_bh(&sess->lock); in sbp_run_request_transaction()
1109 card = fw_card_get(sess->card); in sbp_run_request_transaction()
1110 node_id = sess->node_id; in sbp_run_request_transaction()
1111 generation = sess->generation; in sbp_run_request_transaction()
1112 speed = sess->speed; in sbp_run_request_transaction()
1113 spin_unlock_bh(&sess->lock); in sbp_run_request_transaction()
1209 struct sbp_session *sess = login->sess; in sbp_handle_command() local
1235 if (target_submit_cmd(&req->se_cmd, sess->se_sess, req->cmd_buf, in sbp_handle_command()
1258 struct sbp_session *sess = req->login->sess; in sbp_rw_data() local
1284 spin_lock_bh(&sess->lock); in sbp_rw_data()
1285 card = fw_card_get(sess->card); in sbp_rw_data()
1286 node_id = sess->node_id; in sbp_rw_data()
1287 generation = sess->generation; in sbp_rw_data()
1288 spin_unlock_bh(&sess->lock); in sbp_rw_data()