Lines Matching refs:sess
105 static int qlt_issue_task_mgmt(struct qla_tgt_sess *sess, uint32_t lun,
145 struct qla_tgt_sess *sess; in qlt_find_sess_by_port_name() local
147 list_for_each_entry(sess, &tgt->sess_list, sess_list_entry) { in qlt_find_sess_by_port_name()
148 if (!memcmp(sess->port_name, port_name, WWN_SIZE)) in qlt_find_sess_by_port_name()
149 return sess; in qlt_find_sess_by_port_name()
394 struct qla_tgt_sess *sess = container_of(work, struct qla_tgt_sess, in qlt_free_session_done() local
396 struct qla_tgt *tgt = sess->tgt; in qlt_free_session_done()
397 struct scsi_qla_host *vha = sess->vha; in qlt_free_session_done()
406 __func__, sess->se_sess, sess, sess->port_name, sess->loop_id, in qlt_free_session_done()
407 sess->s_id.b.domain, sess->s_id.b.area, sess->s_id.b.al_pa, in qlt_free_session_done()
408 sess->logout_on_delete, sess->keep_nport_handle, in qlt_free_session_done()
409 sess->plogi_ack_needed); in qlt_free_session_done()
413 if (sess->logout_on_delete) { in qlt_free_session_done()
417 fcport.loop_id = sess->loop_id; in qlt_free_session_done()
418 fcport.d_id = sess->s_id; in qlt_free_session_done()
419 memcpy(fcport.port_name, sess->port_name, WWN_SIZE); in qlt_free_session_done()
421 fcport.tgt_session = sess; in qlt_free_session_done()
427 sess, rc); in qlt_free_session_done()
435 if (sess->se_sess != NULL) in qlt_free_session_done()
436 ha->tgt.tgt_ops->free_session(sess); in qlt_free_session_done()
441 while (!ACCESS_ONCE(sess->logout_completed)) { in qlt_free_session_done()
445 __func__, sess); in qlt_free_session_done()
453 __func__, sess); in qlt_free_session_done()
458 if (sess->plogi_ack_needed) in qlt_free_session_done()
459 qlt_send_notify_ack(vha, &sess->tm_iocb, in qlt_free_session_done()
462 list_del(&sess->sess_list_entry); in qlt_free_session_done()
467 "Unregistration of sess %p finished\n", sess); in qlt_free_session_done()
469 kfree(sess); in qlt_free_session_done()
480 void qlt_unreg_sess(struct qla_tgt_sess *sess) in qlt_unreg_sess() argument
482 struct scsi_qla_host *vha = sess->vha; in qlt_unreg_sess()
484 vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess); in qlt_unreg_sess()
486 if (!list_empty(&sess->del_list_entry)) in qlt_unreg_sess()
487 list_del_init(&sess->del_list_entry); in qlt_unreg_sess()
488 sess->deleted = QLA_SESS_DELETION_IN_PROGRESS; in qlt_unreg_sess()
490 INIT_WORK(&sess->free_work, qlt_free_session_done); in qlt_unreg_sess()
491 schedule_work(&sess->free_work); in qlt_unreg_sess()
499 struct qla_tgt_sess *sess = NULL; in qlt_reset() local
513 sess = list_entry(ha->tgt.qla_tgt->sess_list.next, in qlt_reset()
514 typeof(*sess), sess_list_entry); in qlt_reset()
530 sess = NULL; in qlt_reset()
534 sess = NULL; in qlt_reset()
537 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_reset()
541 "Using sess for qla_tgt_reset: %p\n", sess); in qlt_reset()
542 if (!sess) { in qlt_reset()
549 "loop_id %d)\n", vha->host_no, sess, sess->port_name, in qlt_reset()
555 return qlt_issue_task_mgmt(sess, unpacked_lun, mcmd, in qlt_reset()
560 static void qlt_schedule_sess_for_deletion(struct qla_tgt_sess *sess, in qlt_schedule_sess_for_deletion() argument
563 struct qla_tgt *tgt = sess->tgt; in qlt_schedule_sess_for_deletion()
566 if (sess->deleted) { in qlt_schedule_sess_for_deletion()
568 if (immediate && sess->deleted == QLA_SESS_DELETION_PENDING) in qlt_schedule_sess_for_deletion()
569 list_del(&sess->del_list_entry); in qlt_schedule_sess_for_deletion()
574 ql_dbg(ql_dbg_tgt, sess->vha, 0xe001, in qlt_schedule_sess_for_deletion()
575 "Scheduling sess %p for deletion\n", sess); in qlt_schedule_sess_for_deletion()
579 sess->deleted = QLA_SESS_DELETION_IN_PROGRESS; in qlt_schedule_sess_for_deletion()
580 list_add(&sess->del_list_entry, &tgt->del_sess_list); in qlt_schedule_sess_for_deletion()
582 sess->deleted = QLA_SESS_DELETION_PENDING; in qlt_schedule_sess_for_deletion()
583 list_add_tail(&sess->del_list_entry, &tgt->del_sess_list); in qlt_schedule_sess_for_deletion()
586 sess->expires = jiffies + dev_loss_tmo * HZ; in qlt_schedule_sess_for_deletion()
588 ql_dbg(ql_dbg_tgt, sess->vha, 0xe048, in qlt_schedule_sess_for_deletion()
591 sess->vha->vp_idx, sess->port_name, sess->loop_id, in qlt_schedule_sess_for_deletion()
592 sess->s_id.b.domain, sess->s_id.b.area, sess->s_id.b.al_pa, in qlt_schedule_sess_for_deletion()
593 dev_loss_tmo, sess->expires, immediate, sess->logout_on_delete, in qlt_schedule_sess_for_deletion()
594 sess->generation); in qlt_schedule_sess_for_deletion()
600 sess->expires - jiffies); in qlt_schedule_sess_for_deletion()
606 struct qla_tgt_sess *sess; in qlt_clear_tgt_db() local
608 list_for_each_entry(sess, &tgt->sess_list, sess_list_entry) in qlt_clear_tgt_db()
609 qlt_schedule_sess_for_deletion(sess, true); in qlt_clear_tgt_db()
664 static void qlt_undelete_sess(struct qla_tgt_sess *sess) in qlt_undelete_sess() argument
666 BUG_ON(sess->deleted != QLA_SESS_DELETION_PENDING); in qlt_undelete_sess()
668 list_del_init(&sess->del_list_entry); in qlt_undelete_sess()
669 sess->deleted = 0; in qlt_undelete_sess()
678 struct qla_tgt_sess *sess; in qlt_del_sess_work_fn() local
683 sess = list_entry(tgt->del_sess_list.next, typeof(*sess), in qlt_del_sess_work_fn()
686 if (time_after_eq(elapsed, sess->expires)) { in qlt_del_sess_work_fn()
688 list_del_init(&sess->del_list_entry); in qlt_del_sess_work_fn()
689 sess->deleted = QLA_SESS_DELETION_IN_PROGRESS; in qlt_del_sess_work_fn()
693 sess); in qlt_del_sess_work_fn()
694 ha->tgt.tgt_ops->shutdown_sess(sess); in qlt_del_sess_work_fn()
695 ha->tgt.tgt_ops->put_sess(sess); in qlt_del_sess_work_fn()
698 sess->expires - elapsed); in qlt_del_sess_work_fn()
715 struct qla_tgt_sess *sess; in qlt_create_sess() local
721 list_for_each_entry(sess, &vha->vha_tgt.qla_tgt->sess_list, in qlt_create_sess()
723 if (!memcmp(sess->port_name, fcport->port_name, WWN_SIZE)) { in qlt_create_sess()
727 "loop_id %d", sess, sess->s_id.b.domain, in qlt_create_sess()
728 sess->s_id.b.al_pa, sess->s_id.b.area, in qlt_create_sess()
729 sess->loop_id, fcport->d_id.b.domain, in qlt_create_sess()
734 if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) { in qlt_create_sess()
740 if (sess->deleted) in qlt_create_sess()
741 qlt_undelete_sess(sess); in qlt_create_sess()
743 kref_get(&sess->se_sess->sess_kref); in qlt_create_sess()
744 ha->tgt.tgt_ops->update_sess(sess, fcport->d_id, fcport->loop_id, in qlt_create_sess()
747 if (sess->local && !local) in qlt_create_sess()
748 sess->local = 0; in qlt_create_sess()
750 qlt_do_generation_tick(vha, &sess->generation); in qlt_create_sess()
754 return sess; in qlt_create_sess()
759 sess = kzalloc(sizeof(*sess), GFP_KERNEL); in qlt_create_sess()
760 if (!sess) { in qlt_create_sess()
768 sess->tgt = vha->vha_tgt.qla_tgt; in qlt_create_sess()
769 sess->vha = vha; in qlt_create_sess()
770 sess->s_id = fcport->d_id; in qlt_create_sess()
771 sess->loop_id = fcport->loop_id; in qlt_create_sess()
772 sess->local = local; in qlt_create_sess()
773 INIT_LIST_HEAD(&sess->del_list_entry); in qlt_create_sess()
779 sess->logout_on_delete = 1; in qlt_create_sess()
780 sess->keep_nport_handle = 0; in qlt_create_sess()
784 sess, vha->vha_tgt.qla_tgt); in qlt_create_sess()
786 be_sid[0] = sess->s_id.b.domain; in qlt_create_sess()
787 be_sid[1] = sess->s_id.b.area; in qlt_create_sess()
788 be_sid[2] = sess->s_id.b.al_pa; in qlt_create_sess()
796 &fcport->port_name[0], sess, &be_sid[0], fcport->loop_id) < 0) { in qlt_create_sess()
797 kfree(sess); in qlt_create_sess()
804 kref_get(&sess->se_sess->sess_kref); in qlt_create_sess()
806 sess->conf_compl_supported = (fcport->flags & FCF_CONF_COMP_SUPPORTED); in qlt_create_sess()
807 BUILD_BUG_ON(sizeof(sess->port_name) != sizeof(fcport->port_name)); in qlt_create_sess()
808 memcpy(sess->port_name, fcport->port_name, sizeof(sess->port_name)); in qlt_create_sess()
811 list_add_tail(&sess->sess_list_entry, &vha->vha_tgt.qla_tgt->sess_list); in qlt_create_sess()
813 qlt_do_generation_tick(vha, &sess->generation); in qlt_create_sess()
820 fcport->loop_id, sess->s_id.b.domain, sess->s_id.b.area, in qlt_create_sess()
821 sess->s_id.b.al_pa, sess->conf_compl_supported ? "" : "not "); in qlt_create_sess()
823 return sess; in qlt_create_sess()
833 struct qla_tgt_sess *sess; in qlt_fc_port_added() local
850 sess = qlt_find_sess_by_port_name(tgt, fcport->port_name); in qlt_fc_port_added()
851 if (!sess) { in qlt_fc_port_added()
855 sess = qlt_create_sess(vha, fcport, false); in qlt_fc_port_added()
859 } else if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) { in qlt_fc_port_added()
864 kref_get(&sess->se_sess->sess_kref); in qlt_fc_port_added()
866 if (sess->deleted) { in qlt_fc_port_added()
867 qlt_undelete_sess(sess); in qlt_fc_port_added()
872 sess->local ? "local " : "", sess->port_name, in qlt_fc_port_added()
873 sess->loop_id); in qlt_fc_port_added()
876 "Reappeared sess %p\n", sess); in qlt_fc_port_added()
878 ha->tgt.tgt_ops->update_sess(sess, fcport->d_id, fcport->loop_id, in qlt_fc_port_added()
882 if (sess && sess->local) { in qlt_fc_port_added()
886 fcport->port_name, sess->loop_id); in qlt_fc_port_added()
887 sess->local = 0; in qlt_fc_port_added()
889 ha->tgt.tgt_ops->put_sess(sess); in qlt_fc_port_added()
901 struct qla_tgt_sess *sess; in qlt_fc_port_deleted() local
912 sess = qlt_find_sess_by_port_name(tgt, fcport->port_name); in qlt_fc_port_deleted()
913 if (!sess) { in qlt_fc_port_deleted()
917 if (max_gen - sess->generation < 0) { in qlt_fc_port_deleted()
921 sess->se_sess, sess, sess->port_name, max_gen, in qlt_fc_port_deleted()
922 sess->generation); in qlt_fc_port_deleted()
926 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf008, "qla_tgt_fc_port_deleted %p", sess); in qlt_fc_port_deleted()
928 sess->local = 1; in qlt_fc_port_deleted()
929 qlt_schedule_sess_for_deletion(sess, false); in qlt_fc_port_deleted()
1362 struct abts_recv_from_24xx *abts, struct qla_tgt_sess *sess) in __qlt_24xx_handle_abts() argument
1365 struct se_session *se_sess = sess->se_sess; in __qlt_24xx_handle_abts()
1411 mcmd->sess = sess; in __qlt_24xx_handle_abts()
1435 struct qla_tgt_sess *sess; in qlt_24xx_handle_abts() local
1466 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_24xx_handle_abts()
1467 if (!sess) { in qlt_24xx_handle_abts()
1480 if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) { in qlt_24xx_handle_abts()
1485 rc = __qlt_24xx_handle_abts(vha, abts, sess); in qlt_24xx_handle_abts()
1524 ctio->nport_handle = mcmd->sess->loop_id; in qlt_24xx_send_task_mgmt_ctio()
1555 struct scsi_qla_host *vha = mcmd->sess->vha; in qlt_xmit_tm_rsp()
2490 if (cmd->sess && cmd->sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) { in qlt_xmit_response()
2492 if (cmd->sess->logout_completed) in qlt_xmit_response()
2661 (cmd->sess && cmd->sess->deleted == QLA_SESS_DELETION_IN_PROGRESS)) { in qlt_rdy_to_xfer()
3099 struct qla_tgt_sess *sess = cmd->sess; in qlt_free_cmd() local
3116 if (!sess || !sess->se_sess) { in qlt_free_cmd()
3121 percpu_ida_free(&sess->se_sess->sess_tag_pool, cmd->se_cmd.map_tag); in qlt_free_cmd()
3556 struct qla_tgt_sess *sess = cmd->sess; in __qlt_do_work() local
3605 ha->tgt.tgt_ops->put_sess(sess); in __qlt_do_work()
3620 percpu_ida_free(&sess->se_sess->sess_tag_pool, cmd->se_cmd.map_tag); in __qlt_do_work()
3621 ha->tgt.tgt_ops->put_sess(sess); in __qlt_do_work()
3639 struct qla_tgt_sess *sess, in qlt_get_tag() argument
3642 struct se_session *se_sess = sess->se_sess; in qlt_get_tag()
3659 cmd->sess = sess; in qlt_get_tag()
3660 cmd->loop_id = sess->loop_id; in qlt_get_tag()
3661 cmd->conf_compl_supported = sess->conf_compl_supported; in qlt_get_tag()
3680 struct qla_tgt_sess *sess; in qlt_create_sess_from_atio() local
3708 sess = qlt_make_local_sess(vha, s_id); in qlt_create_sess_from_atio()
3712 if (!sess) in qlt_create_sess_from_atio()
3719 cmd = qlt_get_tag(vha, sess, &op->atio); in qlt_create_sess_from_atio()
3723 ha->tgt.tgt_ops->put_sess(sess); in qlt_create_sess_from_atio()
3750 struct qla_tgt_sess *sess; in qlt_handle_cmd_for_atio() local
3759 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, atio->u.isp24.fcp_hdr.s_id); in qlt_handle_cmd_for_atio()
3760 if (unlikely(!sess)) { in qlt_handle_cmd_for_atio()
3780 if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) { in qlt_handle_cmd_for_atio()
3783 sess); in qlt_handle_cmd_for_atio()
3790 kref_get(&sess->se_sess->sess_kref); in qlt_handle_cmd_for_atio()
3792 cmd = qlt_get_tag(vha, sess, atio); in qlt_handle_cmd_for_atio()
3796 ha->tgt.tgt_ops->put_sess(sess); in qlt_handle_cmd_for_atio()
3814 static int qlt_issue_task_mgmt(struct qla_tgt_sess *sess, uint32_t lun, in qlt_issue_task_mgmt() argument
3817 struct scsi_qla_host *vha = sess->vha; in qlt_issue_task_mgmt()
3833 mcmd->sess = sess; in qlt_issue_task_mgmt()
3846 "qla_target(%d): CLEAR_ACA received\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3853 sess->vha->vp_idx); in qlt_issue_task_mgmt()
3859 "qla_target(%d): LUN_RESET received\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3866 "qla_target(%d): CLEAR_TS received\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3872 "qla_target(%d): ABORT_TS received\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3879 sess->vha->vp_idx); in qlt_issue_task_mgmt()
3886 sess->vha->vp_idx); in qlt_issue_task_mgmt()
3893 sess->vha->vp_idx); in qlt_issue_task_mgmt()
3899 "qla_target(%d): Doing NEXUS_LOSS\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3906 sess->vha->vp_idx, fn); in qlt_issue_task_mgmt()
3915 sess->vha->vp_idx, res); in qlt_issue_task_mgmt()
3929 struct qla_tgt_sess *sess; in qlt_handle_task_mgmt() local
3938 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_handle_task_mgmt()
3942 if (!sess) { in qlt_handle_task_mgmt()
3950 if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) in qlt_handle_task_mgmt()
3953 return qlt_issue_task_mgmt(sess, unpacked_lun, fn, iocb, 0); in qlt_handle_task_mgmt()
3958 struct imm_ntfy_from_isp *iocb, struct qla_tgt_sess *sess) in __qlt_abort_task() argument
3975 mcmd->sess = sess; in __qlt_abort_task()
4001 struct qla_tgt_sess *sess; in qlt_abort_task() local
4006 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_abort_task()
4007 if (sess == NULL) { in qlt_abort_task()
4015 return __qlt_abort_task(vha, iocb, sess); in qlt_abort_task()
4058 struct qla_tgt_sess *sess = NULL, *other_sess; in qlt_find_sess_invalidate_other() local
4066 WARN_ON(sess); in qlt_find_sess_invalidate_other()
4067 sess = other_sess; in qlt_find_sess_invalidate_other()
4090 sess->logout_on_delete = 0; in qlt_find_sess_invalidate_other()
4109 return sess; in qlt_find_sess_invalidate_other()
4152 struct qla_tgt_sess *sess = NULL; in qlt_24xx_handle_els() local
4182 sess = qlt_find_sess_invalidate_other(tgt, wwn, in qlt_24xx_handle_els()
4185 if (!sess || IS_SW_RESV_ADDR(sess->s_id)) { in qlt_24xx_handle_els()
4190 if (sess->plogi_ack_needed) { in qlt_24xx_handle_els()
4197 ql_log(ql_log_warn, sess->vha, 0xf094, in qlt_24xx_handle_els()
4198 "sess %p received double plogi.\n", sess); in qlt_24xx_handle_els()
4200 qlt_swap_imm_ntfy_iocb(iocb, &sess->tm_iocb); in qlt_24xx_handle_els()
4214 memcpy(&sess->tm_iocb, iocb, sizeof(sess->tm_iocb)); in qlt_24xx_handle_els()
4215 sess->plogi_ack_needed = 1; in qlt_24xx_handle_els()
4235 sess->keep_nport_handle = ((sess->loop_id == loop_id) && in qlt_24xx_handle_els()
4236 (sess->s_id.b24 == port_id.b24)); in qlt_24xx_handle_els()
4237 qlt_schedule_sess_for_deletion(sess, true); in qlt_24xx_handle_els()
4244 sess = qlt_find_sess_invalidate_other(tgt, wwn, port_id, in qlt_24xx_handle_els()
4247 if (sess != NULL) { in qlt_24xx_handle_els()
4248 if (sess->deleted) { in qlt_24xx_handle_els()
4254 ql_log(ql_log_warn, sess->vha, 0xf095, in qlt_24xx_handle_els()
4256 sess); in qlt_24xx_handle_els()
4268 sess->loop_id, sess, iocb->u.isp24.nport_handle); in qlt_24xx_handle_els()
4270 sess->local = 0; in qlt_24xx_handle_els()
4271 sess->loop_id = loop_id; in qlt_24xx_handle_els()
4272 sess->s_id = port_id; in qlt_24xx_handle_els()
4275 sess->conf_compl_supported = 1; in qlt_24xx_handle_els()
4912 struct qla_tgt_sess *sess = NULL; in __qlt_send_busy() local
4914 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in __qlt_send_busy()
4916 if (!sess) { in __qlt_send_busy()
4935 ctio24->nport_handle = sess->loop_id; in __qlt_send_busy()
4969 struct qla_tgt_sess *sess; in qlt_alloc_qfull_cmd() local
4996 sess = ha->tgt.tgt_ops->find_sess_by_s_id in qlt_alloc_qfull_cmd()
4998 if (!sess) in qlt_alloc_qfull_cmd()
5001 se_sess = sess->se_sess; in qlt_alloc_qfull_cmd()
5543 struct qla_tgt_sess *sess = NULL; in qlt_make_local_sess() local
5587 sess = qlt_create_sess(vha, fcport, true); in qlt_make_local_sess()
5590 return sess; in qlt_make_local_sess()
5598 struct qla_tgt_sess *sess = NULL; in qlt_abort_work() local
5613 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_abort_work()
5615 if (!sess) { in qlt_abort_work()
5619 sess = qlt_make_local_sess(vha, s_id); in qlt_abort_work()
5624 if (!sess) in qlt_abort_work()
5627 if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) { in qlt_abort_work()
5628 sess = NULL; in qlt_abort_work()
5632 kref_get(&sess->se_sess->sess_kref); in qlt_abort_work()
5638 rc = __qlt_24xx_handle_abts(vha, &prm->abts, sess); in qlt_abort_work()
5642 ha->tgt.tgt_ops->put_sess(sess); in qlt_abort_work()
5648 if (sess) in qlt_abort_work()
5649 ha->tgt.tgt_ops->put_sess(sess); in qlt_abort_work()
5659 struct qla_tgt_sess *sess = NULL; in qlt_tmr_work() local
5673 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_tmr_work()
5674 if (!sess) { in qlt_tmr_work()
5678 sess = qlt_make_local_sess(vha, s_id); in qlt_tmr_work()
5683 if (!sess) in qlt_tmr_work()
5686 if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) { in qlt_tmr_work()
5687 sess = NULL; in qlt_tmr_work()
5691 kref_get(&sess->se_sess->sess_kref); in qlt_tmr_work()
5700 rc = qlt_issue_task_mgmt(sess, unpacked_lun, fn, iocb, 0); in qlt_tmr_work()
5704 ha->tgt.tgt_ops->put_sess(sess); in qlt_tmr_work()
5710 if (sess) in qlt_tmr_work()
5711 ha->tgt.tgt_ops->put_sess(sess); in qlt_tmr_work()