Lines Matching defs:sess

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