Lines Matching refs:session
1688 int iscsi_session_chkready(struct iscsi_cls_session *session) in iscsi_session_chkready() argument
1693 spin_lock_irqsave(&session->lock, flags); in iscsi_session_chkready()
1694 switch (session->state) { in iscsi_session_chkready()
1708 spin_unlock_irqrestore(&session->lock, flags); in iscsi_session_chkready()
1713 int iscsi_is_session_online(struct iscsi_cls_session *session) in iscsi_is_session_online() argument
1718 spin_lock_irqsave(&session->lock, flags); in iscsi_is_session_online()
1719 if (session->state == ISCSI_SESSION_LOGGED_IN) in iscsi_is_session_online()
1721 spin_unlock_irqrestore(&session->lock, flags); in iscsi_is_session_online()
1728 struct iscsi_cls_session *session = iscsi_dev_to_session(dev); in iscsi_session_release() local
1731 shost = iscsi_session_to_shost(session); in iscsi_session_release()
1733 ISCSI_DBG_TRANS_SESSION(session, "Completing session release\n"); in iscsi_session_release()
1734 kfree(session); in iscsi_session_release()
1789 struct iscsi_cls_session *session; in iscsi_user_scan_session() local
1798 session = iscsi_dev_to_session(dev); in iscsi_user_scan_session()
1800 ISCSI_DBG_TRANS_SESSION(session, "Scanning session\n"); in iscsi_user_scan_session()
1802 shost = iscsi_session_to_shost(session); in iscsi_user_scan_session()
1806 spin_lock_irqsave(&session->lock, flags); in iscsi_user_scan_session()
1807 if (session->state != ISCSI_SESSION_LOGGED_IN) { in iscsi_user_scan_session()
1808 spin_unlock_irqrestore(&session->lock, flags); in iscsi_user_scan_session()
1811 id = session->target_id; in iscsi_user_scan_session()
1812 spin_unlock_irqrestore(&session->lock, flags); in iscsi_user_scan_session()
1819 scsi_scan_target(&session->dev, 0, id, in iscsi_user_scan_session()
1825 ISCSI_DBG_TRANS_SESSION(session, "Completed session scan\n"); in iscsi_user_scan_session()
1844 struct iscsi_cls_session *session = in iscsi_scan_session() local
1846 struct Scsi_Host *shost = iscsi_session_to_shost(session); in iscsi_scan_session()
1854 iscsi_user_scan_session(&session->dev, &scan_data); in iscsi_scan_session()
1869 struct iscsi_cls_session *session = in iscsi_block_scsi_eh() local
1874 spin_lock_irqsave(&session->lock, flags); in iscsi_block_scsi_eh()
1875 while (session->state != ISCSI_SESSION_LOGGED_IN) { in iscsi_block_scsi_eh()
1876 if (session->state == ISCSI_SESSION_FREE) { in iscsi_block_scsi_eh()
1880 spin_unlock_irqrestore(&session->lock, flags); in iscsi_block_scsi_eh()
1882 spin_lock_irqsave(&session->lock, flags); in iscsi_block_scsi_eh()
1884 spin_unlock_irqrestore(&session->lock, flags); in iscsi_block_scsi_eh()
1891 struct iscsi_cls_session *session = in session_recovery_timedout() local
1896 iscsi_cls_session_printk(KERN_INFO, session, in session_recovery_timedout()
1898 session->recovery_tmo); in session_recovery_timedout()
1900 spin_lock_irqsave(&session->lock, flags); in session_recovery_timedout()
1901 switch (session->state) { in session_recovery_timedout()
1903 session->state = ISCSI_SESSION_FREE; in session_recovery_timedout()
1908 spin_unlock_irqrestore(&session->lock, flags); in session_recovery_timedout()
1911 spin_unlock_irqrestore(&session->lock, flags); in session_recovery_timedout()
1913 if (session->transport->session_recovery_timedout) in session_recovery_timedout()
1914 session->transport->session_recovery_timedout(session); in session_recovery_timedout()
1916 ISCSI_DBG_TRANS_SESSION(session, "Unblocking SCSI target\n"); in session_recovery_timedout()
1917 scsi_target_unblock(&session->dev, SDEV_TRANSPORT_OFFLINE); in session_recovery_timedout()
1918 ISCSI_DBG_TRANS_SESSION(session, "Completed unblocking SCSI target\n"); in session_recovery_timedout()
1923 struct iscsi_cls_session *session = in __iscsi_unblock_session() local
1926 struct Scsi_Host *shost = iscsi_session_to_shost(session); in __iscsi_unblock_session()
1930 ISCSI_DBG_TRANS_SESSION(session, "Unblocking session\n"); in __iscsi_unblock_session()
1935 cancel_delayed_work(&session->recovery_work); in __iscsi_unblock_session()
1936 spin_lock_irqsave(&session->lock, flags); in __iscsi_unblock_session()
1937 session->state = ISCSI_SESSION_LOGGED_IN; in __iscsi_unblock_session()
1938 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unblock_session()
1940 scsi_target_unblock(&session->dev, SDEV_RUNNING); in __iscsi_unblock_session()
1947 if (scsi_queue_work(shost, &session->scan_work)) in __iscsi_unblock_session()
1950 ISCSI_DBG_TRANS_SESSION(session, "Completed unblocking session\n"); in __iscsi_unblock_session()
1959 void iscsi_unblock_session(struct iscsi_cls_session *session) in iscsi_unblock_session() argument
1961 queue_work(iscsi_eh_timer_workq, &session->unblock_work); in iscsi_unblock_session()
1972 struct iscsi_cls_session *session = in __iscsi_block_session() local
1977 ISCSI_DBG_TRANS_SESSION(session, "Blocking session\n"); in __iscsi_block_session()
1978 spin_lock_irqsave(&session->lock, flags); in __iscsi_block_session()
1979 session->state = ISCSI_SESSION_FAILED; in __iscsi_block_session()
1980 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_block_session()
1981 scsi_target_block(&session->dev); in __iscsi_block_session()
1982 ISCSI_DBG_TRANS_SESSION(session, "Completed SCSI target blocking\n"); in __iscsi_block_session()
1983 if (session->recovery_tmo >= 0) in __iscsi_block_session()
1985 &session->recovery_work, in __iscsi_block_session()
1986 session->recovery_tmo * HZ); in __iscsi_block_session()
1989 void iscsi_block_session(struct iscsi_cls_session *session) in iscsi_block_session() argument
1991 queue_work(iscsi_eh_timer_workq, &session->block_work); in iscsi_block_session()
1997 struct iscsi_cls_session *session = in __iscsi_unbind_session() local
2000 struct Scsi_Host *shost = iscsi_session_to_shost(session); in __iscsi_unbind_session()
2005 ISCSI_DBG_TRANS_SESSION(session, "Unbinding session\n"); in __iscsi_unbind_session()
2009 spin_lock_irqsave(&session->lock, flags); in __iscsi_unbind_session()
2010 if (session->target_id == ISCSI_MAX_TARGET) { in __iscsi_unbind_session()
2011 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unbind_session()
2016 target_id = session->target_id; in __iscsi_unbind_session()
2017 session->target_id = ISCSI_MAX_TARGET; in __iscsi_unbind_session()
2018 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unbind_session()
2021 if (session->ida_used) in __iscsi_unbind_session()
2024 scsi_remove_target(&session->dev); in __iscsi_unbind_session()
2025 iscsi_session_event(session, ISCSI_KEVENT_UNBIND_SESSION); in __iscsi_unbind_session()
2026 ISCSI_DBG_TRANS_SESSION(session, "Completed target removal\n"); in __iscsi_unbind_session()
2033 struct iscsi_cls_session *session; in iscsi_alloc_session() local
2035 session = kzalloc(sizeof(*session) + dd_size, in iscsi_alloc_session()
2037 if (!session) in iscsi_alloc_session()
2040 session->transport = transport; in iscsi_alloc_session()
2041 session->creator = -1; in iscsi_alloc_session()
2042 session->recovery_tmo = 120; in iscsi_alloc_session()
2043 session->state = ISCSI_SESSION_FREE; in iscsi_alloc_session()
2044 INIT_DELAYED_WORK(&session->recovery_work, session_recovery_timedout); in iscsi_alloc_session()
2045 INIT_LIST_HEAD(&session->sess_list); in iscsi_alloc_session()
2046 INIT_WORK(&session->unblock_work, __iscsi_unblock_session); in iscsi_alloc_session()
2047 INIT_WORK(&session->block_work, __iscsi_block_session); in iscsi_alloc_session()
2048 INIT_WORK(&session->unbind_work, __iscsi_unbind_session); in iscsi_alloc_session()
2049 INIT_WORK(&session->scan_work, iscsi_scan_session); in iscsi_alloc_session()
2050 spin_lock_init(&session->lock); in iscsi_alloc_session()
2054 session->dev.parent = &shost->shost_gendev; in iscsi_alloc_session()
2055 session->dev.release = iscsi_session_release; in iscsi_alloc_session()
2056 device_initialize(&session->dev); in iscsi_alloc_session()
2058 session->dd_data = &session[1]; in iscsi_alloc_session()
2060 ISCSI_DBG_TRANS_SESSION(session, "Completed session allocation\n"); in iscsi_alloc_session()
2061 return session; in iscsi_alloc_session()
2065 int iscsi_add_session(struct iscsi_cls_session *session, unsigned int target_id) in iscsi_add_session() argument
2067 struct Scsi_Host *shost = iscsi_session_to_shost(session); in iscsi_add_session()
2074 session->sid = atomic_add_return(1, &iscsi_session_nr); in iscsi_add_session()
2080 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_add_session()
2084 session->target_id = (unsigned int)id; in iscsi_add_session()
2085 session->ida_used = true; in iscsi_add_session()
2087 session->target_id = target_id; in iscsi_add_session()
2089 dev_set_name(&session->dev, "session%u", session->sid); in iscsi_add_session()
2090 err = device_add(&session->dev); in iscsi_add_session()
2092 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_add_session()
2096 transport_register_device(&session->dev); in iscsi_add_session()
2099 list_add(&session->sess_list, &sesslist); in iscsi_add_session()
2102 iscsi_session_event(session, ISCSI_KEVENT_CREATE_SESSION); in iscsi_add_session()
2103 ISCSI_DBG_TRANS_SESSION(session, "Completed session adding\n"); in iscsi_add_session()
2107 if (session->ida_used) in iscsi_add_session()
2108 ida_simple_remove(&iscsi_sess_ida, session->target_id); in iscsi_add_session()
2127 struct iscsi_cls_session *session; in iscsi_create_session() local
2129 session = iscsi_alloc_session(shost, transport, dd_size); in iscsi_create_session()
2130 if (!session) in iscsi_create_session()
2133 if (iscsi_add_session(session, target_id)) { in iscsi_create_session()
2134 iscsi_free_session(session); in iscsi_create_session()
2137 return session; in iscsi_create_session()
2163 void iscsi_remove_session(struct iscsi_cls_session *session) in iscsi_remove_session() argument
2165 struct Scsi_Host *shost = iscsi_session_to_shost(session); in iscsi_remove_session()
2169 ISCSI_DBG_TRANS_SESSION(session, "Removing session\n"); in iscsi_remove_session()
2172 list_del(&session->sess_list); in iscsi_remove_session()
2178 if (!cancel_delayed_work(&session->recovery_work)) in iscsi_remove_session()
2186 spin_lock_irqsave(&session->lock, flags); in iscsi_remove_session()
2187 session->state = ISCSI_SESSION_FREE; in iscsi_remove_session()
2188 spin_unlock_irqrestore(&session->lock, flags); in iscsi_remove_session()
2190 scsi_target_unblock(&session->dev, SDEV_TRANSPORT_OFFLINE); in iscsi_remove_session()
2193 __iscsi_unbind_session(&session->unbind_work); in iscsi_remove_session()
2196 err = device_for_each_child(&session->dev, NULL, in iscsi_remove_session()
2199 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_remove_session()
2203 transport_unregister_device(&session->dev); in iscsi_remove_session()
2205 ISCSI_DBG_TRANS_SESSION(session, "Completing session removal\n"); in iscsi_remove_session()
2206 device_del(&session->dev); in iscsi_remove_session()
2210 void iscsi_free_session(struct iscsi_cls_session *session) in iscsi_free_session() argument
2212 ISCSI_DBG_TRANS_SESSION(session, "Freeing session\n"); in iscsi_free_session()
2213 iscsi_session_event(session, ISCSI_KEVENT_DESTROY_SESSION); in iscsi_free_session()
2214 put_device(&session->dev); in iscsi_free_session()
2225 int iscsi_destroy_session(struct iscsi_cls_session *session) in iscsi_destroy_session() argument
2227 iscsi_remove_session(session); in iscsi_destroy_session()
2228 ISCSI_DBG_TRANS_SESSION(session, "Completing session destruction\n"); in iscsi_destroy_session()
2229 iscsi_free_session(session); in iscsi_destroy_session()
2250 iscsi_create_conn(struct iscsi_cls_session *session, int dd_size, uint32_t cid) in iscsi_create_conn() argument
2252 struct iscsi_transport *transport = session->transport; in iscsi_create_conn()
2269 if (!get_device(&session->dev)) in iscsi_create_conn()
2272 dev_set_name(&conn->dev, "connection%d:%u", session->sid, cid); in iscsi_create_conn()
2273 conn->dev.parent = &session->dev; in iscsi_create_conn()
2277 iscsi_cls_session_printk(KERN_ERR, session, "could not " in iscsi_create_conn()
2291 put_device(&session->dev); in iscsi_create_conn()
2639 int iscsi_session_event(struct iscsi_cls_session *session, in iscsi_session_event() argument
2649 priv = iscsi_if_transport_lookup(session->transport); in iscsi_session_event()
2652 shost = iscsi_session_to_shost(session); in iscsi_session_event()
2656 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_session_event()
2664 ev->transport_handle = iscsi_handle(session->transport); in iscsi_session_event()
2670 ev->r.d_session.sid = session->sid; in iscsi_session_event()
2674 ev->r.c_session_ret.sid = session->sid; in iscsi_session_event()
2678 ev->r.unbind_session.sid = session->sid; in iscsi_session_event()
2681 iscsi_cls_session_printk(KERN_ERR, session, "Invalid event " in iscsi_session_event()
2693 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_session_event()
2698 ISCSI_DBG_TRANS_SESSION(session, "Completed handling event %d rc %d\n", in iscsi_session_event()
2711 struct iscsi_cls_session *session; in iscsi_if_create_session() local
2714 session = transport->create_session(ep, cmds_max, queue_depth, in iscsi_if_create_session()
2716 if (!session) in iscsi_if_create_session()
2719 session->creator = pid; in iscsi_if_create_session()
2720 shost = iscsi_session_to_shost(session); in iscsi_if_create_session()
2722 ev->r.c_session_ret.sid = session->sid; in iscsi_if_create_session()
2723 ISCSI_DBG_TRANS_SESSION(session, in iscsi_if_create_session()
2732 struct iscsi_cls_session *session; in iscsi_if_create_conn() local
2734 session = iscsi_session_lookup(ev->u.c_conn.sid); in iscsi_if_create_conn()
2735 if (!session) { in iscsi_if_create_conn()
2741 conn = transport->create_conn(session, ev->u.c_conn.cid); in iscsi_if_create_conn()
2743 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_if_create_conn()
2748 ev->r.c_conn_ret.sid = session->sid; in iscsi_if_create_conn()
2776 struct iscsi_cls_session *session; in iscsi_set_param() local
2779 session = iscsi_session_lookup(ev->u.set_param.sid); in iscsi_set_param()
2781 if (!conn || !session) in iscsi_set_param()
2787 session->recovery_tmo = value; in iscsi_set_param()
3385 struct iscsi_cls_session *session; in iscsi_logout_flashnode_sid() local
3401 session = iscsi_session_lookup(ev->u.logout_flashnode_sid.sid); in iscsi_logout_flashnode_sid()
3402 if (!session) { in iscsi_logout_flashnode_sid()
3409 err = transport->logout_flashnode_sid(session); in iscsi_logout_flashnode_sid()
3496 struct iscsi_cls_session *session; in iscsi_if_recv_msg() local
3535 session = iscsi_session_lookup(ev->u.d_session.sid); in iscsi_if_recv_msg()
3536 if (session) in iscsi_if_recv_msg()
3537 transport->destroy_session(session); in iscsi_if_recv_msg()
3542 session = iscsi_session_lookup(ev->u.d_session.sid); in iscsi_if_recv_msg()
3543 if (session) in iscsi_if_recv_msg()
3544 scsi_queue_work(iscsi_session_to_shost(session), in iscsi_if_recv_msg()
3545 &session->unbind_work); in iscsi_if_recv_msg()
3556 session = iscsi_session_lookup(ev->u.b_conn.sid); in iscsi_if_recv_msg()
3562 if (!session || !conn) { in iscsi_if_recv_msg()
3567 ev->r.retcode = transport->bind_conn(session, conn, in iscsi_if_recv_msg()
3942 struct iscsi_cls_session *session = \
3944 struct iscsi_transport *t = session->transport; \
3948 return t->get_session_param(session, param, buf); \
4001 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_state() local
4002 return sprintf(buf, "%s\n", iscsi_session_state_name(session->state)); in show_priv_session_state()
4010 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_creator() local
4011 return sprintf(buf, "%d\n", session->creator); in show_priv_session_creator()
4019 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_target_id() local
4020 return sprintf(buf, "%d\n", session->target_id); in show_priv_session_target_id()
4030 struct iscsi_cls_session *session = \
4032 if (session->field == -1) \
4034 return sprintf(buf, format"\n", session->field); \
4045 struct iscsi_cls_session *session = \
4047 if ((session->state == ISCSI_SESSION_FREE) || \
4048 (session->state == ISCSI_SESSION_FAILED)) \
4051 session->field = -1; \
4056 session->field = val; \
4121 struct iscsi_cls_session *session = transport_class_to_session(cdev); in iscsi_session_attr_is_visible() local
4122 struct iscsi_transport *t = session->transport; in iscsi_session_attr_is_visible()
4352 struct iscsi_cls_session *session; in iscsi_session_match() local
4359 session = iscsi_dev_to_session(dev); in iscsi_session_match()
4360 shost = iscsi_session_to_shost(session); in iscsi_session_match()
4374 struct iscsi_cls_session *session; in iscsi_conn_match() local
4383 session = iscsi_dev_to_session(conn->dev.parent); in iscsi_conn_match()
4384 shost = iscsi_session_to_shost(session); in iscsi_conn_match()