Lines Matching refs:isert_conn
51 isert_unmap_cmd(struct isert_cmd *isert_cmd, struct isert_conn *isert_conn);
56 isert_unreg_rdma(struct isert_cmd *isert_cmd, struct isert_conn *isert_conn);
63 isert_rdma_post_recvl(struct isert_conn *isert_conn);
65 isert_rdma_accept(struct isert_conn *isert_conn);
69 static void isert_wait4flush(struct isert_conn *isert_conn);
72 isert_prot_cmd(struct isert_conn *conn, struct se_cmd *cmd) in isert_prot_cmd()
82 struct isert_conn *isert_conn = context; in isert_qp_event_callback() local
85 ib_event_msg(e->event), e->event, isert_conn); in isert_qp_event_callback()
89 rdma_notify(isert_conn->cm_id, IB_EVENT_COMM_EST); in isert_qp_event_callback()
116 isert_comp_get(struct isert_conn *isert_conn) in isert_comp_get() argument
118 struct isert_device *device = isert_conn->device; in isert_comp_get()
132 isert_conn, comp, min); in isert_comp_get()
146 isert_create_qp(struct isert_conn *isert_conn, in isert_create_qp() argument
150 struct isert_device *device = isert_conn->device; in isert_create_qp()
156 attr.qp_context = isert_conn; in isert_create_qp()
162 isert_conn->max_sge = min(device->dev_attr.max_sge, in isert_create_qp()
180 isert_conn_setup_qp(struct isert_conn *isert_conn, struct rdma_cm_id *cma_id) in isert_conn_setup_qp() argument
185 comp = isert_comp_get(isert_conn); in isert_conn_setup_qp()
186 isert_conn->qp = isert_create_qp(isert_conn, comp, cma_id); in isert_conn_setup_qp()
187 if (IS_ERR(isert_conn->qp)) { in isert_conn_setup_qp()
188 ret = PTR_ERR(isert_conn->qp); in isert_conn_setup_qp()
205 isert_alloc_rx_descriptors(struct isert_conn *isert_conn) in isert_alloc_rx_descriptors() argument
207 struct isert_device *device = isert_conn->device; in isert_alloc_rx_descriptors()
214 isert_conn->rx_descs = kzalloc(ISERT_QP_MAX_RECV_DTOS * in isert_alloc_rx_descriptors()
216 if (!isert_conn->rx_descs) in isert_alloc_rx_descriptors()
219 rx_desc = isert_conn->rx_descs; in isert_alloc_rx_descriptors()
238 rx_desc = isert_conn->rx_descs; in isert_alloc_rx_descriptors()
243 kfree(isert_conn->rx_descs); in isert_alloc_rx_descriptors()
244 isert_conn->rx_descs = NULL; in isert_alloc_rx_descriptors()
246 isert_err("conn %p failed to allocate rx descriptors\n", isert_conn); in isert_alloc_rx_descriptors()
252 isert_free_rx_descriptors(struct isert_conn *isert_conn) in isert_free_rx_descriptors() argument
254 struct ib_device *ib_dev = isert_conn->device->ib_device; in isert_free_rx_descriptors()
258 if (!isert_conn->rx_descs) in isert_free_rx_descriptors()
261 rx_desc = isert_conn->rx_descs; in isert_free_rx_descriptors()
267 kfree(isert_conn->rx_descs); in isert_free_rx_descriptors()
268 isert_conn->rx_descs = NULL; in isert_free_rx_descriptors()
457 isert_conn_free_fastreg_pool(struct isert_conn *isert_conn) in isert_conn_free_fastreg_pool() argument
462 if (list_empty(&isert_conn->fr_pool)) in isert_conn_free_fastreg_pool()
465 isert_info("Freeing conn %p fastreg pool", isert_conn); in isert_conn_free_fastreg_pool()
468 &isert_conn->fr_pool, list) { in isert_conn_free_fastreg_pool()
480 if (i < isert_conn->fr_pool_size) in isert_conn_free_fastreg_pool()
482 isert_conn->fr_pool_size - i); in isert_conn_free_fastreg_pool()
550 isert_conn_create_fastreg_pool(struct isert_conn *isert_conn) in isert_conn_create_fastreg_pool() argument
553 struct isert_device *device = isert_conn->device; in isert_conn_create_fastreg_pool()
554 struct se_session *se_sess = isert_conn->conn->sess->se_sess; in isert_conn_create_fastreg_pool()
564 isert_conn->fr_pool_size = 0; in isert_conn_create_fastreg_pool()
582 list_add_tail(&fr_desc->list, &isert_conn->fr_pool); in isert_conn_create_fastreg_pool()
583 isert_conn->fr_pool_size++; in isert_conn_create_fastreg_pool()
587 isert_conn, isert_conn->fr_pool_size); in isert_conn_create_fastreg_pool()
592 isert_conn_free_fastreg_pool(isert_conn); in isert_conn_create_fastreg_pool()
597 isert_init_conn(struct isert_conn *isert_conn) in isert_init_conn() argument
599 isert_conn->state = ISER_CONN_INIT; in isert_init_conn()
600 INIT_LIST_HEAD(&isert_conn->node); in isert_init_conn()
601 init_completion(&isert_conn->login_comp); in isert_init_conn()
602 init_completion(&isert_conn->login_req_comp); in isert_init_conn()
603 init_completion(&isert_conn->wait); in isert_init_conn()
604 kref_init(&isert_conn->kref); in isert_init_conn()
605 mutex_init(&isert_conn->mutex); in isert_init_conn()
606 spin_lock_init(&isert_conn->pool_lock); in isert_init_conn()
607 INIT_LIST_HEAD(&isert_conn->fr_pool); in isert_init_conn()
608 INIT_WORK(&isert_conn->release_work, isert_release_work); in isert_init_conn()
612 isert_free_login_buf(struct isert_conn *isert_conn) in isert_free_login_buf() argument
614 struct ib_device *ib_dev = isert_conn->device->ib_device; in isert_free_login_buf()
616 ib_dma_unmap_single(ib_dev, isert_conn->login_rsp_dma, in isert_free_login_buf()
618 ib_dma_unmap_single(ib_dev, isert_conn->login_req_dma, in isert_free_login_buf()
621 kfree(isert_conn->login_buf); in isert_free_login_buf()
625 isert_alloc_login_buf(struct isert_conn *isert_conn, in isert_alloc_login_buf() argument
630 isert_conn->login_buf = kzalloc(ISCSI_DEF_MAX_RECV_SEG_LEN + in isert_alloc_login_buf()
632 if (!isert_conn->login_buf) { in isert_alloc_login_buf()
637 isert_conn->login_req_buf = isert_conn->login_buf; in isert_alloc_login_buf()
638 isert_conn->login_rsp_buf = isert_conn->login_buf + in isert_alloc_login_buf()
642 isert_conn->login_buf, isert_conn->login_req_buf, in isert_alloc_login_buf()
643 isert_conn->login_rsp_buf); in isert_alloc_login_buf()
645 isert_conn->login_req_dma = ib_dma_map_single(ib_dev, in isert_alloc_login_buf()
646 (void *)isert_conn->login_req_buf, in isert_alloc_login_buf()
649 ret = ib_dma_mapping_error(ib_dev, isert_conn->login_req_dma); in isert_alloc_login_buf()
652 isert_conn->login_req_dma = 0; in isert_alloc_login_buf()
656 isert_conn->login_rsp_dma = ib_dma_map_single(ib_dev, in isert_alloc_login_buf()
657 (void *)isert_conn->login_rsp_buf, in isert_alloc_login_buf()
660 ret = ib_dma_mapping_error(ib_dev, isert_conn->login_rsp_dma); in isert_alloc_login_buf()
663 isert_conn->login_rsp_dma = 0; in isert_alloc_login_buf()
670 ib_dma_unmap_single(ib_dev, isert_conn->login_req_dma, in isert_alloc_login_buf()
673 kfree(isert_conn->login_buf); in isert_alloc_login_buf()
682 struct isert_conn *isert_conn; in isert_connect_request() local
697 isert_conn = kzalloc(sizeof(struct isert_conn), GFP_KERNEL); in isert_connect_request()
698 if (!isert_conn) in isert_connect_request()
701 isert_init_conn(isert_conn); in isert_connect_request()
702 isert_conn->cm_id = cma_id; in isert_connect_request()
704 ret = isert_alloc_login_buf(isert_conn, cma_id->device); in isert_connect_request()
713 isert_conn->device = device; in isert_connect_request()
716 isert_conn->initiator_depth = min_t(u8, in isert_connect_request()
719 isert_dbg("Using initiator_depth: %u\n", isert_conn->initiator_depth); in isert_connect_request()
721 ret = isert_conn_setup_qp(isert_conn, cma_id); in isert_connect_request()
725 ret = isert_rdma_post_recvl(isert_conn); in isert_connect_request()
729 ret = isert_rdma_accept(isert_conn); in isert_connect_request()
734 list_add_tail(&isert_conn->node, &isert_np->accepted); in isert_connect_request()
742 isert_free_login_buf(isert_conn); in isert_connect_request()
744 kfree(isert_conn); in isert_connect_request()
750 isert_connect_release(struct isert_conn *isert_conn) in isert_connect_release() argument
752 struct isert_device *device = isert_conn->device; in isert_connect_release()
754 isert_dbg("conn %p\n", isert_conn); in isert_connect_release()
759 isert_conn_free_fastreg_pool(isert_conn); in isert_connect_release()
761 isert_free_rx_descriptors(isert_conn); in isert_connect_release()
762 if (isert_conn->cm_id) in isert_connect_release()
763 rdma_destroy_id(isert_conn->cm_id); in isert_connect_release()
765 if (isert_conn->qp) { in isert_connect_release()
766 struct isert_comp *comp = isert_conn->qp->recv_cq->cq_context; in isert_connect_release()
769 ib_destroy_qp(isert_conn->qp); in isert_connect_release()
772 if (isert_conn->login_buf) in isert_connect_release()
773 isert_free_login_buf(isert_conn); in isert_connect_release()
777 kfree(isert_conn); in isert_connect_release()
783 struct isert_conn *isert_conn = cma_id->qp->qp_context; in isert_connected_handler() local
786 isert_info("conn %p\n", isert_conn); in isert_connected_handler()
788 mutex_lock(&isert_conn->mutex); in isert_connected_handler()
789 isert_conn->state = ISER_CONN_UP; in isert_connected_handler()
790 kref_get(&isert_conn->kref); in isert_connected_handler()
791 mutex_unlock(&isert_conn->mutex); in isert_connected_handler()
794 list_move_tail(&isert_conn->node, &isert_np->pending); in isert_connected_handler()
804 struct isert_conn *isert_conn = container_of(kref, in isert_release_kref() local
805 struct isert_conn, kref); in isert_release_kref()
807 isert_info("conn %p final kref %s/%d\n", isert_conn, current->comm, in isert_release_kref()
810 isert_connect_release(isert_conn); in isert_release_kref()
814 isert_put_conn(struct isert_conn *isert_conn) in isert_put_conn() argument
816 kref_put(&isert_conn->kref, isert_release_kref); in isert_put_conn()
820 isert_handle_unbound_conn(struct isert_conn *isert_conn) in isert_handle_unbound_conn() argument
822 struct isert_np *isert_np = isert_conn->cm_id->context; in isert_handle_unbound_conn()
825 if (!list_empty(&isert_conn->node)) { in isert_handle_unbound_conn()
830 list_del_init(&isert_conn->node); in isert_handle_unbound_conn()
831 isert_put_conn(isert_conn); in isert_handle_unbound_conn()
832 complete(&isert_conn->wait); in isert_handle_unbound_conn()
833 queue_work(isert_release_wq, &isert_conn->release_work); in isert_handle_unbound_conn()
851 isert_conn_terminate(struct isert_conn *isert_conn) in isert_conn_terminate() argument
855 if (isert_conn->state >= ISER_CONN_TERMINATING) in isert_conn_terminate()
859 isert_conn, isert_conn->state); in isert_conn_terminate()
860 isert_conn->state = ISER_CONN_TERMINATING; in isert_conn_terminate()
861 err = rdma_disconnect(isert_conn->cm_id); in isert_conn_terminate()
864 isert_conn); in isert_conn_terminate()
866 isert_info("conn %p completing wait\n", isert_conn); in isert_conn_terminate()
867 complete(&isert_conn->wait); in isert_conn_terminate()
901 struct isert_conn *isert_conn = cma_id->qp->qp_context; in isert_disconnected_handler() local
903 mutex_lock(&isert_conn->mutex); in isert_disconnected_handler()
904 switch (isert_conn->state) { in isert_disconnected_handler()
908 isert_conn_terminate(isert_conn); in isert_disconnected_handler()
909 isert_wait4flush(isert_conn); in isert_disconnected_handler()
910 isert_handle_unbound_conn(isert_conn); in isert_disconnected_handler()
914 iscsit_cause_connection_reinstatement(isert_conn->conn, 0); in isert_disconnected_handler()
918 isert_conn, isert_conn->state); in isert_disconnected_handler()
920 mutex_unlock(&isert_conn->mutex); in isert_disconnected_handler()
928 struct isert_conn *isert_conn = cma_id->qp->qp_context; in isert_connect_error() local
930 list_del_init(&isert_conn->node); in isert_connect_error()
931 isert_conn->cm_id = NULL; in isert_connect_error()
932 isert_put_conn(isert_conn); in isert_connect_error()
979 isert_post_recvm(struct isert_conn *isert_conn, u32 count) in isert_post_recvm() argument
985 for (rx_wr = isert_conn->rx_wr, i = 0; i < count; i++, rx_wr++) { in isert_post_recvm()
986 rx_desc = &isert_conn->rx_descs[i]; in isert_post_recvm()
995 ret = ib_post_recv(isert_conn->qp, isert_conn->rx_wr, in isert_post_recvm()
1004 isert_post_recv(struct isert_conn *isert_conn, struct iser_rx_desc *rx_desc) in isert_post_recv() argument
1014 ret = ib_post_recv(isert_conn->qp, &rx_wr, &rx_wr_failed); in isert_post_recv()
1022 isert_post_send(struct isert_conn *isert_conn, struct iser_tx_desc *tx_desc) in isert_post_send() argument
1024 struct ib_device *ib_dev = isert_conn->cm_id->device; in isert_post_send()
1038 ret = ib_post_send(isert_conn->qp, &send_wr, &send_wr_failed); in isert_post_send()
1046 isert_create_send_desc(struct isert_conn *isert_conn, in isert_create_send_desc() argument
1050 struct isert_device *device = isert_conn->device; in isert_create_send_desc()
1069 isert_init_tx_hdrs(struct isert_conn *isert_conn, in isert_init_tx_hdrs() argument
1072 struct isert_device *device = isert_conn->device; in isert_init_tx_hdrs()
1096 isert_init_send_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd, in isert_init_send_wr() argument
1110 isert_rdma_post_recvl(struct isert_conn *isert_conn) in isert_rdma_post_recvl() argument
1117 sge.addr = isert_conn->login_req_dma; in isert_rdma_post_recvl()
1119 sge.lkey = isert_conn->device->pd->local_dma_lkey; in isert_rdma_post_recvl()
1125 rx_wr.wr_id = (uintptr_t)isert_conn->login_req_buf; in isert_rdma_post_recvl()
1129 ret = ib_post_recv(isert_conn->qp, &rx_wr, &rx_wr_fail); in isert_rdma_post_recvl()
1140 struct isert_conn *isert_conn = conn->context; in isert_put_login_tx() local
1141 struct isert_device *device = isert_conn->device; in isert_put_login_tx()
1143 struct iser_tx_desc *tx_desc = &isert_conn->login_tx_desc; in isert_put_login_tx()
1146 isert_create_send_desc(isert_conn, NULL, tx_desc); in isert_put_login_tx()
1151 isert_init_tx_hdrs(isert_conn, tx_desc); in isert_put_login_tx()
1156 ib_dma_sync_single_for_cpu(ib_dev, isert_conn->login_rsp_dma, in isert_put_login_tx()
1159 memcpy(isert_conn->login_rsp_buf, login->rsp_buf, length); in isert_put_login_tx()
1161 ib_dma_sync_single_for_device(ib_dev, isert_conn->login_rsp_dma, in isert_put_login_tx()
1164 tx_dsg->addr = isert_conn->login_rsp_dma; in isert_put_login_tx()
1166 tx_dsg->lkey = isert_conn->device->pd->local_dma_lkey; in isert_put_login_tx()
1172 isert_conn->device->use_fastreg) { in isert_put_login_tx()
1173 ret = isert_conn_create_fastreg_pool(isert_conn); in isert_put_login_tx()
1176 " fastreg pool\n", isert_conn); in isert_put_login_tx()
1181 ret = isert_alloc_rx_descriptors(isert_conn); in isert_put_login_tx()
1185 ret = isert_post_recvm(isert_conn, in isert_put_login_tx()
1191 mutex_lock(&isert_conn->mutex); in isert_put_login_tx()
1192 isert_conn->state = ISER_CONN_FULL_FEATURE; in isert_put_login_tx()
1193 mutex_unlock(&isert_conn->mutex); in isert_put_login_tx()
1197 ret = isert_rdma_post_recvl(isert_conn); in isert_put_login_tx()
1202 ret = isert_post_send(isert_conn, tx_desc); in isert_put_login_tx()
1210 isert_rx_login_req(struct isert_conn *isert_conn) in isert_rx_login_req() argument
1212 struct iser_rx_desc *rx_desc = (void *)isert_conn->login_req_buf; in isert_rx_login_req()
1213 int rx_buflen = isert_conn->login_req_len; in isert_rx_login_req()
1214 struct iscsi_conn *conn = isert_conn->conn; in isert_rx_login_req()
1218 isert_info("conn %p\n", isert_conn); in isert_rx_login_req()
1252 complete(&isert_conn->login_comp); in isert_rx_login_req()
1261 struct isert_conn *isert_conn = conn->context; in isert_allocate_cmd() local
1271 isert_cmd->conn = isert_conn; in isert_allocate_cmd()
1279 isert_handle_scsi_cmd(struct isert_conn *isert_conn, in isert_handle_scsi_cmd() argument
1283 struct iscsi_conn *conn = isert_conn->conn; in isert_handle_scsi_cmd()
1347 isert_handle_iscsi_dataout(struct isert_conn *isert_conn, in isert_handle_iscsi_dataout() argument
1351 struct iscsi_conn *conn = isert_conn->conn; in isert_handle_iscsi_dataout()
1403 rc = isert_post_recv(isert_conn, rx_desc); in isert_handle_iscsi_dataout()
1412 isert_handle_nop_out(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd, in isert_handle_nop_out() argument
1416 struct iscsi_conn *conn = isert_conn->conn; in isert_handle_nop_out()
1431 isert_handle_text_cmd(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd, in isert_handle_text_cmd() argument
1435 struct iscsi_conn *conn = isert_conn->conn; in isert_handle_text_cmd()
1460 isert_rx_opcode(struct isert_conn *isert_conn, struct iser_rx_desc *rx_desc, in isert_rx_opcode() argument
1465 struct iscsi_conn *conn = isert_conn->conn; in isert_rx_opcode()
1490 ret = isert_handle_scsi_cmd(isert_conn, isert_cmd, cmd, in isert_rx_opcode()
1499 ret = isert_handle_nop_out(isert_conn, isert_cmd, cmd, in isert_rx_opcode()
1503 ret = isert_handle_iscsi_dataout(isert_conn, rx_desc, in isert_rx_opcode()
1531 ret = isert_handle_text_cmd(isert_conn, isert_cmd, cmd, in isert_rx_opcode()
1544 isert_rx_do_work(struct iser_rx_desc *rx_desc, struct isert_conn *isert_conn) in isert_rx_do_work() argument
1575 isert_rx_opcode(isert_conn, rx_desc, in isert_rx_do_work()
1581 struct isert_conn *isert_conn, in isert_rcv_completion() argument
1584 struct ib_device *ib_dev = isert_conn->cm_id->device; in isert_rcv_completion()
1589 if ((char *)desc == isert_conn->login_req_buf) { in isert_rcv_completion()
1590 rx_dma = isert_conn->login_req_dma; in isert_rcv_completion()
1608 if ((char *)desc == isert_conn->login_req_buf) { in isert_rcv_completion()
1609 isert_conn->login_req_len = xfer_len - ISER_HEADERS_LEN; in isert_rcv_completion()
1610 if (isert_conn->conn) { in isert_rcv_completion()
1611 struct iscsi_login *login = isert_conn->conn->conn_login; in isert_rcv_completion()
1614 isert_rx_login_req(isert_conn); in isert_rcv_completion()
1616 mutex_lock(&isert_conn->mutex); in isert_rcv_completion()
1617 complete(&isert_conn->login_req_comp); in isert_rcv_completion()
1618 mutex_unlock(&isert_conn->mutex); in isert_rcv_completion()
1620 isert_rx_do_work(desc, isert_conn); in isert_rcv_completion()
1629 isert_map_data_buf(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd, in isert_map_data_buf() argument
1633 struct ib_device *ib_dev = isert_conn->cm_id->device; in isert_map_data_buf()
1662 isert_unmap_data_buf(struct isert_conn *isert_conn, struct isert_data_buf *data) in isert_unmap_data_buf() argument
1664 struct ib_device *ib_dev = isert_conn->cm_id->device; in isert_unmap_data_buf()
1673 isert_unmap_cmd(struct isert_cmd *isert_cmd, struct isert_conn *isert_conn) in isert_unmap_cmd() argument
1681 isert_unmap_data_buf(isert_conn, &wr->data); in isert_unmap_cmd()
1698 isert_unreg_rdma(struct isert_cmd *isert_cmd, struct isert_conn *isert_conn) in isert_unreg_rdma() argument
1707 isert_unmap_data_buf(isert_conn, &wr->prot); in isert_unreg_rdma()
1710 spin_lock_bh(&isert_conn->pool_lock); in isert_unreg_rdma()
1711 list_add_tail(&wr->fr_desc->list, &isert_conn->fr_pool); in isert_unreg_rdma()
1712 spin_unlock_bh(&isert_conn->pool_lock); in isert_unreg_rdma()
1718 isert_unmap_data_buf(isert_conn, &wr->data); in isert_unreg_rdma()
1729 struct isert_conn *isert_conn = isert_cmd->conn; in isert_put_cmd() local
1730 struct iscsi_conn *conn = isert_conn->conn; in isert_put_cmd()
1731 struct isert_device *device = isert_conn->device; in isert_put_cmd()
1759 device->unreg_rdma_mem(isert_cmd, isert_conn); in isert_put_cmd()
1880 struct isert_conn *isert_conn = isert_cmd->conn; in isert_completion_rdma_write() local
1881 struct isert_device *device = isert_conn->device; in isert_completion_rdma_write()
1890 device->unreg_rdma_mem(isert_cmd, isert_conn); in isert_completion_rdma_write()
1896 isert_put_response(isert_conn->conn, cmd); in isert_completion_rdma_write()
1906 struct isert_conn *isert_conn = isert_cmd->conn; in isert_completion_rdma_read() local
1907 struct isert_device *device = isert_conn->device; in isert_completion_rdma_read()
1917 device->unreg_rdma_mem(isert_cmd, isert_conn); in isert_completion_rdma_read()
1941 struct isert_conn *isert_conn = isert_cmd->conn; in isert_do_control_comp() local
1942 struct ib_device *ib_dev = isert_conn->cm_id->device; in isert_do_control_comp()
1969 struct isert_conn *isert_conn, in isert_response_completion() argument
1991 struct isert_conn *isert_conn) in isert_snd_completion() argument
1993 struct ib_device *ib_dev = isert_conn->cm_id->device; in isert_snd_completion()
2008 isert_conn, ib_dev); in isert_snd_completion()
2035 is_isert_tx_desc(struct isert_conn *isert_conn, void *wr_id) in is_isert_tx_desc() argument
2037 void *start = isert_conn->rx_descs; in is_isert_tx_desc()
2038 int len = ISERT_QP_MAX_RECV_DTOS * sizeof(*isert_conn->rx_descs); in is_isert_tx_desc()
2041 (wr_id == isert_conn->login_req_buf)) in is_isert_tx_desc()
2048 isert_cq_comp_err(struct isert_conn *isert_conn, struct ib_wc *wc) in isert_cq_comp_err() argument
2052 isert_conn); in isert_cq_comp_err()
2053 complete(&isert_conn->wait_comp_err); in isert_cq_comp_err()
2054 } else if (is_isert_tx_desc(isert_conn, (void *)(uintptr_t)wc->wr_id)) { in isert_cq_comp_err()
2055 struct ib_device *ib_dev = isert_conn->cm_id->device; in isert_cq_comp_err()
2071 struct isert_conn *isert_conn; in isert_handle_wc() local
2075 isert_conn = wc->qp->qp_context; in isert_handle_wc()
2079 isert_rcv_completion(rx_desc, isert_conn, wc->byte_len); in isert_handle_wc()
2082 isert_snd_completion(tx_desc, isert_conn); in isert_handle_wc()
2095 isert_cq_comp_err(isert_conn, wc); in isert_handle_wc()
2129 isert_post_response(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd) in isert_post_response() argument
2134 ret = isert_post_recv(isert_conn, isert_cmd->rx_desc); in isert_post_response()
2140 ret = ib_post_send(isert_conn->qp, &isert_cmd->tx_desc.send_wr, in isert_post_response()
2153 struct isert_conn *isert_conn = conn->context; in isert_put_response() local
2158 isert_create_send_desc(isert_conn, isert_cmd, &isert_cmd->tx_desc); in isert_put_response()
2160 isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc); in isert_put_response()
2167 struct isert_device *device = isert_conn->device; in isert_put_response()
2191 isert_init_send_wr(isert_conn, isert_cmd, send_wr); in isert_put_response()
2195 return isert_post_response(isert_conn, isert_cmd); in isert_put_response()
2202 struct isert_conn *isert_conn = conn->context; in isert_aborted_task() local
2203 struct isert_device *device = isert_conn->device; in isert_aborted_task()
2213 device->unreg_rdma_mem(isert_cmd, isert_conn); in isert_aborted_task()
2219 struct isert_conn *isert_conn = conn->context; in isert_get_sup_prot_ops() local
2220 struct isert_device *device = isert_conn->device; in isert_get_sup_prot_ops()
2224 isert_info("conn %p PI offload enabled\n", isert_conn); in isert_get_sup_prot_ops()
2225 isert_conn->pi_support = true; in isert_get_sup_prot_ops()
2230 isert_info("conn %p PI offload disabled\n", isert_conn); in isert_get_sup_prot_ops()
2231 isert_conn->pi_support = false; in isert_get_sup_prot_ops()
2241 struct isert_conn *isert_conn = conn->context; in isert_put_nopin() local
2244 isert_create_send_desc(isert_conn, isert_cmd, &isert_cmd->tx_desc); in isert_put_nopin()
2248 isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc); in isert_put_nopin()
2249 isert_init_send_wr(isert_conn, isert_cmd, send_wr); in isert_put_nopin()
2251 isert_dbg("conn %p Posting NOPIN Response\n", isert_conn); in isert_put_nopin()
2253 return isert_post_response(isert_conn, isert_cmd); in isert_put_nopin()
2260 struct isert_conn *isert_conn = conn->context; in isert_put_logout_rsp() local
2263 isert_create_send_desc(isert_conn, isert_cmd, &isert_cmd->tx_desc); in isert_put_logout_rsp()
2266 isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc); in isert_put_logout_rsp()
2267 isert_init_send_wr(isert_conn, isert_cmd, send_wr); in isert_put_logout_rsp()
2269 isert_dbg("conn %p Posting Logout Response\n", isert_conn); in isert_put_logout_rsp()
2271 return isert_post_response(isert_conn, isert_cmd); in isert_put_logout_rsp()
2278 struct isert_conn *isert_conn = conn->context; in isert_put_tm_rsp() local
2281 isert_create_send_desc(isert_conn, isert_cmd, &isert_cmd->tx_desc); in isert_put_tm_rsp()
2284 isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc); in isert_put_tm_rsp()
2285 isert_init_send_wr(isert_conn, isert_cmd, send_wr); in isert_put_tm_rsp()
2287 isert_dbg("conn %p Posting Task Management Response\n", isert_conn); in isert_put_tm_rsp()
2289 return isert_post_response(isert_conn, isert_cmd); in isert_put_tm_rsp()
2296 struct isert_conn *isert_conn = conn->context; in isert_put_reject() local
2298 struct isert_device *device = isert_conn->device; in isert_put_reject()
2304 isert_create_send_desc(isert_conn, isert_cmd, &isert_cmd->tx_desc); in isert_put_reject()
2306 isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc); in isert_put_reject()
2318 isert_init_send_wr(isert_conn, isert_cmd, send_wr); in isert_put_reject()
2320 isert_dbg("conn %p Posting Reject\n", isert_conn); in isert_put_reject()
2322 return isert_post_response(isert_conn, isert_cmd); in isert_put_reject()
2329 struct isert_conn *isert_conn = conn->context; in isert_put_text_rsp() local
2336 isert_create_send_desc(isert_conn, isert_cmd, &isert_cmd->tx_desc); in isert_put_text_rsp()
2342 isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc); in isert_put_text_rsp()
2345 struct isert_device *device = isert_conn->device; in isert_put_text_rsp()
2359 isert_init_send_wr(isert_conn, isert_cmd, send_wr); in isert_put_text_rsp()
2361 isert_dbg("conn %p Text Response\n", isert_conn); in isert_put_text_rsp()
2363 return isert_post_response(isert_conn, isert_cmd); in isert_put_text_rsp()
2367 isert_build_rdma_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd, in isert_build_rdma_wr() argument
2373 struct isert_device *device = isert_conn->device; in isert_build_rdma_wr()
2380 sg_nents = min(cmd->se_cmd.t_data_nents - sg_off, isert_conn->max_sge); in isert_build_rdma_wr()
2422 struct isert_conn *isert_conn = conn->context; in isert_map_rdma() local
2432 ret = isert_map_data_buf(isert_conn, isert_cmd, se_cmd->t_data_sg, in isert_map_rdma()
2449 wr->rdma_wr_num = DIV_ROUND_UP(data->nents, isert_conn->max_sge); in isert_map_rdma()
2459 rdma_write_max = isert_conn->max_sge * PAGE_SIZE; in isert_map_rdma()
2484 ib_sge_cnt = isert_build_rdma_wr(isert_conn, isert_cmd, ib_sge, in isert_map_rdma()
2495 isert_unmap_data_buf(isert_conn, data); in isert_map_rdma()
2516 isert_fast_reg_mr(struct isert_conn *isert_conn, in isert_fast_reg_mr() argument
2522 struct isert_device *device = isert_conn->device; in isert_fast_reg_mr()
2574 ret = ib_post_send(isert_conn->qp, wr, &bad_wr); in isert_fast_reg_mr()
2648 isert_reg_sig_mr(struct isert_conn *isert_conn, in isert_reg_sig_mr() argument
2687 ret = ib_post_send(isert_conn->qp, wr, &bad_wr); in isert_reg_sig_mr()
2713 isert_handle_prot_cmd(struct isert_conn *isert_conn, in isert_handle_prot_cmd() argument
2717 struct isert_device *device = isert_conn->device; in isert_handle_prot_cmd()
2727 isert_conn); in isert_handle_prot_cmd()
2733 ret = isert_map_data_buf(isert_conn, isert_cmd, in isert_handle_prot_cmd()
2740 isert_conn); in isert_handle_prot_cmd()
2745 ret = isert_fast_reg_mr(isert_conn, wr->fr_desc, &wr->prot, in isert_handle_prot_cmd()
2749 isert_conn); in isert_handle_prot_cmd()
2754 ret = isert_reg_sig_mr(isert_conn, se_cmd, wr, wr->fr_desc); in isert_handle_prot_cmd()
2757 isert_conn); in isert_handle_prot_cmd()
2766 isert_unmap_data_buf(isert_conn, &wr->prot); in isert_handle_prot_cmd()
2777 struct isert_conn *isert_conn = conn->context; in isert_reg_rdma() local
2788 ret = isert_map_data_buf(isert_conn, isert_cmd, se_cmd->t_data_sg, in isert_reg_rdma()
2794 if (wr->data.dma_nents != 1 || isert_prot_cmd(isert_conn, se_cmd)) { in isert_reg_rdma()
2795 spin_lock_irqsave(&isert_conn->pool_lock, flags); in isert_reg_rdma()
2796 fr_desc = list_first_entry(&isert_conn->fr_pool, in isert_reg_rdma()
2799 spin_unlock_irqrestore(&isert_conn->pool_lock, flags); in isert_reg_rdma()
2803 ret = isert_fast_reg_mr(isert_conn, fr_desc, &wr->data, in isert_reg_rdma()
2808 if (isert_prot_cmd(isert_conn, se_cmd)) { in isert_reg_rdma()
2809 ret = isert_handle_prot_cmd(isert_conn, isert_cmd, wr); in isert_reg_rdma()
2833 rdma_wr->wr.send_flags = !isert_prot_cmd(isert_conn, se_cmd) ? in isert_reg_rdma()
2846 spin_lock_irqsave(&isert_conn->pool_lock, flags); in isert_reg_rdma()
2847 list_add_tail(&fr_desc->list, &isert_conn->fr_pool); in isert_reg_rdma()
2848 spin_unlock_irqrestore(&isert_conn->pool_lock, flags); in isert_reg_rdma()
2850 isert_unmap_data_buf(isert_conn, &wr->data); in isert_reg_rdma()
2861 struct isert_conn *isert_conn = conn->context; in isert_put_datain() local
2862 struct isert_device *device = isert_conn->device; in isert_put_datain()
2876 if (!isert_prot_cmd(isert_conn, se_cmd)) { in isert_put_datain()
2880 isert_create_send_desc(isert_conn, isert_cmd, in isert_put_datain()
2884 isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc); in isert_put_datain()
2885 isert_init_send_wr(isert_conn, isert_cmd, in isert_put_datain()
2890 rc = isert_post_recv(isert_conn, isert_cmd->rx_desc); in isert_put_datain()
2897 rc = ib_post_send(isert_conn->qp, &wr->rdma_wr->wr, &wr_failed); in isert_put_datain()
2901 if (!isert_prot_cmd(isert_conn, se_cmd)) in isert_put_datain()
2917 struct isert_conn *isert_conn = conn->context; in isert_get_dataout() local
2918 struct isert_device *device = isert_conn->device; in isert_get_dataout()
2931 rc = ib_post_send(isert_conn->qp, &wr->rdma_wr->wr, &wr_failed); in isert_get_dataout()
2969 struct isert_conn *isert_conn = conn->context; in isert_response_queue() local
2976 isert_conn->logout_posted = true; in isert_response_queue()
3089 isert_rdma_accept(struct isert_conn *isert_conn) in isert_rdma_accept() argument
3091 struct rdma_cm_id *cm_id = isert_conn->cm_id; in isert_rdma_accept()
3096 cp.initiator_depth = isert_conn->initiator_depth; in isert_rdma_accept()
3112 struct isert_conn *isert_conn = conn->context; in isert_get_login_rx() local
3115 isert_info("before login_req comp conn: %p\n", isert_conn); in isert_get_login_rx()
3116 ret = wait_for_completion_interruptible(&isert_conn->login_req_comp); in isert_get_login_rx()
3119 isert_conn); in isert_get_login_rx()
3122 reinit_completion(&isert_conn->login_req_comp); in isert_get_login_rx()
3133 isert_rx_login_req(isert_conn); in isert_get_login_rx()
3136 ret = wait_for_completion_interruptible(&isert_conn->login_comp); in isert_get_login_rx()
3147 struct isert_conn *isert_conn) in isert_set_conn_info() argument
3149 struct rdma_cm_id *cm_id = isert_conn->cm_id; in isert_set_conn_info()
3162 struct isert_conn *isert_conn; in isert_accept_np() local
3188 isert_conn = list_first_entry(&isert_np->pending, in isert_accept_np()
3189 struct isert_conn, node); in isert_accept_np()
3190 list_del_init(&isert_conn->node); in isert_accept_np()
3193 conn->context = isert_conn; in isert_accept_np()
3194 isert_conn->conn = conn; in isert_accept_np()
3195 isert_conn->state = ISER_CONN_BOUND; in isert_accept_np()
3197 isert_set_conn_info(np, conn, isert_conn); in isert_accept_np()
3199 isert_dbg("Processing isert_conn: %p\n", isert_conn); in isert_accept_np()
3208 struct isert_conn *isert_conn, *n; in isert_free_np() local
3223 list_for_each_entry_safe(isert_conn, n, in isert_free_np()
3227 isert_conn, isert_conn->state); in isert_free_np()
3228 isert_connect_release(isert_conn); in isert_free_np()
3234 list_for_each_entry_safe(isert_conn, n, in isert_free_np()
3238 isert_conn, isert_conn->state); in isert_free_np()
3239 isert_connect_release(isert_conn); in isert_free_np()
3250 struct isert_conn *isert_conn = container_of(work, in isert_release_work() local
3251 struct isert_conn, in isert_release_work()
3254 isert_info("Starting release conn %p\n", isert_conn); in isert_release_work()
3256 wait_for_completion(&isert_conn->wait); in isert_release_work()
3258 mutex_lock(&isert_conn->mutex); in isert_release_work()
3259 isert_conn->state = ISER_CONN_DOWN; in isert_release_work()
3260 mutex_unlock(&isert_conn->mutex); in isert_release_work()
3262 isert_info("Destroying conn %p\n", isert_conn); in isert_release_work()
3263 isert_put_conn(isert_conn); in isert_release_work()
3267 isert_wait4logout(struct isert_conn *isert_conn) in isert_wait4logout() argument
3269 struct iscsi_conn *conn = isert_conn->conn; in isert_wait4logout()
3271 isert_info("conn %p\n", isert_conn); in isert_wait4logout()
3273 if (isert_conn->logout_posted) { in isert_wait4logout()
3274 isert_info("conn %p wait for conn_logout_comp\n", isert_conn); in isert_wait4logout()
3292 isert_wait4flush(struct isert_conn *isert_conn) in isert_wait4flush() argument
3296 isert_info("conn %p\n", isert_conn); in isert_wait4flush()
3298 init_completion(&isert_conn->wait_comp_err); in isert_wait4flush()
3299 isert_conn->beacon.wr_id = ISER_BEACON_WRID; in isert_wait4flush()
3301 if (ib_post_recv(isert_conn->qp, &isert_conn->beacon, &bad_wr)) { in isert_wait4flush()
3302 isert_err("conn %p failed to post beacon", isert_conn); in isert_wait4flush()
3306 wait_for_completion(&isert_conn->wait_comp_err); in isert_wait4flush()
3346 struct isert_conn *isert_conn = conn->context; in isert_wait_conn() local
3348 isert_info("Starting conn %p\n", isert_conn); in isert_wait_conn()
3350 mutex_lock(&isert_conn->mutex); in isert_wait_conn()
3355 if (isert_conn->state == ISER_CONN_INIT) { in isert_wait_conn()
3356 mutex_unlock(&isert_conn->mutex); in isert_wait_conn()
3359 isert_conn_terminate(isert_conn); in isert_wait_conn()
3360 mutex_unlock(&isert_conn->mutex); in isert_wait_conn()
3362 isert_wait4flush(isert_conn); in isert_wait_conn()
3365 isert_wait4logout(isert_conn); in isert_wait_conn()
3367 queue_work(isert_release_wq, &isert_conn->release_work); in isert_wait_conn()
3372 struct isert_conn *isert_conn = conn->context; in isert_free_conn() local
3374 isert_wait4flush(isert_conn); in isert_free_conn()
3375 isert_put_conn(isert_conn); in isert_free_conn()