Lines Matching refs:iser_conn
464 struct iser_conn *iser_conn = container_of(ib_conn, struct iser_conn, in iser_create_ib_conn_res() local
503 iser_conn->max_cmds = in iser_create_ib_conn_res()
508 iser_conn->max_cmds = in iser_create_ib_conn_res()
512 iser_conn->max_cmds = in iser_create_ib_conn_res()
592 static int iser_conn_state_comp_exch(struct iser_conn *iser_conn, in iser_conn_state_comp_exch() argument
598 ret = (iser_conn->state == comp); in iser_conn_state_comp_exch()
600 iser_conn->state = exch; in iser_conn_state_comp_exch()
607 struct iser_conn *iser_conn; in iser_release_work() local
609 iser_conn = container_of(work, struct iser_conn, release_work); in iser_release_work()
612 wait_for_completion(&iser_conn->stop_completion); in iser_release_work()
614 wait_for_completion(&iser_conn->ib_completion); in iser_release_work()
616 mutex_lock(&iser_conn->state_mutex); in iser_release_work()
617 iser_conn->state = ISER_CONN_DOWN; in iser_release_work()
618 mutex_unlock(&iser_conn->state_mutex); in iser_release_work()
620 iser_conn_release(iser_conn); in iser_release_work()
634 static void iser_free_ib_conn_res(struct iser_conn *iser_conn, in iser_free_ib_conn_res() argument
637 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_free_ib_conn_res()
641 iser_conn, ib_conn->cma_id, ib_conn->qp); in iser_free_ib_conn_res()
650 if (iser_conn->rx_descs) in iser_free_ib_conn_res()
651 iser_free_rx_descriptors(iser_conn); in iser_free_ib_conn_res()
663 void iser_conn_release(struct iser_conn *iser_conn) in iser_conn_release() argument
665 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_conn_release()
668 list_del(&iser_conn->conn_list); in iser_conn_release()
671 mutex_lock(&iser_conn->state_mutex); in iser_conn_release()
673 if (iser_conn->state != ISER_CONN_DOWN) { in iser_conn_release()
675 iser_conn, iser_conn->state); in iser_conn_release()
676 iscsi_destroy_endpoint(iser_conn->ep); in iser_conn_release()
677 iser_conn->state = ISER_CONN_DOWN; in iser_conn_release()
683 iser_free_ib_conn_res(iser_conn, true); in iser_conn_release()
684 mutex_unlock(&iser_conn->state_mutex); in iser_conn_release()
691 kfree(iser_conn); in iser_conn_release()
698 int iser_conn_terminate(struct iser_conn *iser_conn) in iser_conn_terminate() argument
700 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_conn_terminate()
705 if (!iser_conn_state_comp_exch(iser_conn, ISER_CONN_UP, in iser_conn_terminate()
709 iser_info("iser_conn %p state %d\n", iser_conn, iser_conn->state); in iser_conn_terminate()
712 if (iser_conn->iscsi_conn) in iser_conn_terminate()
713 iscsi_suspend_queue(iser_conn->iscsi_conn); in iser_conn_terminate()
724 iser_conn, err); in iser_conn_terminate()
744 struct iser_conn *iser_conn; in iser_connect_error() local
746 iser_conn = (struct iser_conn *)cma_id->context; in iser_connect_error()
747 iser_conn->state = ISER_CONN_TERMINATING; in iser_connect_error()
751 iser_calc_scsi_params(struct iser_conn *iser_conn, in iser_calc_scsi_params() argument
754 struct iser_device *device = iser_conn->ib_conn.device; in iser_calc_scsi_params()
763 iser_conn->scsi_max_sectors = sg_tablesize * SIZE_4K / 512; in iser_calc_scsi_params()
765 iser_conn->scsi_max_sectors = max_sectors; in iser_calc_scsi_params()
768 iser_conn->scsi_sg_tablesize = sg_tablesize; in iser_calc_scsi_params()
771 iser_conn, iser_conn->scsi_sg_tablesize, in iser_calc_scsi_params()
772 iser_conn->scsi_max_sectors); in iser_calc_scsi_params()
781 struct iser_conn *iser_conn; in iser_addr_handler() local
785 iser_conn = (struct iser_conn *)cma_id->context; in iser_addr_handler()
786 if (iser_conn->state != ISER_CONN_PENDING) in iser_addr_handler()
790 ib_conn = &iser_conn->ib_conn; in iser_addr_handler()
813 iser_calc_scsi_params(iser_conn, iser_max_sectors); in iser_addr_handler()
831 struct iser_conn *iser_conn = (struct iser_conn *)cma_id->context; in iser_route_handler() local
832 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_route_handler()
835 if (iser_conn->state != ISER_CONN_PENDING) in iser_route_handler()
868 struct iser_conn *iser_conn; in iser_connected_handler() local
872 iser_conn = (struct iser_conn *)cma_id->context; in iser_connected_handler()
873 if (iser_conn->state != ISER_CONN_PENDING) in iser_connected_handler()
880 iser_conn->state = ISER_CONN_UP; in iser_connected_handler()
881 complete(&iser_conn->up_completion); in iser_connected_handler()
886 struct iser_conn *iser_conn = (struct iser_conn *)cma_id->context; in iser_disconnected_handler() local
888 if (iser_conn_terminate(iser_conn)) { in iser_disconnected_handler()
889 if (iser_conn->iscsi_conn) in iser_disconnected_handler()
890 iscsi_conn_failure(iser_conn->iscsi_conn, in iser_disconnected_handler()
900 struct iser_conn *iser_conn = (struct iser_conn *)cma_id->context; in iser_cleanup_handler() local
908 iser_free_ib_conn_res(iser_conn, destroy); in iser_cleanup_handler()
909 complete(&iser_conn->ib_completion); in iser_cleanup_handler()
914 struct iser_conn *iser_conn; in iser_cma_handler() local
917 iser_conn = (struct iser_conn *)cma_id->context; in iser_cma_handler()
922 mutex_lock(&iser_conn->state_mutex); in iser_cma_handler()
953 if (iser_conn->state != ISER_CONN_DOWN) { in iser_cma_handler()
954 iser_conn->ib_conn.cma_id = NULL; in iser_cma_handler()
963 mutex_unlock(&iser_conn->state_mutex); in iser_cma_handler()
968 void iser_conn_init(struct iser_conn *iser_conn) in iser_conn_init() argument
970 iser_conn->state = ISER_CONN_INIT; in iser_conn_init()
971 iser_conn->ib_conn.post_recv_buf_count = 0; in iser_conn_init()
972 init_completion(&iser_conn->ib_conn.flush_comp); in iser_conn_init()
973 init_completion(&iser_conn->stop_completion); in iser_conn_init()
974 init_completion(&iser_conn->ib_completion); in iser_conn_init()
975 init_completion(&iser_conn->up_completion); in iser_conn_init()
976 INIT_LIST_HEAD(&iser_conn->conn_list); in iser_conn_init()
977 mutex_init(&iser_conn->state_mutex); in iser_conn_init()
984 int iser_connect(struct iser_conn *iser_conn, in iser_connect() argument
989 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_connect()
992 mutex_lock(&iser_conn->state_mutex); in iser_connect()
994 sprintf(iser_conn->name, "%pISp", dst_addr); in iser_connect()
996 iser_info("connecting to: %s\n", iser_conn->name); in iser_connect()
1001 iser_conn->state = ISER_CONN_PENDING; in iser_connect()
1007 (void *)iser_conn, in iser_connect()
1022 wait_for_completion_interruptible(&iser_conn->up_completion); in iser_connect()
1024 if (iser_conn->state != ISER_CONN_UP) { in iser_connect()
1029 mutex_unlock(&iser_conn->state_mutex); in iser_connect()
1032 list_add(&iser_conn->conn_list, &ig.connlist); in iser_connect()
1039 iser_conn->state = ISER_CONN_DOWN; in iser_connect()
1041 mutex_unlock(&iser_conn->state_mutex); in iser_connect()
1042 iser_conn_release(iser_conn); in iser_connect()
1046 int iser_post_recvl(struct iser_conn *iser_conn) in iser_post_recvl() argument
1049 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_post_recvl()
1053 sge.addr = iser_conn->login_resp_dma; in iser_post_recvl()
1057 rx_wr.wr_id = (uintptr_t)iser_conn->login_resp_buf; in iser_post_recvl()
1071 int iser_post_recvm(struct iser_conn *iser_conn, int count) in iser_post_recvm() argument
1075 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_post_recvm()
1076 unsigned int my_rx_head = iser_conn->rx_desc_head; in iser_post_recvm()
1080 rx_desc = &iser_conn->rx_descs[my_rx_head]; in iser_post_recvm()
1085 my_rx_head = (my_rx_head + 1) & iser_conn->qp_max_recv_dtos_mask; in iser_post_recvm()
1097 iser_conn->rx_desc_head = my_rx_head; in iser_post_recvm()
1144 is_iser_tx_desc(struct iser_conn *iser_conn, void *wr_id) in is_iser_tx_desc() argument
1146 void *start = iser_conn->rx_descs; in is_iser_tx_desc()
1147 int len = iser_conn->num_rx_descs * sizeof(*iser_conn->rx_descs); in is_iser_tx_desc()
1170 struct iser_conn *iser_conn = container_of(ib_conn, struct iser_conn, in iser_handle_comp_error() local
1174 if (iser_conn->iscsi_conn) in iser_handle_comp_error()
1175 iscsi_conn_failure(iser_conn->iscsi_conn, in iser_handle_comp_error()
1181 if (is_iser_tx_desc(iser_conn, wr_id)) { in iser_handle_comp_error()