Lines Matching refs:session
1687 int iscsi_session_chkready(struct iscsi_cls_session *session) in iscsi_session_chkready() argument
1691 switch (session->state) { in iscsi_session_chkready()
1709 int iscsi_is_session_online(struct iscsi_cls_session *session) in iscsi_is_session_online() argument
1714 spin_lock_irqsave(&session->lock, flags); in iscsi_is_session_online()
1715 if (session->state == ISCSI_SESSION_LOGGED_IN) in iscsi_is_session_online()
1717 spin_unlock_irqrestore(&session->lock, flags); in iscsi_is_session_online()
1724 struct iscsi_cls_session *session = iscsi_dev_to_session(dev); in iscsi_session_release() local
1727 shost = iscsi_session_to_shost(session); in iscsi_session_release()
1729 ISCSI_DBG_TRANS_SESSION(session, "Completing session release\n"); in iscsi_session_release()
1730 kfree(session); in iscsi_session_release()
1767 struct iscsi_cls_session *session; in iscsi_user_scan_session() local
1776 session = iscsi_dev_to_session(dev); in iscsi_user_scan_session()
1778 ISCSI_DBG_TRANS_SESSION(session, "Scanning session\n"); in iscsi_user_scan_session()
1780 shost = iscsi_session_to_shost(session); in iscsi_user_scan_session()
1784 spin_lock_irqsave(&session->lock, flags); in iscsi_user_scan_session()
1785 if (session->state != ISCSI_SESSION_LOGGED_IN) { in iscsi_user_scan_session()
1786 spin_unlock_irqrestore(&session->lock, flags); in iscsi_user_scan_session()
1789 id = session->target_id; in iscsi_user_scan_session()
1790 spin_unlock_irqrestore(&session->lock, flags); in iscsi_user_scan_session()
1797 scsi_scan_target(&session->dev, 0, id, in iscsi_user_scan_session()
1799 spin_lock_irqsave(&session->lock, flags); in iscsi_user_scan_session()
1800 session->target_state = ISCSI_SESSION_TARGET_SCANNED; in iscsi_user_scan_session()
1801 spin_unlock_irqrestore(&session->lock, flags); in iscsi_user_scan_session()
1807 ISCSI_DBG_TRANS_SESSION(session, "Completed session scan\n"); in iscsi_user_scan_session()
1827 struct iscsi_cls_session *session = in iscsi_scan_session() local
1836 iscsi_user_scan_session(&session->dev, &scan_data); in iscsi_scan_session()
1850 struct iscsi_cls_session *session = in iscsi_block_scsi_eh() local
1855 spin_lock_irqsave(&session->lock, flags); in iscsi_block_scsi_eh()
1856 while (session->state != ISCSI_SESSION_LOGGED_IN) { in iscsi_block_scsi_eh()
1857 if (session->state == ISCSI_SESSION_FREE) { in iscsi_block_scsi_eh()
1861 spin_unlock_irqrestore(&session->lock, flags); in iscsi_block_scsi_eh()
1863 spin_lock_irqsave(&session->lock, flags); in iscsi_block_scsi_eh()
1865 spin_unlock_irqrestore(&session->lock, flags); in iscsi_block_scsi_eh()
1872 struct iscsi_cls_session *session = in session_recovery_timedout() local
1877 iscsi_cls_session_printk(KERN_INFO, session, in session_recovery_timedout()
1879 session->recovery_tmo); in session_recovery_timedout()
1881 spin_lock_irqsave(&session->lock, flags); in session_recovery_timedout()
1882 switch (session->state) { in session_recovery_timedout()
1884 session->state = ISCSI_SESSION_FREE; in session_recovery_timedout()
1889 spin_unlock_irqrestore(&session->lock, flags); in session_recovery_timedout()
1892 spin_unlock_irqrestore(&session->lock, flags); in session_recovery_timedout()
1894 ISCSI_DBG_TRANS_SESSION(session, "Unblocking SCSI target\n"); in session_recovery_timedout()
1895 scsi_target_unblock(&session->dev, SDEV_TRANSPORT_OFFLINE); in session_recovery_timedout()
1896 ISCSI_DBG_TRANS_SESSION(session, "Completed unblocking SCSI target\n"); in session_recovery_timedout()
1898 if (session->transport->session_recovery_timedout) in session_recovery_timedout()
1899 session->transport->session_recovery_timedout(session); in session_recovery_timedout()
1904 struct iscsi_cls_session *session = in __iscsi_unblock_session() local
1909 ISCSI_DBG_TRANS_SESSION(session, "Unblocking session\n"); in __iscsi_unblock_session()
1911 cancel_delayed_work_sync(&session->recovery_work); in __iscsi_unblock_session()
1912 spin_lock_irqsave(&session->lock, flags); in __iscsi_unblock_session()
1913 session->state = ISCSI_SESSION_LOGGED_IN; in __iscsi_unblock_session()
1914 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unblock_session()
1916 scsi_target_unblock(&session->dev, SDEV_RUNNING); in __iscsi_unblock_session()
1917 ISCSI_DBG_TRANS_SESSION(session, "Completed unblocking session\n"); in __iscsi_unblock_session()
1926 void iscsi_unblock_session(struct iscsi_cls_session *session) in iscsi_unblock_session() argument
1928 if (!cancel_work_sync(&session->block_work)) in iscsi_unblock_session()
1929 cancel_delayed_work_sync(&session->recovery_work); in iscsi_unblock_session()
1931 queue_work(session->workq, &session->unblock_work); in iscsi_unblock_session()
1937 flush_work(&session->unblock_work); in iscsi_unblock_session()
1943 struct iscsi_cls_session *session = in __iscsi_block_session() local
1948 ISCSI_DBG_TRANS_SESSION(session, "Blocking session\n"); in __iscsi_block_session()
1949 spin_lock_irqsave(&session->lock, flags); in __iscsi_block_session()
1950 session->state = ISCSI_SESSION_FAILED; in __iscsi_block_session()
1951 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_block_session()
1952 scsi_target_block(&session->dev); in __iscsi_block_session()
1953 ISCSI_DBG_TRANS_SESSION(session, "Completed SCSI target blocking\n"); in __iscsi_block_session()
1954 if (session->recovery_tmo >= 0) in __iscsi_block_session()
1955 queue_delayed_work(session->workq, in __iscsi_block_session()
1956 &session->recovery_work, in __iscsi_block_session()
1957 session->recovery_tmo * HZ); in __iscsi_block_session()
1960 void iscsi_block_session(struct iscsi_cls_session *session) in iscsi_block_session() argument
1962 queue_work(session->workq, &session->block_work); in iscsi_block_session()
1968 struct iscsi_cls_session *session = in __iscsi_unbind_session() local
1971 struct Scsi_Host *shost = iscsi_session_to_shost(session); in __iscsi_unbind_session()
1977 ISCSI_DBG_TRANS_SESSION(session, "Unbinding session\n"); in __iscsi_unbind_session()
1981 spin_lock_irqsave(&session->lock, flags); in __iscsi_unbind_session()
1982 if (session->target_state == ISCSI_SESSION_TARGET_ALLOCATED) { in __iscsi_unbind_session()
1984 } else if (session->target_state != ISCSI_SESSION_TARGET_SCANNED) { in __iscsi_unbind_session()
1985 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unbind_session()
1987 ISCSI_DBG_TRANS_SESSION(session, in __iscsi_unbind_session()
1992 session->target_state = ISCSI_SESSION_TARGET_UNBINDING; in __iscsi_unbind_session()
1993 target_id = session->target_id; in __iscsi_unbind_session()
1994 session->target_id = ISCSI_MAX_TARGET; in __iscsi_unbind_session()
1995 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unbind_session()
1999 scsi_remove_target(&session->dev); in __iscsi_unbind_session()
2001 if (session->ida_used) in __iscsi_unbind_session()
2004 iscsi_session_event(session, ISCSI_KEVENT_UNBIND_SESSION); in __iscsi_unbind_session()
2005 ISCSI_DBG_TRANS_SESSION(session, "Completed target removal\n"); in __iscsi_unbind_session()
2007 spin_lock_irqsave(&session->lock, flags); in __iscsi_unbind_session()
2008 session->target_state = ISCSI_SESSION_TARGET_UNBOUND; in __iscsi_unbind_session()
2009 spin_unlock_irqrestore(&session->lock, flags); in __iscsi_unbind_session()
2014 struct iscsi_cls_session *session = in __iscsi_destroy_session() local
2017 session->transport->destroy_session(session); in __iscsi_destroy_session()
2024 struct iscsi_cls_session *session; in iscsi_alloc_session() local
2026 session = kzalloc(sizeof(*session) + dd_size, in iscsi_alloc_session()
2028 if (!session) in iscsi_alloc_session()
2031 session->transport = transport; in iscsi_alloc_session()
2032 session->creator = -1; in iscsi_alloc_session()
2033 session->recovery_tmo = 120; in iscsi_alloc_session()
2034 session->recovery_tmo_sysfs_override = false; in iscsi_alloc_session()
2035 session->state = ISCSI_SESSION_FREE; in iscsi_alloc_session()
2036 INIT_DELAYED_WORK(&session->recovery_work, session_recovery_timedout); in iscsi_alloc_session()
2037 INIT_LIST_HEAD(&session->sess_list); in iscsi_alloc_session()
2038 INIT_WORK(&session->unblock_work, __iscsi_unblock_session); in iscsi_alloc_session()
2039 INIT_WORK(&session->block_work, __iscsi_block_session); in iscsi_alloc_session()
2040 INIT_WORK(&session->unbind_work, __iscsi_unbind_session); in iscsi_alloc_session()
2041 INIT_WORK(&session->scan_work, iscsi_scan_session); in iscsi_alloc_session()
2042 INIT_WORK(&session->destroy_work, __iscsi_destroy_session); in iscsi_alloc_session()
2043 spin_lock_init(&session->lock); in iscsi_alloc_session()
2047 session->dev.parent = &shost->shost_gendev; in iscsi_alloc_session()
2048 session->dev.release = iscsi_session_release; in iscsi_alloc_session()
2049 device_initialize(&session->dev); in iscsi_alloc_session()
2051 session->dd_data = &session[1]; in iscsi_alloc_session()
2053 ISCSI_DBG_TRANS_SESSION(session, "Completed session allocation\n"); in iscsi_alloc_session()
2054 return session; in iscsi_alloc_session()
2058 int iscsi_add_session(struct iscsi_cls_session *session, unsigned int target_id) in iscsi_add_session() argument
2060 struct Scsi_Host *shost = iscsi_session_to_shost(session); in iscsi_add_session()
2065 session->sid = atomic_add_return(1, &iscsi_session_nr); in iscsi_add_session()
2067 session->workq = alloc_workqueue("iscsi_ctrl_%d:%d", in iscsi_add_session()
2069 shost->host_no, session->sid); in iscsi_add_session()
2070 if (!session->workq) in iscsi_add_session()
2077 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_add_session()
2082 session->target_id = (unsigned int)id; in iscsi_add_session()
2083 session->ida_used = true; in iscsi_add_session()
2085 session->target_id = target_id; in iscsi_add_session()
2086 spin_lock_irqsave(&session->lock, flags); in iscsi_add_session()
2087 session->target_state = ISCSI_SESSION_TARGET_ALLOCATED; in iscsi_add_session()
2088 spin_unlock_irqrestore(&session->lock, flags); in iscsi_add_session()
2090 dev_set_name(&session->dev, "session%u", session->sid); in iscsi_add_session()
2091 err = device_add(&session->dev); in iscsi_add_session()
2093 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_add_session()
2097 err = transport_register_device(&session->dev); in iscsi_add_session()
2099 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_add_session()
2105 list_add(&session->sess_list, &sesslist); in iscsi_add_session()
2108 iscsi_session_event(session, ISCSI_KEVENT_CREATE_SESSION); in iscsi_add_session()
2109 ISCSI_DBG_TRANS_SESSION(session, "Completed session adding\n"); in iscsi_add_session()
2113 device_del(&session->dev); in iscsi_add_session()
2115 if (session->ida_used) in iscsi_add_session()
2116 ida_free(&iscsi_sess_ida, session->target_id); in iscsi_add_session()
2118 destroy_workqueue(session->workq); in iscsi_add_session()
2136 struct iscsi_cls_session *session; in iscsi_create_session() local
2138 session = iscsi_alloc_session(shost, transport, dd_size); in iscsi_create_session()
2139 if (!session) in iscsi_create_session()
2142 if (iscsi_add_session(session, target_id)) { in iscsi_create_session()
2143 iscsi_free_session(session); in iscsi_create_session()
2146 return session; in iscsi_create_session()
2174 void iscsi_remove_session(struct iscsi_cls_session *session) in iscsi_remove_session() argument
2179 ISCSI_DBG_TRANS_SESSION(session, "Removing session\n"); in iscsi_remove_session()
2182 if (!list_empty(&session->sess_list)) in iscsi_remove_session()
2183 list_del(&session->sess_list); in iscsi_remove_session()
2186 if (!cancel_work_sync(&session->block_work)) in iscsi_remove_session()
2187 cancel_delayed_work_sync(&session->recovery_work); in iscsi_remove_session()
2188 cancel_work_sync(&session->unblock_work); in iscsi_remove_session()
2195 spin_lock_irqsave(&session->lock, flags); in iscsi_remove_session()
2196 session->state = ISCSI_SESSION_FREE; in iscsi_remove_session()
2197 spin_unlock_irqrestore(&session->lock, flags); in iscsi_remove_session()
2199 scsi_target_unblock(&session->dev, SDEV_TRANSPORT_OFFLINE); in iscsi_remove_session()
2204 flush_work(&session->scan_work); in iscsi_remove_session()
2206 flush_work(&session->unbind_work); in iscsi_remove_session()
2207 __iscsi_unbind_session(&session->unbind_work); in iscsi_remove_session()
2210 err = device_for_each_child(&session->dev, NULL, in iscsi_remove_session()
2213 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_remove_session()
2217 transport_unregister_device(&session->dev); in iscsi_remove_session()
2219 destroy_workqueue(session->workq); in iscsi_remove_session()
2221 ISCSI_DBG_TRANS_SESSION(session, "Completing session removal\n"); in iscsi_remove_session()
2222 device_del(&session->dev); in iscsi_remove_session()
2249 struct iscsi_cls_session *session = iscsi_conn_to_session(conn); in iscsi_ep_disconnect() local
2255 if (!conn->ep || !session->transport->ep_disconnect) in iscsi_ep_disconnect()
2261 session->transport->unbind_conn(conn, is_active); in iscsi_ep_disconnect()
2262 session->transport->ep_disconnect(ep); in iscsi_ep_disconnect()
2341 struct iscsi_cls_session *session = iscsi_conn_to_session(conn); in iscsi_cleanup_conn_work_fn() local
2358 if (session->recovery_tmo > 0) in iscsi_cleanup_conn_work_fn()
2359 session->recovery_tmo = 0; in iscsi_cleanup_conn_work_fn()
2392 void iscsi_force_destroy_session(struct iscsi_cls_session *session) in iscsi_force_destroy_session() argument
2394 struct iscsi_transport *transport = session->transport; in iscsi_force_destroy_session()
2400 if (list_empty(&session->sess_list)) { in iscsi_force_destroy_session()
2410 device_for_each_child(&session->dev, NULL, in iscsi_force_destroy_session()
2412 transport->destroy_session(session); in iscsi_force_destroy_session()
2416 void iscsi_free_session(struct iscsi_cls_session *session) in iscsi_free_session() argument
2418 ISCSI_DBG_TRANS_SESSION(session, "Freeing session\n"); in iscsi_free_session()
2419 iscsi_session_event(session, ISCSI_KEVENT_DESTROY_SESSION); in iscsi_free_session()
2420 put_device(&session->dev); in iscsi_free_session()
2431 iscsi_alloc_conn(struct iscsi_cls_session *session, int dd_size, uint32_t cid) in iscsi_alloc_conn() argument
2433 struct iscsi_transport *transport = session->transport; in iscsi_alloc_conn()
2451 if (!get_device(&session->dev)) in iscsi_alloc_conn()
2454 dev_set_name(&conn->dev, "connection%d:%u", session->sid, cid); in iscsi_alloc_conn()
2456 conn->dev.parent = &session->dev; in iscsi_alloc_conn()
2478 struct iscsi_cls_session *session = iscsi_dev_to_session(conn->dev.parent); in iscsi_add_conn() local
2482 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_add_conn()
2488 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_add_conn()
2881 int iscsi_session_event(struct iscsi_cls_session *session, in iscsi_session_event() argument
2891 priv = iscsi_if_transport_lookup(session->transport); in iscsi_session_event()
2894 shost = iscsi_session_to_shost(session); in iscsi_session_event()
2898 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_session_event()
2906 ev->transport_handle = iscsi_handle(session->transport); in iscsi_session_event()
2912 ev->r.d_session.sid = session->sid; in iscsi_session_event()
2916 ev->r.c_session_ret.sid = session->sid; in iscsi_session_event()
2920 ev->r.unbind_session.sid = session->sid; in iscsi_session_event()
2923 iscsi_cls_session_printk(KERN_ERR, session, "Invalid event " in iscsi_session_event()
2935 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_session_event()
2940 ISCSI_DBG_TRANS_SESSION(session, "Completed handling event %d rc %d\n", in iscsi_session_event()
2953 struct iscsi_cls_session *session; in iscsi_if_create_session() local
2956 session = transport->create_session(ep, cmds_max, queue_depth, in iscsi_if_create_session()
2958 if (!session) in iscsi_if_create_session()
2961 session->creator = pid; in iscsi_if_create_session()
2962 shost = iscsi_session_to_shost(session); in iscsi_if_create_session()
2964 ev->r.c_session_ret.sid = session->sid; in iscsi_if_create_session()
2965 ISCSI_DBG_TRANS_SESSION(session, in iscsi_if_create_session()
2974 struct iscsi_cls_session *session; in iscsi_if_create_conn() local
2976 session = iscsi_session_lookup(ev->u.c_conn.sid); in iscsi_if_create_conn()
2977 if (!session) { in iscsi_if_create_conn()
2983 conn = transport->create_conn(session, ev->u.c_conn.cid); in iscsi_if_create_conn()
2985 iscsi_cls_session_printk(KERN_ERR, session, in iscsi_if_create_conn()
2990 ev->r.c_conn_ret.sid = session->sid; in iscsi_if_create_conn()
3020 struct iscsi_cls_session *session; in iscsi_if_set_param() local
3026 session = iscsi_session_lookup(ev->u.set_param.sid); in iscsi_if_set_param()
3028 if (!conn || !session) in iscsi_if_set_param()
3034 if (!session->recovery_tmo_sysfs_override) in iscsi_if_set_param()
3035 session->recovery_tmo = value; in iscsi_if_set_param()
3668 struct iscsi_cls_session *session; in iscsi_logout_flashnode_sid() local
3684 session = iscsi_session_lookup(ev->u.logout_flashnode_sid.sid); in iscsi_logout_flashnode_sid()
3685 if (!session) { in iscsi_logout_flashnode_sid()
3692 err = transport->logout_flashnode_sid(session); in iscsi_logout_flashnode_sid()
3775 struct iscsi_cls_session *session; in iscsi_if_transport_conn() local
3830 session = iscsi_session_lookup(ev->u.b_conn.sid); in iscsi_if_transport_conn()
3831 if (!session) { in iscsi_if_transport_conn()
3836 ev->r.retcode = transport->bind_conn(session, conn, in iscsi_if_transport_conn()
3892 struct iscsi_cls_session *session; in iscsi_if_recv_msg() local
3936 session = iscsi_session_lookup(ev->u.d_session.sid); in iscsi_if_recv_msg()
3937 if (!session) in iscsi_if_recv_msg()
3942 transport->destroy_session(session); in iscsi_if_recv_msg()
3945 session = iscsi_session_lookup(ev->u.d_session.sid); in iscsi_if_recv_msg()
3946 if (!session) in iscsi_if_recv_msg()
3955 list_del_init(&session->sess_list); in iscsi_if_recv_msg()
3958 queue_work(system_unbound_wq, &session->destroy_work); in iscsi_if_recv_msg()
3962 session = iscsi_session_lookup(ev->u.d_session.sid); in iscsi_if_recv_msg()
3963 if (session) in iscsi_if_recv_msg()
3964 queue_work(session->workq, &session->unbind_work); in iscsi_if_recv_msg()
4341 struct iscsi_cls_session *session = \
4343 struct iscsi_transport *t = session->transport; \
4347 return t->get_session_param(session, param, buf); \
4400 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_target_state() local
4403 iscsi_session_target_state_name[session->target_state]); in show_priv_session_target_state()
4413 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_state() local
4414 return sysfs_emit(buf, "%s\n", iscsi_session_state_name(session->state)); in show_priv_session_state()
4422 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_creator() local
4423 return sysfs_emit(buf, "%d\n", session->creator); in show_priv_session_creator()
4431 struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); in show_priv_session_target_id() local
4432 return sysfs_emit(buf, "%d\n", session->target_id); in show_priv_session_target_id()
4442 struct iscsi_cls_session *session = \
4444 if (session->field == -1) \
4446 return sysfs_emit(buf, format"\n", session->field); \
4457 struct iscsi_cls_session *session = \
4459 if ((session->state == ISCSI_SESSION_FREE) || \
4460 (session->state == ISCSI_SESSION_FAILED)) \
4463 session->field = -1; \
4464 session->field##_sysfs_override = true; \
4469 session->field = val; \
4470 session->field##_sysfs_override = true; \
4537 struct iscsi_cls_session *session = transport_class_to_session(cdev); in iscsi_session_attr_is_visible() local
4538 struct iscsi_transport *t = session->transport; in iscsi_session_attr_is_visible()
4772 struct iscsi_cls_session *session; in iscsi_session_match() local
4779 session = iscsi_dev_to_session(dev); in iscsi_session_match()
4780 shost = iscsi_session_to_shost(session); in iscsi_session_match()
4794 struct iscsi_cls_session *session; in iscsi_conn_match() local
4803 session = iscsi_dev_to_session(conn->dev.parent); in iscsi_conn_match()
4804 shost = iscsi_session_to_shost(session); in iscsi_conn_match()