Lines Matching refs:iser_conn
231 struct iser_conn *iser_conn = to_iser_conn(ib_conn); in iser_create_ib_conn_res() local
274 iser_conn->max_cmds = ISER_GET_MAX_XMIT_CMDS(max_send_wr - 1); in iser_create_ib_conn_res()
346 struct iser_conn *iser_conn; in iser_release_work() local
348 iser_conn = container_of(work, struct iser_conn, release_work); in iser_release_work()
351 wait_for_completion(&iser_conn->stop_completion); in iser_release_work()
353 wait_for_completion(&iser_conn->ib_completion); in iser_release_work()
355 mutex_lock(&iser_conn->state_mutex); in iser_release_work()
356 iser_conn->state = ISER_CONN_DOWN; in iser_release_work()
357 mutex_unlock(&iser_conn->state_mutex); in iser_release_work()
359 iser_conn_release(iser_conn); in iser_release_work()
373 static void iser_free_ib_conn_res(struct iser_conn *iser_conn, bool destroy) in iser_free_ib_conn_res() argument
375 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_free_ib_conn_res()
379 iser_conn, ib_conn->cma_id, ib_conn->qp); in iser_free_ib_conn_res()
388 if (iser_conn->rx_descs) in iser_free_ib_conn_res()
389 iser_free_rx_descriptors(iser_conn); in iser_free_ib_conn_res()
402 void iser_conn_release(struct iser_conn *iser_conn) in iser_conn_release() argument
404 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_conn_release()
407 list_del(&iser_conn->conn_list); in iser_conn_release()
410 mutex_lock(&iser_conn->state_mutex); in iser_conn_release()
412 if (iser_conn->state != ISER_CONN_DOWN) { in iser_conn_release()
414 iser_conn, iser_conn->state); in iser_conn_release()
415 iscsi_destroy_endpoint(iser_conn->ep); in iser_conn_release()
416 iser_conn->state = ISER_CONN_DOWN; in iser_conn_release()
422 iser_free_ib_conn_res(iser_conn, true); in iser_conn_release()
423 mutex_unlock(&iser_conn->state_mutex); in iser_conn_release()
430 kfree(iser_conn); in iser_conn_release()
440 int iser_conn_terminate(struct iser_conn *iser_conn) in iser_conn_terminate() argument
442 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_conn_terminate()
445 lockdep_assert_held(&iser_conn->state_mutex); in iser_conn_terminate()
448 if (iser_conn->state != ISER_CONN_UP) in iser_conn_terminate()
451 iser_conn->state = ISER_CONN_TERMINATING; in iser_conn_terminate()
452 iser_info("iser_conn %p state %d\n", iser_conn, iser_conn->state); in iser_conn_terminate()
455 if (iser_conn->iscsi_conn) in iser_conn_terminate()
456 iscsi_suspend_queue(iser_conn->iscsi_conn); in iser_conn_terminate()
467 iser_conn, err); in iser_conn_terminate()
481 struct iser_conn *iser_conn = cma_id->context; in iser_connect_error() local
483 lockdep_assert_held(&iser_conn->state_mutex); in iser_connect_error()
485 iser_conn->state = ISER_CONN_TERMINATING; in iser_connect_error()
488 static void iser_calc_scsi_params(struct iser_conn *iser_conn, in iser_calc_scsi_params() argument
491 struct iser_device *device = iser_conn->ib_conn.device; in iser_calc_scsi_params()
508 if (iser_conn->ib_conn.pi_support) in iser_calc_scsi_params()
516 iser_conn->scsi_sg_tablesize = min(sg_tablesize, sup_sg_tablesize); in iser_calc_scsi_params()
517 iser_conn->pages_per_mr = in iser_calc_scsi_params()
518 iser_conn->scsi_sg_tablesize + reserved_mr_pages; in iser_calc_scsi_params()
526 struct iser_conn *iser_conn = cma_id->context; in iser_addr_handler() local
531 lockdep_assert_held(&iser_conn->state_mutex); in iser_addr_handler()
533 if (iser_conn->state != ISER_CONN_PENDING) in iser_addr_handler()
537 ib_conn = &iser_conn->ib_conn; in iser_addr_handler()
560 iser_calc_scsi_params(iser_conn, iser_max_sectors); in iser_addr_handler()
578 struct iser_conn *iser_conn = cma_id->context; in iser_route_handler() local
579 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_route_handler()
582 lockdep_assert_held(&iser_conn->state_mutex); in iser_route_handler()
584 if (iser_conn->state != ISER_CONN_PENDING) in iser_route_handler()
622 struct iser_conn *iser_conn = cma_id->context; in iser_connected_handler() local
626 lockdep_assert_held(&iser_conn->state_mutex); in iser_connected_handler()
628 if (iser_conn->state != ISER_CONN_PENDING) in iser_connected_handler()
638 iser_conn->snd_w_inv = !(flags & ISER_SEND_W_INV_NOT_SUP); in iser_connected_handler()
642 iser_conn, iser_conn->snd_w_inv ? "remote" : "local"); in iser_connected_handler()
644 iser_conn->state = ISER_CONN_UP; in iser_connected_handler()
645 complete(&iser_conn->up_completion); in iser_connected_handler()
654 struct iser_conn *iser_conn = cma_id->context; in iser_cleanup_handler() local
656 lockdep_assert_held(&iser_conn->state_mutex); in iser_cleanup_handler()
662 if (iser_conn_terminate(iser_conn)) { in iser_cleanup_handler()
663 if (iser_conn->iscsi_conn) in iser_cleanup_handler()
664 iscsi_conn_failure(iser_conn->iscsi_conn, in iser_cleanup_handler()
669 iser_free_ib_conn_res(iser_conn, destroy); in iser_cleanup_handler()
670 complete(&iser_conn->ib_completion); in iser_cleanup_handler()
676 struct iser_conn *iser_conn; in iser_cma_handler() local
679 iser_conn = cma_id->context; in iser_cma_handler()
684 mutex_lock(&iser_conn->state_mutex); in iser_cma_handler()
718 if (iser_conn->state != ISER_CONN_DOWN) { in iser_cma_handler()
719 iser_conn->ib_conn.cma_id = NULL; in iser_cma_handler()
728 mutex_unlock(&iser_conn->state_mutex); in iser_cma_handler()
733 void iser_conn_init(struct iser_conn *iser_conn) in iser_conn_init() argument
735 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_conn_init()
737 iser_conn->state = ISER_CONN_INIT; in iser_conn_init()
738 init_completion(&iser_conn->stop_completion); in iser_conn_init()
739 init_completion(&iser_conn->ib_completion); in iser_conn_init()
740 init_completion(&iser_conn->up_completion); in iser_conn_init()
741 INIT_LIST_HEAD(&iser_conn->conn_list); in iser_conn_init()
742 mutex_init(&iser_conn->state_mutex); in iser_conn_init()
751 int iser_connect(struct iser_conn *iser_conn, struct sockaddr *src_addr, in iser_connect() argument
754 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_connect()
757 mutex_lock(&iser_conn->state_mutex); in iser_connect()
759 sprintf(iser_conn->name, "%pISp", dst_addr); in iser_connect()
761 iser_info("connecting to: %s\n", iser_conn->name); in iser_connect()
766 iser_conn->state = ISER_CONN_PENDING; in iser_connect()
769 iser_conn, RDMA_PS_TCP, IB_QPT_RC); in iser_connect()
783 wait_for_completion_interruptible(&iser_conn->up_completion); in iser_connect()
785 if (iser_conn->state != ISER_CONN_UP) { in iser_connect()
790 mutex_unlock(&iser_conn->state_mutex); in iser_connect()
793 list_add(&iser_conn->conn_list, &ig.connlist); in iser_connect()
800 iser_conn->state = ISER_CONN_DOWN; in iser_connect()
802 mutex_unlock(&iser_conn->state_mutex); in iser_connect()
803 iser_conn_release(iser_conn); in iser_connect()
807 int iser_post_recvl(struct iser_conn *iser_conn) in iser_post_recvl() argument
809 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_post_recvl()
810 struct iser_login_desc *desc = &iser_conn->login_desc; in iser_post_recvl()
831 int iser_post_recvm(struct iser_conn *iser_conn, struct iser_rx_desc *rx_desc) in iser_post_recvm() argument
833 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_post_recvm()
940 struct iser_conn *iser_conn = to_iser_conn(wc->qp->qp_context); in iser_err_comp() local
946 if (iser_conn->iscsi_conn) in iser_err_comp()
947 iscsi_conn_failure(iser_conn->iscsi_conn, in iser_err_comp()