Lines Matching refs:sess

81 	struct sbp_session *sess, *found = NULL;  in sbp_session_find_by_guid()  local
85 sess = se_sess->fabric_sess_ptr; in sbp_session_find_by_guid()
86 if (sess->guid == guid) in sbp_session_find_by_guid()
87 found = sess; in sbp_session_find_by_guid()
115 struct sbp_session *sess; in sbp_login_count_all_by_lun() local
121 sess = se_sess->fabric_sess_ptr; in sbp_login_count_all_by_lun()
123 spin_lock_bh(&sess->lock); in sbp_login_count_all_by_lun()
124 list_for_each_entry(login, &sess->login_list, link) { in sbp_login_count_all_by_lun()
131 spin_unlock_bh(&sess->lock); in sbp_login_count_all_by_lun()
142 struct sbp_session *sess; in sbp_login_find_by_id() local
147 sess = se_sess->fabric_sess_ptr; in sbp_login_find_by_id()
149 spin_lock_bh(&sess->lock); in sbp_login_find_by_id()
150 list_for_each_entry(login, &sess->login_list, link) { in sbp_login_find_by_id()
154 spin_unlock_bh(&sess->lock); in sbp_login_find_by_id()
184 struct sbp_session *sess; in sbp_session_create() local
190 sess = kmalloc(sizeof(*sess), GFP_KERNEL); in sbp_session_create()
191 if (!sess) in sbp_session_create()
194 spin_lock_init(&sess->lock); in sbp_session_create()
195 INIT_LIST_HEAD(&sess->login_list); in sbp_session_create()
196 INIT_DELAYED_WORK(&sess->maint_work, session_maintenance_work); in sbp_session_create()
197 sess->guid = guid; in sbp_session_create()
199 sess->se_sess = target_setup_session(&tpg->se_tpg, 128, in sbp_session_create()
202 sess, NULL); in sbp_session_create()
203 if (IS_ERR(sess->se_sess)) { in sbp_session_create()
205 ret = PTR_ERR(sess->se_sess); in sbp_session_create()
206 kfree(sess); in sbp_session_create()
210 return sess; in sbp_session_create()
213 static void sbp_session_release(struct sbp_session *sess, bool cancel_work) in sbp_session_release() argument
215 spin_lock_bh(&sess->lock); in sbp_session_release()
216 if (!list_empty(&sess->login_list)) { in sbp_session_release()
217 spin_unlock_bh(&sess->lock); in sbp_session_release()
220 spin_unlock_bh(&sess->lock); in sbp_session_release()
223 cancel_delayed_work_sync(&sess->maint_work); in sbp_session_release()
225 target_remove_session(sess->se_sess); in sbp_session_release()
227 if (sess->card) in sbp_session_release()
228 fw_card_put(sess->card); in sbp_session_release()
230 kfree(sess); in sbp_session_release()
238 struct sbp_session *sess = login->sess; in sbp_login_release() local
244 if (sess) { in sbp_login_release()
245 spin_lock_bh(&sess->lock); in sbp_login_release()
247 spin_unlock_bh(&sess->lock); in sbp_login_release()
249 sbp_session_release(sess, cancel_work); in sbp_login_release()
264 struct sbp_session *sess; in sbp_management_request_login() local
296 sess = sbp_session_find_by_guid(tpg, guid); in sbp_management_request_login()
297 if (sess) { in sbp_management_request_login()
298 login = sbp_login_find_by_lun(sess, unpacked_lun); in sbp_management_request_login()
362 if (!sess) { in sbp_management_request_login()
363 sess = sbp_session_create(tpg, guid); in sbp_management_request_login()
364 if (IS_ERR(sess)) { in sbp_management_request_login()
365 switch (PTR_ERR(sess)) { in sbp_management_request_login()
381 sess->node_id = req->node_addr; in sbp_management_request_login()
382 sess->card = fw_card_get(req->card); in sbp_management_request_login()
383 sess->generation = req->generation; in sbp_management_request_login()
384 sess->speed = req->speed; in sbp_management_request_login()
386 schedule_delayed_work(&sess->maint_work, in sbp_management_request_login()
391 sess->reconnect_hold = min( in sbp_management_request_login()
399 sbp_session_release(sess, true); in sbp_management_request_login()
407 login->sess = sess; in sbp_management_request_login()
418 sbp_session_release(sess, true); in sbp_management_request_login()
427 spin_lock_bh(&sess->lock); in sbp_management_request_login()
428 list_add_tail(&login->link, &sess->login_list); in sbp_management_request_login()
429 spin_unlock_bh(&sess->lock); in sbp_management_request_login()
450 response->reconnect_hold = cpu_to_be32(sess->reconnect_hold & 0xffff); in sbp_management_request_login()
454 ret = sbp_run_transaction(sess->card, TCODE_WRITE_BLOCK_REQUEST, in sbp_management_request_login()
455 sess->node_id, sess->generation, sess->speed, in sbp_management_request_login()
523 if (login->sess->guid != guid) { in sbp_management_request_reconnect()
532 spin_lock_bh(&login->sess->lock); in sbp_management_request_reconnect()
533 if (login->sess->card) in sbp_management_request_reconnect()
534 fw_card_put(login->sess->card); in sbp_management_request_reconnect()
537 login->sess->generation = req->generation; in sbp_management_request_reconnect()
538 login->sess->node_id = req->node_addr; in sbp_management_request_reconnect()
539 login->sess->card = fw_card_get(req->card); in sbp_management_request_reconnect()
540 login->sess->speed = req->speed; in sbp_management_request_reconnect()
541 spin_unlock_bh(&login->sess->lock); in sbp_management_request_reconnect()
572 if (req->node_addr != login->sess->node_id) { in sbp_management_request_logout()
588 static void session_check_for_reset(struct sbp_session *sess) in session_check_for_reset() argument
592 spin_lock_bh(&sess->lock); in session_check_for_reset()
594 if (sess->card) { in session_check_for_reset()
595 spin_lock_irq(&sess->card->lock); in session_check_for_reset()
596 card_valid = (sess->card->local_node != NULL); in session_check_for_reset()
597 spin_unlock_irq(&sess->card->lock); in session_check_for_reset()
600 fw_card_put(sess->card); in session_check_for_reset()
601 sess->card = NULL; in session_check_for_reset()
605 if (!card_valid || (sess->generation != sess->card->generation)) { in session_check_for_reset()
607 sess->guid); in session_check_for_reset()
609 sess->node_id = -1; in session_check_for_reset()
610 sess->reconnect_expires = get_jiffies_64() + in session_check_for_reset()
611 ((sess->reconnect_hold + 1) * HZ); in session_check_for_reset()
614 spin_unlock_bh(&sess->lock); in session_check_for_reset()
617 static void session_reconnect_expired(struct sbp_session *sess) in session_reconnect_expired() argument
622 pr_info("Reconnect timer expired for node: %016llx\n", sess->guid); in session_reconnect_expired()
624 spin_lock_bh(&sess->lock); in session_reconnect_expired()
625 list_for_each_entry_safe(login, temp, &sess->login_list, link) { in session_reconnect_expired()
626 login->sess = NULL; in session_reconnect_expired()
629 spin_unlock_bh(&sess->lock); in session_reconnect_expired()
636 sbp_session_release(sess, false); in session_reconnect_expired()
641 struct sbp_session *sess = container_of(work, struct sbp_session, in session_maintenance_work() local
645 spin_lock_bh(&sess->lock); in session_maintenance_work()
646 if (list_empty(&sess->login_list)) { in session_maintenance_work()
647 spin_unlock_bh(&sess->lock); in session_maintenance_work()
650 spin_unlock_bh(&sess->lock); in session_maintenance_work()
652 if (sess->node_id != -1) { in session_maintenance_work()
654 session_check_for_reset(sess); in session_maintenance_work()
656 schedule_delayed_work(&sess->maint_work, in session_maintenance_work()
658 } else if (!time_after64(get_jiffies_64(), sess->reconnect_expires)) { in session_maintenance_work()
660 schedule_delayed_work(&sess->maint_work, in session_maintenance_work()
664 session_reconnect_expired(sess); in session_maintenance_work()
802 struct sbp_session *sess = agent->login->sess; in tgt_agent_rw() local
805 spin_lock_bh(&sess->lock); in tgt_agent_rw()
806 sess_gen = sess->generation; in tgt_agent_rw()
807 sess_node = sess->node_id; in tgt_agent_rw()
808 spin_unlock_bh(&sess->lock); in tgt_agent_rw()
910 static struct sbp_target_request *sbp_mgt_get_req(struct sbp_session *sess, in sbp_mgt_get_req() argument
913 struct se_session *se_sess = sess->se_sess; in sbp_mgt_get_req()
934 struct sbp_session *sess = agent->login->sess; in tgt_agent_fetch_work() local
941 req = sbp_mgt_get_req(sess, sess->card, next_orb); in tgt_agent_fetch_work()
958 ret = sbp_run_transaction(sess->card, TCODE_READ_BLOCK_REQUEST, in tgt_agent_fetch_work()
959 sess->node_id, sess->generation, sess->speed, in tgt_agent_fetch_work()
1090 struct sbp_session *sess = login->sess; in sbp_run_request_transaction() local
1094 spin_lock_bh(&sess->lock); in sbp_run_request_transaction()
1095 card = fw_card_get(sess->card); in sbp_run_request_transaction()
1096 node_id = sess->node_id; in sbp_run_request_transaction()
1097 generation = sess->generation; in sbp_run_request_transaction()
1098 speed = sess->speed; in sbp_run_request_transaction()
1099 spin_unlock_bh(&sess->lock); in sbp_run_request_transaction()
1195 struct sbp_session *sess = login->sess; in sbp_handle_command() local
1221 target_submit_cmd(&req->se_cmd, sess->se_sess, req->cmd_buf, in sbp_handle_command()
1241 struct sbp_session *sess = req->login->sess; in sbp_rw_data() local
1266 spin_lock_bh(&sess->lock); in sbp_rw_data()
1267 card = fw_card_get(sess->card); in sbp_rw_data()
1268 node_id = sess->node_id; in sbp_rw_data()
1269 generation = sess->generation; in sbp_rw_data()
1270 spin_unlock_bh(&sess->lock); in sbp_rw_data()