Lines Matching full:target

95 		 "Enable workarounds for Topspin/Cisco SRP target bugs if != 0");
142 …"Number of RDMA channels to use for communication with an SRP target. Using more than one channel …
216 static int srp_target_is_topspin(struct srp_target_port *target) in srp_target_is_topspin() argument
222 (!memcmp(&target->ioc_guid, topspin_oui, sizeof topspin_oui) || in srp_target_is_topspin()
223 !memcmp(&target->ioc_guid, cisco_oui, sizeof cisco_oui)); in srp_target_is_topspin()
275 static int srp_init_ib_qp(struct srp_target_port *target, in srp_init_ib_qp() argument
285 ret = ib_find_cached_pkey(target->srp_host->srp_dev->dev, in srp_init_ib_qp()
286 target->srp_host->port, in srp_init_ib_qp()
287 be16_to_cpu(target->ib_cm.pkey), in srp_init_ib_qp()
295 attr->port_num = target->srp_host->port; in srp_init_ib_qp()
310 struct srp_target_port *target = ch->target; in srp_new_ib_cm_id() local
313 new_cm_id = ib_create_cm_id(target->srp_host->srp_dev->dev, in srp_new_ib_cm_id()
321 if (rdma_cap_opa_ah(target->srp_host->srp_dev->dev, in srp_new_ib_cm_id()
322 target->srp_host->port)) in srp_new_ib_cm_id()
326 ch->ib_cm.path.sgid = target->sgid; in srp_new_ib_cm_id()
327 ch->ib_cm.path.dgid = target->ib_cm.orig_dgid; in srp_new_ib_cm_id()
328 ch->ib_cm.path.pkey = target->ib_cm.pkey; in srp_new_ib_cm_id()
329 ch->ib_cm.path.service_id = target->ib_cm.service_id; in srp_new_ib_cm_id()
336 struct srp_target_port *target = ch->target; in srp_new_rdma_cm_id() local
340 new_cm_id = rdma_create_id(target->net, srp_rdma_cm_handler, ch, in srp_new_rdma_cm_id()
349 ret = rdma_resolve_addr(new_cm_id, target->rdma_cm.src_specified ? in srp_new_rdma_cm_id()
350 &target->rdma_cm.src.sa : NULL, in srp_new_rdma_cm_id()
351 &target->rdma_cm.dst.sa, in srp_new_rdma_cm_id()
355 &target->rdma_cm.src, &target->rdma_cm.dst, ret); in srp_new_rdma_cm_id()
365 &target->rdma_cm.dst, ret); in srp_new_rdma_cm_id()
380 struct srp_target_port *target = ch->target; in srp_new_cm_id() local
382 return target->using_rdma_cm ? srp_new_rdma_cm_id(ch) : in srp_new_cm_id()
502 static struct srp_fr_pool *srp_alloc_fr_pool(struct srp_target_port *target) in srp_alloc_fr_pool() argument
504 struct srp_device *dev = target->srp_host->srp_dev; in srp_alloc_fr_pool()
506 return srp_create_fr_pool(dev->dev, dev->pd, target->mr_pool_size, in srp_alloc_fr_pool()
530 struct srp_target_port *target = ch->target; in srp_create_ch_ib() local
531 struct srp_device *dev = target->srp_host->srp_dev; in srp_create_ch_ib()
537 const int m = 1 + dev->use_fast_reg * target->mr_per_cmd * 2; in srp_create_ch_ib()
545 recv_cq = ib_alloc_cq(dev->dev, ch, target->queue_size + 1, in srp_create_ch_ib()
552 send_cq = ib_alloc_cq(dev->dev, ch, m * target->queue_size, in srp_create_ch_ib()
560 init_attr->cap.max_send_wr = m * target->queue_size; in srp_create_ch_ib()
561 init_attr->cap.max_recv_wr = target->queue_size + 1; in srp_create_ch_ib()
571 if (target->using_rdma_cm) { in srp_create_ch_ib()
577 ret = srp_init_ib_qp(target, qp); in srp_create_ch_ib()
591 fr_pool = srp_alloc_fr_pool(target); in srp_create_ch_ib()
594 shost_printk(KERN_WARNING, target->scsi_host, PFX in srp_create_ch_ib()
621 if (target->using_rdma_cm) in srp_create_ch_ib()
641 static void srp_free_ch_ib(struct srp_target_port *target, in srp_free_ch_ib() argument
644 struct srp_device *dev = target->srp_host->srp_dev; in srp_free_ch_ib()
647 if (!ch->target) in srp_free_ch_ib()
650 if (target->using_rdma_cm) { in srp_free_ch_ib()
681 ch->target = NULL; in srp_free_ch_ib()
687 for (i = 0; i < target->queue_size; ++i) in srp_free_ch_ib()
688 srp_free_iu(target->srp_host, ch->rx_ring[i]); in srp_free_ch_ib()
693 for (i = 0; i < target->queue_size; ++i) in srp_free_ch_ib()
694 srp_free_iu(target->srp_host, ch->tx_ring[i]); in srp_free_ch_ib()
705 struct srp_target_port *target = ch->target; in srp_path_rec_completion() local
709 shost_printk(KERN_ERR, target->scsi_host, in srp_path_rec_completion()
718 struct srp_target_port *target = ch->target; in srp_ib_lookup_path() local
726 target->srp_host->srp_dev->dev, in srp_ib_lookup_path()
727 target->srp_host->port, in srp_ib_lookup_path()
746 shost_printk(KERN_WARNING, target->scsi_host, in srp_ib_lookup_path()
749 be16_to_cpu(target->ib_cm.pkey), in srp_ib_lookup_path()
750 be64_to_cpu(target->ib_cm.service_id)); in srp_ib_lookup_path()
757 struct srp_target_port *target = ch->target; in srp_rdma_lookup_path() local
769 shost_printk(KERN_WARNING, target->scsi_host, in srp_rdma_lookup_path()
777 struct srp_target_port *target = ch->target; in srp_lookup_path() local
779 return target->using_rdma_cm ? srp_rdma_lookup_path(ch) : in srp_lookup_path()
803 struct srp_target_port *target = ch->target; in srp_send_req() local
818 req->ib_param.retry_count = target->tl_retry_count; in srp_send_req()
840 if (target->using_rdma_cm) { in srp_send_req()
862 subnet_timeout = srp_get_subnet_timeout(target->srp_host); in srp_send_req()
866 req->ib_param.service_id = target->ib_cm.service_id; in srp_send_req()
889 if (target->io_class == SRP_REV10_IB_IO_CLASS) { in srp_send_req()
890 memcpy(ipi, &target->sgid.global.interface_id, 8); in srp_send_req()
891 memcpy(ipi + 8, &target->initiator_ext, 8); in srp_send_req()
892 memcpy(tpi, &target->ioc_guid, 8); in srp_send_req()
893 memcpy(tpi + 8, &target->id_ext, 8); in srp_send_req()
895 memcpy(ipi, &target->initiator_ext, 8); in srp_send_req()
896 memcpy(ipi + 8, &target->sgid.global.interface_id, 8); in srp_send_req()
897 memcpy(tpi, &target->id_ext, 8); in srp_send_req()
898 memcpy(tpi + 8, &target->ioc_guid, 8); in srp_send_req()
906 if (srp_target_is_topspin(target)) { in srp_send_req()
907 shost_printk(KERN_DEBUG, target->scsi_host, in srp_send_req()
909 "activated for target GUID %016llx\n", in srp_send_req()
910 be64_to_cpu(target->ioc_guid)); in srp_send_req()
912 memcpy(ipi + 8, &target->srp_host->srp_dev->dev->node_guid, 8); in srp_send_req()
915 if (target->using_rdma_cm) in srp_send_req()
925 static bool srp_queue_remove_work(struct srp_target_port *target) in srp_queue_remove_work() argument
929 spin_lock_irq(&target->lock); in srp_queue_remove_work()
930 if (target->state != SRP_TARGET_REMOVED) { in srp_queue_remove_work()
931 target->state = SRP_TARGET_REMOVED; in srp_queue_remove_work()
934 spin_unlock_irq(&target->lock); in srp_queue_remove_work()
937 queue_work(srp_remove_wq, &target->remove_work); in srp_queue_remove_work()
942 static void srp_disconnect_target(struct srp_target_port *target) in srp_disconnect_target() argument
949 for (i = 0; i < target->ch_count; i++) { in srp_disconnect_target()
950 ch = &target->ch[i]; in srp_disconnect_target()
953 if (target->using_rdma_cm) { in srp_disconnect_target()
962 shost_printk(KERN_DEBUG, target->scsi_host, in srp_disconnect_target()
968 static void srp_free_req_data(struct srp_target_port *target, in srp_free_req_data() argument
971 struct srp_device *dev = target->srp_host->srp_dev; in srp_free_req_data()
979 for (i = 0; i < target->req_ring_size; ++i) { in srp_free_req_data()
985 target->indirect_size, in srp_free_req_data()
997 struct srp_target_port *target = ch->target; in srp_alloc_req_data() local
998 struct srp_device *srp_dev = target->srp_host->srp_dev; in srp_alloc_req_data()
1005 ch->req_ring = kcalloc(target->req_ring_size, sizeof(*ch->req_ring), in srp_alloc_req_data()
1010 for (i = 0; i < target->req_ring_size; ++i) { in srp_alloc_req_data()
1012 mr_list = kmalloc_array(target->mr_per_cmd, sizeof(void *), in srp_alloc_req_data()
1018 req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL); in srp_alloc_req_data()
1023 target->indirect_size, in srp_alloc_req_data()
1051 static void srp_remove_target(struct srp_target_port *target) in srp_remove_target() argument
1056 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); in srp_remove_target()
1058 srp_del_scsi_host_attr(target->scsi_host); in srp_remove_target()
1059 srp_rport_get(target->rport); in srp_remove_target()
1060 srp_remove_host(target->scsi_host); in srp_remove_target()
1061 scsi_remove_host(target->scsi_host); in srp_remove_target()
1062 srp_stop_rport_timers(target->rport); in srp_remove_target()
1063 srp_disconnect_target(target); in srp_remove_target()
1064 kobj_ns_drop(KOBJ_NS_TYPE_NET, target->net); in srp_remove_target()
1065 for (i = 0; i < target->ch_count; i++) { in srp_remove_target()
1066 ch = &target->ch[i]; in srp_remove_target()
1067 srp_free_ch_ib(target, ch); in srp_remove_target()
1069 cancel_work_sync(&target->tl_err_work); in srp_remove_target()
1070 srp_rport_put(target->rport); in srp_remove_target()
1071 for (i = 0; i < target->ch_count; i++) { in srp_remove_target()
1072 ch = &target->ch[i]; in srp_remove_target()
1073 srp_free_req_data(target, ch); in srp_remove_target()
1075 kfree(target->ch); in srp_remove_target()
1076 target->ch = NULL; in srp_remove_target()
1078 spin_lock(&target->srp_host->target_lock); in srp_remove_target()
1079 list_del(&target->list); in srp_remove_target()
1080 spin_unlock(&target->srp_host->target_lock); in srp_remove_target()
1082 scsi_host_put(target->scsi_host); in srp_remove_target()
1087 struct srp_target_port *target = in srp_remove_work() local
1090 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); in srp_remove_work()
1092 srp_remove_target(target); in srp_remove_work()
1097 struct srp_target_port *target = rport->lld_data; in srp_rport_delete() local
1099 srp_queue_remove_work(target); in srp_rport_delete()
1104 * @target: SRP target port.
1106 static int srp_connected_ch(struct srp_target_port *target) in srp_connected_ch() argument
1110 for (i = 0; i < target->ch_count; i++) in srp_connected_ch()
1111 c += target->ch[i].connected; in srp_connected_ch()
1119 struct srp_target_port *target = ch->target; in srp_connect_ch() local
1122 WARN_ON_ONCE(!multich && srp_connected_ch(target) > 0); in srp_connect_ch()
1159 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_connect_ch()
1198 struct srp_target_port *target = ch->target; in srp_unmap_data() local
1199 struct srp_device *dev = target->srp_host->srp_dev; in srp_unmap_data()
1214 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_unmap_data()
1218 &target->tl_err_work); in srp_unmap_data()
1267 * @req_lim_delta: Amount to be added to @target->req_lim.
1295 struct srp_target_port *target = rport->lld_data; in srp_terminate_io() local
1299 for (i = 0; i < target->ch_count; i++) { in srp_terminate_io()
1300 ch = &target->ch[i]; in srp_terminate_io()
1302 for (j = 0; j < target->req_ring_size; ++j) { in srp_terminate_io()
1311 /* Calculate maximum initiator to target information unit length. */
1342 struct srp_target_port *target = rport->lld_data; in srp_rport_reconnect() local
1344 uint32_t max_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, in srp_rport_reconnect()
1346 target->max_it_iu_size); in srp_rport_reconnect()
1350 srp_disconnect_target(target); in srp_rport_reconnect()
1352 if (target->state == SRP_TARGET_SCANNING) in srp_rport_reconnect()
1356 * Now get a new local CM ID so that we avoid confusing the target in in srp_rport_reconnect()
1360 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1361 ch = &target->ch[i]; in srp_rport_reconnect()
1364 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1365 ch = &target->ch[i]; in srp_rport_reconnect()
1366 for (j = 0; j < target->req_ring_size; ++j) { in srp_rport_reconnect()
1372 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1373 ch = &target->ch[i]; in srp_rport_reconnect()
1382 for (j = 0; j < target->queue_size; ++j) in srp_rport_reconnect()
1386 target->qp_in_error = false; in srp_rport_reconnect()
1388 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1389 ch = &target->ch[i]; in srp_rport_reconnect()
1397 shost_printk(KERN_INFO, target->scsi_host, in srp_rport_reconnect()
1435 struct srp_target_port *target = ch->target; in srp_map_finish_fr() local
1436 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_finish_fr()
1443 shost_printk(KERN_ERR, ch->target->scsi_host, in srp_map_finish_fr()
1445 ch->target->mr_per_cmd); in srp_map_finish_fr()
1451 if (sg_nents == 1 && target->global_rkey) { in srp_map_finish_fr()
1456 target->global_rkey); in srp_map_finish_fr()
1516 state->fr.end = req->fr_list + ch->target->mr_per_cmd; in srp_map_sg_fr()
1541 struct srp_target_port *target = ch->target; in srp_map_sg_dma() local
1547 target->global_rkey); in srp_map_sg_dma()
1564 struct srp_target_port *target = ch->target; in srp_map_idb() local
1565 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_idb()
1603 struct srp_device *dev = ch->target->srp_host->srp_dev; in srp_check_mapping()
1633 struct srp_target_port *target = ch->target; in srp_map_data() local
1653 shost_printk(KERN_WARNING, target->scsi_host, in srp_map_data()
1663 dev = target->srp_host->srp_dev; in srp_map_data()
1686 sge[i].lkey = target->lkey; in srp_map_data()
1696 if (count == 1 && target->global_rkey) { in srp_map_data()
1707 buf->key = cpu_to_be32(target->global_rkey); in srp_map_data()
1721 target->indirect_size, DMA_TO_DEVICE); in srp_map_data()
1742 * target is not using an external indirect table, we are in srp_map_data()
1758 if (unlikely(target->cmd_sg_cnt < state.ndesc && in srp_map_data()
1759 !target->allow_ext_sg)) { in srp_map_data()
1760 shost_printk(KERN_ERR, target->scsi_host, in srp_map_data()
1766 count = min(state.ndesc, target->cmd_sg_cnt); in srp_map_data()
1778 if (!target->global_rkey) { in srp_map_data()
1785 idb_rkey = cpu_to_be32(target->global_rkey); in srp_map_data()
1811 if (ret == -ENOMEM && req->nmdesc >= target->mr_pool_size) in srp_map_data()
1841 * - SRP_IU_RSP: 1, since a conforming SRP target never sends more than
1847 struct srp_target_port *target = ch->target; in __srp_get_tx_iu() local
1858 /* Initiator responses to target requests do not consume credits */ in __srp_get_tx_iu()
1861 ++target->zero_req_lim; in __srp_get_tx_iu()
1901 struct srp_target_port *target = ch->target; in srp_post_send() local
1909 iu->sge[0].lkey = target->lkey; in srp_post_send()
1925 struct srp_target_port *target = ch->target; in srp_post_recv() local
1931 list.lkey = target->lkey; in srp_post_recv()
1945 struct srp_target_port *target = ch->target; in srp_process_rsp() local
1959 shost_printk(KERN_ERR, target->scsi_host, in srp_process_rsp()
1965 scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag); in srp_process_rsp()
1973 shost_printk(KERN_ERR, target->scsi_host, in srp_process_rsp()
1975 rsp->tag, ch - target->ch, ch->qp->qp_num); in srp_process_rsp()
2012 struct srp_target_port *target = ch->target; in srp_response_common() local
2013 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_response_common()
2024 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_response_common()
2036 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_response_common()
2054 shost_printk(KERN_ERR, ch->target->scsi_host, PFX in srp_process_cred_req()
2061 struct srp_target_port *target = ch->target; in srp_process_aer_req() local
2068 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_process_aer_req()
2072 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_process_aer_req()
2080 struct srp_target_port *target = ch->target; in srp_recv_done() local
2081 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_recv_done()
2096 shost_printk(KERN_ERR, target->scsi_host, in srp_recv_done()
2116 /* XXX Handle target logout */ in srp_recv_done()
2117 shost_printk(KERN_WARNING, target->scsi_host, in srp_recv_done()
2118 PFX "Got target logout request\n"); in srp_recv_done()
2122 shost_printk(KERN_WARNING, target->scsi_host, in srp_recv_done()
2132 shost_printk(KERN_ERR, target->scsi_host, in srp_recv_done()
2138 * @work: Work structure embedded in an SRP target port.
2141 * hence the target->rport test.
2145 struct srp_target_port *target; in srp_tl_err_work() local
2147 target = container_of(work, struct srp_target_port, tl_err_work); in srp_tl_err_work()
2148 if (target->rport) in srp_tl_err_work()
2149 srp_start_tl_fail_timers(target->rport); in srp_tl_err_work()
2156 struct srp_target_port *target = ch->target; in srp_handle_qp_err() local
2158 if (ch->connected && !target->qp_in_error) { in srp_handle_qp_err()
2159 shost_printk(KERN_ERR, target->scsi_host, in srp_handle_qp_err()
2163 queue_work(system_long_wq, &target->tl_err_work); in srp_handle_qp_err()
2165 target->qp_in_error = true; in srp_handle_qp_err()
2170 struct srp_target_port *target = host_to_target(shost); in srp_queuecommand() local
2181 scmnd->result = srp_chkready(target->rport); in srp_queuecommand()
2187 ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)]; in srp_queuecommand()
2189 WARN_ONCE(idx >= target->req_ring_size, "%s: tag %#x: idx %d >= %d\n", in srp_queuecommand()
2191 target->req_ring_size); in srp_queuecommand()
2201 dev = target->srp_host->srp_dev->dev; in srp_queuecommand()
2226 shost_printk(KERN_ERR, target->scsi_host, in srp_queuecommand()
2243 shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n"); in srp_queuecommand()
2279 struct srp_target_port *target = ch->target; in srp_alloc_iu_bufs() local
2282 ch->rx_ring = kcalloc(target->queue_size, sizeof(*ch->rx_ring), in srp_alloc_iu_bufs()
2286 ch->tx_ring = kcalloc(target->queue_size, sizeof(*ch->tx_ring), in srp_alloc_iu_bufs()
2291 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2292 ch->rx_ring[i] = srp_alloc_iu(target->srp_host, in srp_alloc_iu_bufs()
2299 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2300 ch->tx_ring[i] = srp_alloc_iu(target->srp_host, in srp_alloc_iu_bufs()
2312 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2313 srp_free_iu(target->srp_host, ch->rx_ring[i]); in srp_alloc_iu_bufs()
2314 srp_free_iu(target->srp_host, ch->tx_ring[i]); in srp_alloc_iu_bufs()
2341 * Set target->rq_tmo_jiffies to one second more than the largest time in srp_compute_rq_tmo()
2358 struct srp_target_port *target = ch->target; in srp_cm_rep_handler() local
2369 ch->max_it_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, in srp_cm_rep_handler()
2371 target->max_it_iu_size); in srp_cm_rep_handler()
2376 shost_printk(KERN_DEBUG, target->scsi_host, in srp_cm_rep_handler()
2383 target->scsi_host->can_queue in srp_cm_rep_handler()
2385 target->scsi_host->can_queue); in srp_cm_rep_handler()
2386 target->scsi_host->cmd_per_lun in srp_cm_rep_handler()
2387 = min_t(int, target->scsi_host->can_queue, in srp_cm_rep_handler()
2388 target->scsi_host->cmd_per_lun); in srp_cm_rep_handler()
2390 shost_printk(KERN_WARNING, target->scsi_host, in srp_cm_rep_handler()
2402 for (i = 0; i < target->queue_size; i++) { in srp_cm_rep_handler()
2410 if (!target->using_rdma_cm) { in srp_cm_rep_handler()
2430 target->rq_tmo_jiffies = srp_compute_rq_tmo(qp_attr, attr_mask); in srp_cm_rep_handler()
2450 struct srp_target_port *target = ch->target; in srp_ib_cm_rej_handler() local
2451 struct Scsi_Host *shost = target->scsi_host; in srp_ib_cm_rej_handler()
2469 if (srp_target_is_topspin(target)) { in srp_ib_cm_rej_handler()
2480 PFX "Topspin/Cisco redirect to target port GID %016llx%016llx\n", in srp_ib_cm_rej_handler()
2510 target->sgid.raw, in srp_ib_cm_rej_handler()
2511 target->ib_cm.orig_dgid.raw, in srp_ib_cm_rej_handler()
2536 struct srp_target_port *target = ch->target; in srp_ib_cm_handler() local
2541 shost_printk(KERN_DEBUG, target->scsi_host, in srp_ib_cm_handler()
2553 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n"); in srp_ib_cm_handler()
2560 shost_printk(KERN_WARNING, target->scsi_host, in srp_ib_cm_handler()
2564 shost_printk(KERN_ERR, target->scsi_host, in srp_ib_cm_handler()
2566 queue_work(system_long_wq, &target->tl_err_work); in srp_ib_cm_handler()
2570 shost_printk(KERN_ERR, target->scsi_host, in srp_ib_cm_handler()
2583 shost_printk(KERN_WARNING, target->scsi_host, in srp_ib_cm_handler()
2597 struct srp_target_port *target = ch->target; in srp_rdma_cm_rej_handler() local
2598 struct Scsi_Host *shost = target->scsi_host; in srp_rdma_cm_rej_handler()
2648 struct srp_target_port *target = ch->target; in srp_rdma_cm_handler() local
2674 shost_printk(KERN_DEBUG, target->scsi_host, in srp_rdma_cm_handler()
2686 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n"); in srp_rdma_cm_handler()
2694 shost_printk(KERN_WARNING, target->scsi_host, in srp_rdma_cm_handler()
2699 queue_work(system_long_wq, &target->tl_err_work); in srp_rdma_cm_handler()
2704 shost_printk(KERN_ERR, target->scsi_host, in srp_rdma_cm_handler()
2712 shost_printk(KERN_WARNING, target->scsi_host, in srp_rdma_cm_handler()
2741 struct srp_target_port *target = ch->target; in srp_send_tsk_mgmt() local
2742 struct srp_rport *rport = target->rport; in srp_send_tsk_mgmt()
2743 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_send_tsk_mgmt()
2748 if (!ch->connected || target->qp_in_error) in srp_send_tsk_mgmt()
2806 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_abort() local
2813 shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n"); in srp_abort()
2819 if (WARN_ON_ONCE(ch_idx >= target->ch_count)) in srp_abort()
2821 ch = &target->ch[ch_idx]; in srp_abort()
2824 shost_printk(KERN_ERR, target->scsi_host, in srp_abort()
2829 else if (target->rport->state == SRP_RPORT_LOST) in srp_abort()
2844 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_reset_device() local
2848 shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); in srp_reset_device()
2850 ch = &target->ch[0]; in srp_reset_device()
2862 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_reset_host() local
2864 shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host called\n"); in srp_reset_host()
2866 return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED; in srp_reset_host()
2872 struct srp_target_port *target = host_to_target(shost); in srp_target_alloc() local
2874 if (target->target_can_queue) in srp_target_alloc()
2875 starget->can_queue = target->target_can_queue; in srp_target_alloc()
2882 struct srp_target_port *target = host_to_target(shost); in srp_slave_configure() local
2887 timeout = max_t(unsigned, 30 * HZ, target->rq_tmo_jiffies); in srp_slave_configure()
2897 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_id_ext() local
2899 return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->id_ext)); in show_id_ext()
2905 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_ioc_guid() local
2907 return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->ioc_guid)); in show_ioc_guid()
2913 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_service_id() local
2915 if (target->using_rdma_cm) in show_service_id()
2918 be64_to_cpu(target->ib_cm.service_id)); in show_service_id()
2924 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_pkey() local
2926 if (target->using_rdma_cm) in show_pkey()
2928 return sprintf(buf, "0x%04x\n", be16_to_cpu(target->ib_cm.pkey)); in show_pkey()
2934 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_sgid() local
2936 return sprintf(buf, "%pI6\n", target->sgid.raw); in show_sgid()
2942 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_dgid() local
2943 struct srp_rdma_ch *ch = &target->ch[0]; in show_dgid()
2945 if (target->using_rdma_cm) in show_dgid()
2953 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_orig_dgid() local
2955 if (target->using_rdma_cm) in show_orig_dgid()
2957 return sprintf(buf, "%pI6\n", target->ib_cm.orig_dgid.raw); in show_orig_dgid()
2963 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_req_lim() local
2967 for (i = 0; i < target->ch_count; i++) { in show_req_lim()
2968 ch = &target->ch[i]; in show_req_lim()
2977 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_zero_req_lim() local
2979 return sprintf(buf, "%d\n", target->zero_req_lim); in show_zero_req_lim()
2985 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_local_ib_port() local
2987 return sprintf(buf, "%d\n", target->srp_host->port); in show_local_ib_port()
2993 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_local_ib_device() local
2996 dev_name(&target->srp_host->srp_dev->dev->dev)); in show_local_ib_device()
3002 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_ch_count() local
3004 return sprintf(buf, "%d\n", target->ch_count); in show_ch_count()
3010 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_comp_vector() local
3012 return sprintf(buf, "%d\n", target->comp_vector); in show_comp_vector()
3018 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_tl_retry_count() local
3020 return sprintf(buf, "%d\n", target->tl_retry_count); in show_tl_retry_count()
3026 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_cmd_sg_entries() local
3028 return sprintf(buf, "%u\n", target->cmd_sg_cnt); in show_cmd_sg_entries()
3034 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_allow_ext_sg() local
3036 return sprintf(buf, "%s\n", target->allow_ext_sg ? "true" : "false"); in show_allow_ext_sg()
3111 * < 0 upon failure. Caller is responsible for SRP target port cleanup.
3112 * 0 and target->state == SRP_TARGET_REMOVED if asynchronous target port
3114 * 0 and target->state != SRP_TARGET_REMOVED upon success.
3116 static int srp_add_target(struct srp_host *host, struct srp_target_port *target) in srp_add_target() argument
3121 target->state = SRP_TARGET_SCANNING; in srp_add_target()
3122 sprintf(target->target_name, "SRP.T10:%016llX", in srp_add_target()
3123 be64_to_cpu(target->id_ext)); in srp_add_target()
3125 if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dev.parent)) in srp_add_target()
3128 memcpy(ids.port_id, &target->id_ext, 8); in srp_add_target()
3129 memcpy(ids.port_id + 8, &target->ioc_guid, 8); in srp_add_target()
3131 rport = srp_rport_add(target->scsi_host, &ids); in srp_add_target()
3133 scsi_remove_host(target->scsi_host); in srp_add_target()
3137 rport->lld_data = target; in srp_add_target()
3138 target->rport = rport; in srp_add_target()
3141 list_add_tail(&target->list, &host->target_list); in srp_add_target()
3144 scsi_scan_target(&target->scsi_host->shost_gendev, in srp_add_target()
3145 0, target->scsi_id, SCAN_WILD_CARD, SCSI_SCAN_INITIAL); in srp_add_target()
3147 if (srp_connected_ch(target) < target->ch_count || in srp_add_target()
3148 target->qp_in_error) { in srp_add_target()
3149 shost_printk(KERN_INFO, target->scsi_host, in srp_add_target()
3151 srp_queue_remove_work(target); in srp_add_target()
3156 dev_name(&target->scsi_host->shost_gendev), in srp_add_target()
3157 srp_sdev_count(target->scsi_host)); in srp_add_target()
3159 spin_lock_irq(&target->lock); in srp_add_target()
3160 if (target->state == SRP_TARGET_SCANNING) in srp_add_target()
3161 target->state = SRP_TARGET_LIVE; in srp_add_target()
3162 spin_unlock_irq(&target->lock); in srp_add_target()
3182 * srp_conn_unique() - check whether the connection to a target is unique
3184 * @target: SRP target port.
3187 struct srp_target_port *target) in srp_conn_unique() argument
3192 if (target->state == SRP_TARGET_REMOVED) in srp_conn_unique()
3199 if (t != target && in srp_conn_unique()
3200 target->id_ext == t->id_ext && in srp_conn_unique()
3201 target->ioc_guid == t->ioc_guid && in srp_conn_unique()
3202 target->initiator_ext == t->initiator_ext) { in srp_conn_unique()
3214 * Target ports are added by writing
3325 struct srp_target_port *target) in srp_parse_options() argument
3362 target->id_ext = cpu_to_be64(ull); in srp_parse_options()
3378 target->ioc_guid = cpu_to_be64(ull); in srp_parse_options()
3394 ret = hex2bin(target->ib_cm.orig_dgid.raw, p, 16); in srp_parse_options()
3405 target->ib_cm.pkey = cpu_to_be16(token); in srp_parse_options()
3420 target->ib_cm.service_id = cpu_to_be64(ull); in srp_parse_options()
3430 ret = srp_parse_in(net, &target->rdma_cm.src.ss, p, in srp_parse_options()
3437 target->rdma_cm.src_specified = true; in srp_parse_options()
3447 ret = srp_parse_in(net, &target->rdma_cm.dst.ss, p, in srp_parse_options()
3456 target->using_rdma_cm = true; in srp_parse_options()
3465 target->scsi_host->max_sectors = token; in srp_parse_options()
3473 target->scsi_host->can_queue = token; in srp_parse_options()
3474 target->queue_size = token + SRP_RSP_SQ_SIZE + in srp_parse_options()
3477 target->scsi_host->cmd_per_lun = token; in srp_parse_options()
3486 target->scsi_host->cmd_per_lun = token; in srp_parse_options()
3495 target->target_can_queue = token; in srp_parse_options()
3510 target->io_class = token; in srp_parse_options()
3525 target->initiator_ext = cpu_to_be64(ull); in srp_parse_options()
3535 target->cmd_sg_cnt = token; in srp_parse_options()
3543 target->allow_ext_sg = !!token; in srp_parse_options()
3553 target->sg_tablesize = token; in srp_parse_options()
3561 target->comp_vector = token; in srp_parse_options()
3570 target->tl_retry_count = token; in srp_parse_options()
3575 pr_warn("bad maximum initiator to target IU size '%s'\n", p); in srp_parse_options()
3578 target->max_it_iu_size = token; in srp_parse_options()
3586 target->ch_count = token; in srp_parse_options()
3590 pr_warn("unknown parameter or missing value '%s' in target creation request\n", in srp_parse_options()
3603 pr_warn("target creation request is missing one or more parameters\n"); in srp_parse_options()
3605 if (target->scsi_host->cmd_per_lun > target->scsi_host->can_queue in srp_parse_options()
3608 target->scsi_host->cmd_per_lun, in srp_parse_options()
3609 target->scsi_host->can_queue); in srp_parse_options()
3623 struct srp_target_port *target; in srp_create_target() local
3647 target = host_to_target(target_host); in srp_create_target()
3649 target->net = kobj_ns_grab_current(KOBJ_NS_TYPE_NET); in srp_create_target()
3650 target->io_class = SRP_REV16A_IB_IO_CLASS; in srp_create_target()
3651 target->scsi_host = target_host; in srp_create_target()
3652 target->srp_host = host; in srp_create_target()
3653 target->lkey = host->srp_dev->pd->local_dma_lkey; in srp_create_target()
3654 target->global_rkey = host->srp_dev->global_rkey; in srp_create_target()
3655 target->cmd_sg_cnt = cmd_sg_entries; in srp_create_target()
3656 target->sg_tablesize = indirect_sg_entries ? : cmd_sg_entries; in srp_create_target()
3657 target->allow_ext_sg = allow_ext_sg; in srp_create_target()
3658 target->tl_retry_count = 7; in srp_create_target()
3659 target->queue_size = SRP_DEFAULT_QUEUE_SIZE; in srp_create_target()
3665 scsi_host_get(target->scsi_host); in srp_create_target()
3671 ret = srp_parse_options(target->net, buf, target); in srp_create_target()
3675 target->req_ring_size = target->queue_size - SRP_TSK_MGMT_SQ_SIZE; in srp_create_target()
3677 if (!srp_conn_unique(target->srp_host, target)) { in srp_create_target()
3678 if (target->using_rdma_cm) { in srp_create_target()
3679 shost_printk(KERN_INFO, target->scsi_host, in srp_create_target()
3680 PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;dest=%pIS\n", in srp_create_target()
3681 be64_to_cpu(target->id_ext), in srp_create_target()
3682 be64_to_cpu(target->ioc_guid), in srp_create_target()
3683 &target->rdma_cm.dst); in srp_create_target()
3685 shost_printk(KERN_INFO, target->scsi_host, in srp_create_target()
3686 …PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;initiator_ext=%016llx\n… in srp_create_target()
3687 be64_to_cpu(target->id_ext), in srp_create_target()
3688 be64_to_cpu(target->ioc_guid), in srp_create_target()
3689 be64_to_cpu(target->initiator_ext)); in srp_create_target()
3695 if (!srp_dev->has_fr && !target->allow_ext_sg && in srp_create_target()
3696 target->cmd_sg_cnt < target->sg_tablesize) { in srp_create_target()
3698 target->sg_tablesize = target->cmd_sg_cnt; in srp_create_target()
3722 (target->scsi_host->max_sectors + 1 + in srp_create_target()
3726 (target->sg_tablesize + in srp_create_target()
3731 target->scsi_host->max_sectors, srp_dev->max_pages_per_mr, srp_dev->mr_page_size, in srp_create_target()
3735 target_host->sg_tablesize = target->sg_tablesize; in srp_create_target()
3736 target->mr_pool_size = target->scsi_host->can_queue * mr_per_cmd; in srp_create_target()
3737 target->mr_per_cmd = mr_per_cmd; in srp_create_target()
3738 target->indirect_size = target->sg_tablesize * in srp_create_target()
3740 max_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, in srp_create_target()
3742 target->max_it_iu_size); in srp_create_target()
3744 INIT_WORK(&target->tl_err_work, srp_tl_err_work); in srp_create_target()
3745 INIT_WORK(&target->remove_work, srp_remove_work); in srp_create_target()
3746 spin_lock_init(&target->lock); in srp_create_target()
3747 ret = rdma_query_gid(ibdev, host->port, 0, &target->sgid); in srp_create_target()
3752 if (target->ch_count == 0) in srp_create_target()
3753 target->ch_count = in srp_create_target()
3759 target->ch = kcalloc(target->ch_count, sizeof(*target->ch), in srp_create_target()
3761 if (!target->ch) in srp_create_target()
3766 const int ch_start = (node_idx * target->ch_count / in srp_create_target()
3768 const int ch_end = ((node_idx + 1) * target->ch_count / in srp_create_target()
3781 ch = &target->ch[ch_start + cpu_idx]; in srp_create_target()
3782 ch->target = target; in srp_create_target()
3803 if (target->using_rdma_cm) in srp_create_target()
3805 &target->rdma_cm.dst); in srp_create_target()
3808 target->ib_cm.orig_dgid.raw); in srp_create_target()
3809 shost_printk(KERN_ERR, target->scsi_host, in srp_create_target()
3812 target->ch_count, dst); in srp_create_target()
3816 srp_free_ch_ib(target, ch); in srp_create_target()
3817 srp_free_req_data(target, ch); in srp_create_target()
3818 target->ch_count = ch - target->ch; in srp_create_target()
3830 target->scsi_host->nr_hw_queues = target->ch_count; in srp_create_target()
3832 ret = srp_add_target(host, target); in srp_create_target()
3836 if (target->state != SRP_TARGET_REMOVED) { in srp_create_target()
3837 if (target->using_rdma_cm) { in srp_create_target()
3838 shost_printk(KERN_DEBUG, target->scsi_host, PFX in srp_create_target()
3839 "new target: id_ext %016llx ioc_guid %016llx sgid %pI6 dest %pIS\n", in srp_create_target()
3840 be64_to_cpu(target->id_ext), in srp_create_target()
3841 be64_to_cpu(target->ioc_guid), in srp_create_target()
3842 target->sgid.raw, &target->rdma_cm.dst); in srp_create_target()
3844 shost_printk(KERN_DEBUG, target->scsi_host, PFX in srp_create_target()
3845 … "new target: id_ext %016llx ioc_guid %016llx pkey %04x service_id %016llx sgid %pI6 dgid %pI6\n", in srp_create_target()
3846 be64_to_cpu(target->id_ext), in srp_create_target()
3847 be64_to_cpu(target->ioc_guid), in srp_create_target()
3848 be16_to_cpu(target->ib_cm.pkey), in srp_create_target()
3849 be64_to_cpu(target->ib_cm.service_id), in srp_create_target()
3850 target->sgid.raw, in srp_create_target()
3851 target->ib_cm.orig_dgid.raw); in srp_create_target()
3861 scsi_host_put(target->scsi_host); in srp_create_target()
3868 if (target->state != SRP_TARGET_REMOVED) in srp_create_target()
3869 kobj_ns_drop(KOBJ_NS_TYPE_NET, target->net); in srp_create_target()
3870 scsi_host_put(target->scsi_host); in srp_create_target()
3876 srp_disconnect_target(target); in srp_create_target()
3879 for (i = 0; i < target->ch_count; i++) { in srp_create_target()
3880 ch = &target->ch[i]; in srp_create_target()
3881 srp_free_ch_ib(target, ch); in srp_create_target()
3882 srp_free_req_data(target, ch); in srp_create_target()
3885 kfree(target->ch); in srp_create_target()
4048 struct srp_target_port *target; in srp_remove_one() local
4056 * target ports can be created. in srp_remove_one()
4061 * Remove all target ports. in srp_remove_one()
4064 list_for_each_entry(target, &host->target_list, list) in srp_remove_one()
4065 srp_queue_remove_work(target); in srp_remove_one()
4069 * Wait for tl_err and target port removal tasks. in srp_remove_one()