Lines Matching refs:session
1687 int iscsi_session_chkready(struct iscsi_cls_session *session) in iscsi_session_chkready() argument
1692 spin_lock_irqsave(&session->lock, flags); in iscsi_session_chkready()
1693 switch (session->state) { in iscsi_session_chkready()
1707 spin_unlock_irqrestore(&session->lock, flags); in iscsi_session_chkready()
1712 int iscsi_is_session_online(struct iscsi_cls_session *session) in iscsi_is_session_online() argument
1717 spin_lock_irqsave(&session->lock, flags); in iscsi_is_session_online()
1718 if (session->state == ISCSI_SESSION_LOGGED_IN) in iscsi_is_session_online()
1720 spin_unlock_irqrestore(&session->lock, flags); in iscsi_is_session_online()
1727 struct iscsi_cls_session *session = iscsi_dev_to_session(dev); in iscsi_session_release() local
1730 shost = iscsi_session_to_shost(session); in iscsi_session_release()
1732 ISCSI_DBG_TRANS_SESSION(session, "Completing session release\n"); in iscsi_session_release()
1733 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()
1845 struct iscsi_cls_session *session = in iscsi_scan_session() local
1847 struct Scsi_Host *shost = iscsi_session_to_shost(session); in iscsi_scan_session()
1856 iscsi_user_scan_session(&session->dev, &scan_data); in iscsi_scan_session()
1871 struct iscsi_cls_session *session = in iscsi_block_scsi_eh() local
1876 spin_lock_irqsave(&session->lock, flags); in iscsi_block_scsi_eh()
1877 while (session->state != ISCSI_SESSION_LOGGED_IN) { in iscsi_block_scsi_eh()
1878 if (session->state == ISCSI_SESSION_FREE) { in iscsi_block_scsi_eh()
1882 spin_unlock_irqrestore(&session->lock, flags); in iscsi_block_scsi_eh()
1884 spin_lock_irqsave(&session->lock, flags); in iscsi_block_scsi_eh()
1886 spin_unlock_irqrestore(&session->lock, flags); in iscsi_block_scsi_eh()
1893 struct iscsi_cls_session *session = in session_recovery_timedout() local
1898 iscsi_cls_session_printk(KERN_INFO, session, in session_recovery_timedout()
1900 session->recovery_tmo); in session_recovery_timedout()
1902 spin_lock_irqsave(&session->lock, flags); in session_recovery_timedout()
1903 switch (session->state) { in session_recovery_timedout()
1905 session->state = ISCSI_SESSION_FREE; in session_recovery_timedout()
1910 spin_unlock_irqrestore(&session->lock, flags); in session_recovery_timedout()
1913 spin_unlock_irqrestore(&session->lock, flags); in session_recovery_timedout()
1915 if (session->transport->session_recovery_timedout) in session_recovery_timedout()
1916 session->transport->session_recovery_timedout(session); in session_recovery_timedout()
1918 ISCSI_DBG_TRANS_SESSION(session, "Unblocking SCSI target\n"); in session_recovery_timedout()
1919 scsi_target_unblock(&session->dev, SDEV_TRANSPORT_OFFLINE); in session_recovery_timedout()
1920 ISCSI_DBG_TRANS_SESSION(session, "Completed unblocking SCSI target\n"); in session_recovery_timedout()
1925 struct iscsi_cls_session *session = in __iscsi_unblock_session() local
1928 struct Scsi_Host *shost = iscsi_session_to_shost(session); in __iscsi_unblock_session()
1932 ISCSI_DBG_TRANS_SESSION(session, "Unblocking session\n"); in __iscsi_unblock_session()
1937 cancel_delayed_work(&session->recovery_work); in __iscsi_unblock_session()
1938 spin_lock_irqsave(&session->lock, flags); in __iscsi_unblock_session()
1939 session->state = ISCSI_SESSION_LOGGED_IN; in __iscsi_unblock_session()
1940 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unblock_session()
1942 scsi_target_unblock(&session->dev, SDEV_RUNNING); in __iscsi_unblock_session()
1949 if (scsi_queue_work(shost, &session->scan_work)) in __iscsi_unblock_session()
1952 ISCSI_DBG_TRANS_SESSION(session, "Completed unblocking session\n"); in __iscsi_unblock_session()
1961 void iscsi_unblock_session(struct iscsi_cls_session *session) in iscsi_unblock_session() argument
1963 queue_work(iscsi_eh_timer_workq, &session->unblock_work); in iscsi_unblock_session()
1974 struct iscsi_cls_session *session = in __iscsi_block_session() local
1979 ISCSI_DBG_TRANS_SESSION(session, "Blocking session\n"); in __iscsi_block_session()
1980 spin_lock_irqsave(&session->lock, flags); in __iscsi_block_session()
1981 session->state = ISCSI_SESSION_FAILED; in __iscsi_block_session()
1982 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_block_session()
1983 scsi_target_block(&session->dev); in __iscsi_block_session()
1984 ISCSI_DBG_TRANS_SESSION(session, "Completed SCSI target blocking\n"); in __iscsi_block_session()
1985 if (session->recovery_tmo >= 0) in __iscsi_block_session()
1987 &session->recovery_work, in __iscsi_block_session()
1988 session->recovery_tmo * HZ); in __iscsi_block_session()
1991 void iscsi_block_session(struct iscsi_cls_session *session) in iscsi_block_session() argument
1993 queue_work(iscsi_eh_timer_workq, &session->block_work); in iscsi_block_session()
1999 struct iscsi_cls_session *session = in __iscsi_unbind_session() local
2002 struct Scsi_Host *shost = iscsi_session_to_shost(session); in __iscsi_unbind_session()
2007 ISCSI_DBG_TRANS_SESSION(session, "Unbinding session\n"); in __iscsi_unbind_session()
2011 spin_lock_irqsave(&session->lock, flags); in __iscsi_unbind_session()
2012 if (session->target_id == ISCSI_MAX_TARGET) { in __iscsi_unbind_session()
2013 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unbind_session()
2018 target_id = session->target_id; in __iscsi_unbind_session()
2019 session->target_id = ISCSI_MAX_TARGET; in __iscsi_unbind_session()
2020 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unbind_session()
2023 if (session->ida_used) in __iscsi_unbind_session()
2026 scsi_remove_target(&session->dev); in __iscsi_unbind_session()
2027 iscsi_session_event(session, ISCSI_KEVENT_UNBIND_SESSION); in __iscsi_unbind_session()
2028 ISCSI_DBG_TRANS_SESSION(session, "Completed target removal\n"); in __iscsi_unbind_session()
2035 struct iscsi_cls_session *session; in iscsi_alloc_session() local
2037 session = kzalloc(sizeof(*session) + dd_size, in iscsi_alloc_session()
2039 if (!session) in iscsi_alloc_session()
2042 session->transport = transport; in iscsi_alloc_session()
2043 session->creator = -1; in iscsi_alloc_session()
2044 session->recovery_tmo = 120; in iscsi_alloc_session()
2045 session->recovery_tmo_sysfs_override = false; in iscsi_alloc_session()
2046 session->state = ISCSI_SESSION_FREE; in iscsi_alloc_session()
2047 INIT_DELAYED_WORK(&session->recovery_work, session_recovery_timedout); in iscsi_alloc_session()
2048 INIT_LIST_HEAD(&session->sess_list); in iscsi_alloc_session()
2049 INIT_WORK(&session->unblock_work, __iscsi_unblock_session); in iscsi_alloc_session()
2050 INIT_WORK(&session->block_work, __iscsi_block_session); in iscsi_alloc_session()
2051 INIT_WORK(&session->unbind_work, __iscsi_unbind_session); in iscsi_alloc_session()
2052 INIT_WORK(&session->scan_work, iscsi_scan_session); in iscsi_alloc_session()
2053 spin_lock_init(&session->lock); in iscsi_alloc_session()
2057 session->dev.parent = &shost->shost_gendev; in iscsi_alloc_session()
2058 session->dev.release = iscsi_session_release; in iscsi_alloc_session()
2059 device_initialize(&session->dev); in iscsi_alloc_session()
2061 session->dd_data = &session[1]; in iscsi_alloc_session()
2063 ISCSI_DBG_TRANS_SESSION(session, "Completed session allocation\n"); in iscsi_alloc_session()
2064 return session; in iscsi_alloc_session()
2068 int iscsi_add_session(struct iscsi_cls_session *session, unsigned int target_id) in iscsi_add_session() argument
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
2168 ISCSI_DBG_TRANS_SESSION(session, "Removing session\n"); in iscsi_remove_session()
2171 list_del(&session->sess_list); in iscsi_remove_session()
2177 if (!cancel_delayed_work(&session->recovery_work)) in iscsi_remove_session()
2185 spin_lock_irqsave(&session->lock, flags); in iscsi_remove_session()
2186 session->state = ISCSI_SESSION_FREE; in iscsi_remove_session()
2187 spin_unlock_irqrestore(&session->lock, flags); in iscsi_remove_session()
2189 scsi_target_unblock(&session->dev, SDEV_TRANSPORT_OFFLINE); in iscsi_remove_session()
2191 flush_work(&session->scan_work); in iscsi_remove_session()
2193 flush_work(&session->unbind_work); in iscsi_remove_session()
2194 __iscsi_unbind_session(&session->unbind_work); in iscsi_remove_session()
2197 err = device_for_each_child(&session->dev, NULL, in iscsi_remove_session()
2200 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_remove_session()
2204 transport_unregister_device(&session->dev); in iscsi_remove_session()
2206 ISCSI_DBG_TRANS_SESSION(session, "Completing session removal\n"); in iscsi_remove_session()
2207 device_del(&session->dev); in iscsi_remove_session()
2211 void iscsi_free_session(struct iscsi_cls_session *session) in iscsi_free_session() argument
2213 ISCSI_DBG_TRANS_SESSION(session, "Freeing session\n"); in iscsi_free_session()
2214 iscsi_session_event(session, ISCSI_KEVENT_DESTROY_SESSION); in iscsi_free_session()
2215 put_device(&session->dev); in iscsi_free_session()
2235 iscsi_create_conn(struct iscsi_cls_session *session, int dd_size, uint32_t cid) in iscsi_create_conn() argument
2237 struct iscsi_transport *transport = session->transport; in iscsi_create_conn()
2254 if (!get_device(&session->dev)) in iscsi_create_conn()
2257 dev_set_name(&conn->dev, "connection%d:%u", session->sid, cid); in iscsi_create_conn()
2258 conn->dev.parent = &session->dev; in iscsi_create_conn()
2262 iscsi_cls_session_printk(KERN_ERR, session, "could not " in iscsi_create_conn()
2276 put_device(&session->dev); in iscsi_create_conn()
2626 int iscsi_session_event(struct iscsi_cls_session *session, in iscsi_session_event() argument
2636 priv = iscsi_if_transport_lookup(session->transport); in iscsi_session_event()
2639 shost = iscsi_session_to_shost(session); in iscsi_session_event()
2643 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_session_event()
2651 ev->transport_handle = iscsi_handle(session->transport); in iscsi_session_event()
2657 ev->r.d_session.sid = session->sid; in iscsi_session_event()
2661 ev->r.c_session_ret.sid = session->sid; in iscsi_session_event()
2665 ev->r.unbind_session.sid = session->sid; in iscsi_session_event()
2668 iscsi_cls_session_printk(KERN_ERR, session, "Invalid event " in iscsi_session_event()
2680 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_session_event()
2685 ISCSI_DBG_TRANS_SESSION(session, "Completed handling event %d rc %d\n", in iscsi_session_event()
2698 struct iscsi_cls_session *session; in iscsi_if_create_session() local
2701 session = transport->create_session(ep, cmds_max, queue_depth, in iscsi_if_create_session()
2703 if (!session) in iscsi_if_create_session()
2706 session->creator = pid; in iscsi_if_create_session()
2707 shost = iscsi_session_to_shost(session); in iscsi_if_create_session()
2709 ev->r.c_session_ret.sid = session->sid; in iscsi_if_create_session()
2710 ISCSI_DBG_TRANS_SESSION(session, in iscsi_if_create_session()
2719 struct iscsi_cls_session *session; in iscsi_if_create_conn() local
2721 session = iscsi_session_lookup(ev->u.c_conn.sid); in iscsi_if_create_conn()
2722 if (!session) { in iscsi_if_create_conn()
2728 conn = transport->create_conn(session, ev->u.c_conn.cid); in iscsi_if_create_conn()
2730 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_if_create_conn()
2735 ev->r.c_conn_ret.sid = session->sid; in iscsi_if_create_conn()
2763 struct iscsi_cls_session *session; in iscsi_set_param() local
2766 session = iscsi_session_lookup(ev->u.set_param.sid); in iscsi_set_param()
2768 if (!conn || !session) in iscsi_set_param()
2774 if (!session->recovery_tmo_sysfs_override) in iscsi_set_param()
2775 session->recovery_tmo = value; in iscsi_set_param()
3373 struct iscsi_cls_session *session; in iscsi_logout_flashnode_sid() local
3389 session = iscsi_session_lookup(ev->u.logout_flashnode_sid.sid); in iscsi_logout_flashnode_sid()
3390 if (!session) { in iscsi_logout_flashnode_sid()
3397 err = transport->logout_flashnode_sid(session); in iscsi_logout_flashnode_sid()
3485 struct iscsi_cls_session *session; in iscsi_if_recv_msg() local
3526 session = iscsi_session_lookup(ev->u.d_session.sid); in iscsi_if_recv_msg()
3527 if (session) in iscsi_if_recv_msg()
3528 transport->destroy_session(session); in iscsi_if_recv_msg()
3533 session = iscsi_session_lookup(ev->u.d_session.sid); in iscsi_if_recv_msg()
3534 if (session) in iscsi_if_recv_msg()
3535 scsi_queue_work(iscsi_session_to_shost(session), in iscsi_if_recv_msg()
3536 &session->unbind_work); in iscsi_if_recv_msg()
3547 session = iscsi_session_lookup(ev->u.b_conn.sid); in iscsi_if_recv_msg()
3553 if (!session || !conn) { in iscsi_if_recv_msg()
3558 ev->r.retcode = transport->bind_conn(session, conn, in iscsi_if_recv_msg()
3940 struct iscsi_cls_session *session = \
3942 struct iscsi_transport *t = session->transport; \
3946 return t->get_session_param(session, param, buf); \
3999 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_state() local
4000 return sprintf(buf, "%s\n", iscsi_session_state_name(session->state)); in show_priv_session_state()
4008 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_creator() local
4009 return sprintf(buf, "%d\n", session->creator); in show_priv_session_creator()
4017 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_target_id() local
4018 return sprintf(buf, "%d\n", session->target_id); in show_priv_session_target_id()
4028 struct iscsi_cls_session *session = \
4030 if (session->field == -1) \
4032 return sprintf(buf, format"\n", session->field); \
4043 struct iscsi_cls_session *session = \
4045 if ((session->state == ISCSI_SESSION_FREE) || \
4046 (session->state == ISCSI_SESSION_FAILED)) \
4049 session->field = -1; \
4050 session->field##_sysfs_override = true; \
4055 session->field = val; \
4056 session->field##_sysfs_override = true; \
4122 struct iscsi_cls_session *session = transport_class_to_session(cdev); in iscsi_session_attr_is_visible() local
4123 struct iscsi_transport *t = session->transport; in iscsi_session_attr_is_visible()
4355 struct iscsi_cls_session *session; in iscsi_session_match() local
4362 session = iscsi_dev_to_session(dev); in iscsi_session_match()
4363 shost = iscsi_session_to_shost(session); in iscsi_session_match()
4377 struct iscsi_cls_session *session; in iscsi_conn_match() local
4386 session = iscsi_dev_to_session(conn->dev.parent); in iscsi_conn_match()
4387 shost = iscsi_session_to_shost(session); in iscsi_conn_match()