Lines Matching defs:conn

416 	connection_t *conn;
420 TAILQ_FOREACH(conn, &sess->s_conn_list, c_connections)
421 if (conn->c_id == id) {
424 return conn;
477 * conn The connection to terminate
484 kill_connection(connection_t *conn, uint32_t status, int logout, bool recover)
486 session_t *sess = conn->c_session;
489 DEBC(conn, 1, ("Kill_connection: terminating=%d, status=%d, logout=%d, "
491 conn->c_terminating, status, logout, conn->c_state));
495 !conn->c_destroy &&
496 conn->c_recover > MAX_RECOVERY_ATTEMPTS) {
497 DEBC(conn, 1, ("Kill_connection: Too many recovery attempts, "
499 conn->c_destroy = TRUE;
502 if (!recover || conn->c_destroy) {
504 if (conn->c_in_session) {
505 conn->c_in_session = FALSE;
506 TAILQ_REMOVE(&sess->s_conn_list, conn, c_connections);
510 if (!conn->c_destroy) {
511 DEBC(conn, 1, ("Kill_connection setting destroy flag\n"));
512 conn->c_destroy = TRUE;
516 mutex_enter(&conn->c_lock);
517 terminating = conn->c_terminating;
519 conn->c_terminating = status;
520 mutex_exit(&conn->c_lock);
526 KASSERT(conn->c_state != ST_FULL_FEATURE);
527 DEBC(conn, 1, ("Kill_connection exiting (already terminating)\n"));
531 if (conn->c_state == ST_FULL_FEATURE) {
533 conn->c_state = ST_WINDING_DOWN;
552 mutex_enter(&conn->c_lock);
553 conn->c_usecount++;
554 mutex_exit(&conn->c_lock);
558 DEBC(conn, 1, ("Send_logout for reason %d\n", logout));
560 connection_timeout_start(conn, CONNECTION_TIMEOUT);
562 if (!send_logout(conn, conn, logout, FALSE)) {
563 mutex_enter(&conn->c_lock);
564 conn->c_usecount--;
565 conn->c_terminating = ISCSI_STATUS_SUCCESS;
566 mutex_exit(&conn->c_lock);
580 mutex_enter(&conn->c_lock);
581 conn->c_usecount--;
582 mutex_exit(&conn->c_lock);
587 conn->c_state = ST_SETTLING;
592 mutex_enter(&conn->c_lock);
593 cv_broadcast(&conn->c_conn_cv);
594 mutex_exit(&conn->c_lock);
596 DEBC(conn, 5, ("kill_connection returns\n"));
615 connection_t *conn;
655 conn = NULL;
657 conn = assign_connection(sess, FALSE);
661 if (conn != NULL)
662 kill_connection(conn, status, logout, TRUE);
690 while ((conn = TAILQ_FIRST(&sess->s_conn_list)) != NULL) {
691 kill_connection(conn, status, logout, FALSE);
720 connection_t *conn;
736 conn = malloc(sizeof(*conn), M_DEVBUF, M_WAITOK | M_ZERO);
737 if (conn == NULL) {
747 rc = get_socket(par->socket, &conn->c_sock);
753 free(conn, M_DEVBUF);
758 DEBC(conn, 1, ("get_socket: par_sock=%d, fdesc=%p\n",
759 par->socket, conn->c_sock));
767 par->connection_id = conn->c_id = sess->s_conn_id;
769 DEB(99, ("Connection ID = %d\n", conn->c_id));
771 conn->c_session = sess;
773 TAILQ_INIT(&conn->c_ccbs_waiting);
774 TAILQ_INIT(&conn->c_pdus_to_send);
775 TAILQ_INIT(&conn->c_pdu_pool);
777 mutex_init(&conn->c_lock, MUTEX_DEFAULT, IPL_BIO);
778 cv_init(&conn->c_conn_cv, "conn");
779 cv_init(&conn->c_pdu_cv, "pdupool");
780 cv_init(&conn->c_ccb_cv, "ccbwait");
781 cv_init(&conn->c_idle_cv, "idle");
782 rw_init(&conn->c_sock_rw);
784 callout_init(&conn->c_timeout, CALLOUT_MPSAFE);
785 callout_setfunc(&conn->c_timeout, connection_timeout_co, conn);
786 conn->c_idle_timeout_val = CONNECTION_IDLE_TIMEOUT;
788 init_sernum(&conn->c_StatSN_buf);
789 create_pdus(conn);
791 conn->c_threadobj = l;
792 conn->c_login_par = par;
796 conn, &conn->c_rcvproc,
800 release_socket(conn->c_sock);
801 rw_destroy(&conn->c_sock_rw);
802 callout_destroy(&conn->c_timeout);
803 cv_destroy(&conn->c_idle_cv);
804 cv_destroy(&conn->c_ccb_cv);
805 cv_destroy(&conn->c_pdu_cv);
806 cv_destroy(&conn->c_conn_cv);
807 mutex_destroy(&conn->c_lock);
808 free(conn, M_DEVBUF);
814 conn, &conn->c_sendproc,
818 conn->c_terminating = ISCSI_STATUS_NO_RESOURCES;
824 DEBC(conn, 1, ("Closing Socket %p\n", conn->c_sock));
825 mutex_enter(&conn->c_sock->f_lock);
826 conn->c_sock->f_count += 1;
827 mutex_exit(&conn->c_sock->f_lock);
828 closef(conn->c_sock);
833 release_socket(conn->c_sock);
834 callout_destroy(&conn->c_timeout);
835 rw_destroy(&conn->c_sock_rw);
836 cv_destroy(&conn->c_idle_cv);
837 cv_destroy(&conn->c_ccb_cv);
838 cv_destroy(&conn->c_pdu_cv);
839 cv_destroy(&conn->c_conn_cv);
840 mutex_destroy(&conn->c_lock);
841 free(conn, M_DEVBUF);
852 if ((rc = send_login(conn)) != 0) {
853 DEBC(conn, 0, ("Login failed (rc %d)\n", rc));
855 kill_connection(conn, rc, NO_LOGOUT, FALSE);
863 DEBC(conn, 0, ("Session terminating\n"));
864 kill_connection(conn, rc, NO_LOGOUT, FALSE);
868 conn->c_state = ST_FULL_FEATURE;
869 TAILQ_INSERT_TAIL(&sess->s_conn_list, conn, c_connections);
870 conn->c_in_session = TRUE;
873 sess->s_mru_connection = conn;
876 DEBC(conn, 5, ("Connection created successfully!\n"));
887 * conn IN: The connection
897 connection_t *conn, struct lwp *l)
906 conn->c_id, conn->c_session->s_id,
907 conn->c_session->s_ErrorRecoveryLevel));
923 rw_enter(&conn->c_sock_rw, RW_WRITER);
924 if (conn->c_sock != NULL) {
925 closef(conn->c_sock);
926 conn->c_sock = NULL;
928 rc = get_socket(par->socket, &conn->c_sock);
929 rw_exit(&conn->c_sock_rw);
939 DEBC(conn, 1, ("get_socket: par_sock=%d, fdesc=%p\n",
940 par->socket, conn->c_sock));
942 conn->c_threadobj = l;
943 conn->c_login_par = par;
944 conn->c_terminating = ISCSI_STATUS_SUCCESS;
945 conn->c_recover++;
946 conn->c_num_timeouts = 0;
947 conn->c_state = ST_SEC_NEG;
948 conn->c_HeaderDigest = 0;
949 conn->c_DataDigest = 0;
955 mutex_enter(&conn->c_lock);
956 while ((ccb = TAILQ_FIRST(&conn->c_ccbs_waiting)) != NULL) {
960 init_sernum(&conn->c_StatSN_buf);
961 cv_broadcast(&conn->c_idle_cv);
962 mutex_exit(&conn->c_lock);
964 if ((rc = send_login(conn)) != 0) {
965 DEBC(conn, 0, ("Re-Login failed (rc %d)\n", rc));
971 kill_connection(conn, rc, NO_LOGOUT, FALSE);
976 DEBC(conn, 9, ("Re-Login successful\n"));
979 conn->c_state = ST_FULL_FEATURE;
980 sess->s_mru_connection = conn;
984 mutex_enter(&conn->c_lock);
986 mutex_exit(&conn->c_lock);
988 rc = send_task_management(conn, ccb, NULL, TASK_REASSIGN);
997 DEBC(conn, 0, ("Resend ccb %p (%d) - updating CmdSN old %u, new %u\n",
1002 DEBC(conn, 0, ("Resend ccb %p (%d) - CmdSN %u\n",
1008 DEBC(conn, 0, ("Resend ccb %p (%d) CmdSN %u - reassigned\n",
1018 DEBC(conn, 0, ("Connection ReCreated successfully - status %d\n",
1259 connection_t *conn;
1273 if ((conn = find_connection(session, par->connection_id)) == NULL) {
1281 kill_connection(conn, ISCSI_STATUS_LOGOUT, LOGOUT_CONNECTION,
1301 connection_t *conn;
1313 if ((conn = find_connection(sess, par->connection_id)) == NULL) {
1320 if (!conn->c_terminating) {
1322 DEBC(conn, 0, ("Connection is alive\n"));
1329 recreate_connection(par, sess, conn, l);
1526 connection_t *conn;
1537 conn = find_connection(sess, par->connection_id);
1539 conn = TAILQ_FIRST(&sess->s_conn_list);
1541 par->status = (conn == NULL) ? ISCSI_STATUS_INVALID_CONNECTION_ID :
1605 * conn The connection the problem is associated with
1611 handle_connection_error(connection_t *conn, uint32_t status, int dologout)
1613 DEBC(conn, 0, ("*** Connection Error, status=%d, logout=%d, state=%d\n",
1614 status, dologout, conn->c_state));
1616 if (!conn->c_terminating && conn->c_state <= ST_LOGOUT_SENT) {
1618 if (dologout >= 0 && conn->c_state >= ST_WINDING_DOWN) {
1621 kill_connection(conn, status, dologout, TRUE);
1629 add_connection_cleanup(connection_t *conn)
1634 if (conn->c_in_session) {
1635 sess = conn->c_session;
1636 conn->c_in_session = FALSE;
1637 conn->c_session = NULL;
1638 TAILQ_REMOVE(&sess->s_conn_list, conn, c_connections);
1641 TAILQ_INSERT_TAIL(&iscsi_cleanupc_list, conn, c_connections);
1652 connection_t *conn = par;
1655 if (conn->c_timedout == TOUT_ARMED) {
1656 conn->c_timedout = TOUT_QUEUED;
1657 TAILQ_INSERT_TAIL(&iscsi_timeout_conn_list, conn, c_tchain);
1664 connection_timeout_start(connection_t *conn, int ticks)
1667 if (conn->c_timedout != TOUT_QUEUED) {
1668 conn->c_timedout = TOUT_ARMED;
1669 callout_schedule(&conn->c_timeout, ticks);
1675 connection_timeout_stop(connection_t *conn)
1677 callout_stop(&conn->c_timeout);
1679 if (conn->c_timedout == TOUT_QUEUED)
1680 TAILQ_REMOVE(&iscsi_timeout_conn_list, conn, c_tchain);
1682 while (conn->c_timedout == TOUT_BUSY)
1685 conn->c_timedout = TOUT_NONE;
1739 connection_t *conn, *nxtc;
1745 TAILQ_FOREACH_SAFE(conn, &iscsi_cleanupc_list, c_connections, nxtc) {
1747 TAILQ_REMOVE(&iscsi_cleanupc_list, conn, c_connections);
1750 sess = conn->c_session;
1756 DEBC(conn, 5, ("Cleanup: Waiting for threads to exit\n"));
1758 mutex_enter(&conn->c_lock);
1759 while (conn->c_sendproc || conn->c_rcvproc)
1760 kpause("threads", false, hz, &conn->c_lock);
1762 for (s=1; conn->c_usecount > 0 && s < 3; ++s)
1763 kpause("usecount", false, hz, &conn->c_lock);
1765 if (conn->c_usecount > 0) {
1766 DEBC(conn, 5, ("Cleanup: %d CCBs busy\n", conn->c_usecount));
1767 mutex_exit(&conn->c_lock);
1770 TAILQ_INSERT_HEAD(&iscsi_cleanupc_list, conn, c_connections);
1773 mutex_exit(&conn->c_lock);
1775 KASSERT(!conn->c_in_session);
1777 callout_halt(&conn->c_timeout, NULL);
1778 closef(conn->c_sock);
1779 callout_destroy(&conn->c_timeout);
1780 rw_destroy(&conn->c_sock_rw);
1781 cv_destroy(&conn->c_idle_cv);
1782 cv_destroy(&conn->c_ccb_cv);
1783 cv_destroy(&conn->c_pdu_cv);
1784 cv_destroy(&conn->c_conn_cv);
1785 mutex_destroy(&conn->c_lock);
1786 free(conn, M_DEVBUF);
1849 while ((conn = TAILQ_FIRST(&iscsi_timeout_conn_list)) != NULL) {
1850 TAILQ_REMOVE(&iscsi_timeout_conn_list, conn, c_tchain);
1851 KASSERT(conn->c_timedout == TOUT_QUEUED);
1852 conn->c_timedout = TOUT_BUSY;
1854 connection_timeout(conn);
1856 if (conn->c_timedout == TOUT_BUSY)
1857 conn->c_timedout = TOUT_NONE;