Lines Matching full:target
90 "Enable workarounds for Topspin/Cisco SRP target bugs if != 0");
137 …"Number of RDMA channels to use for communication with an SRP target. Using more than one channel …
211 static int srp_target_is_topspin(struct srp_target_port *target) in srp_target_is_topspin() argument
217 (!memcmp(&target->ioc_guid, topspin_oui, sizeof topspin_oui) || in srp_target_is_topspin()
218 !memcmp(&target->ioc_guid, cisco_oui, sizeof cisco_oui)); in srp_target_is_topspin()
270 static int srp_init_ib_qp(struct srp_target_port *target, in srp_init_ib_qp() argument
280 ret = ib_find_cached_pkey(target->srp_host->srp_dev->dev, in srp_init_ib_qp()
281 target->srp_host->port, in srp_init_ib_qp()
282 be16_to_cpu(target->ib_cm.pkey), in srp_init_ib_qp()
290 attr->port_num = target->srp_host->port; in srp_init_ib_qp()
305 struct srp_target_port *target = ch->target; in srp_new_ib_cm_id() local
308 new_cm_id = ib_create_cm_id(target->srp_host->srp_dev->dev, in srp_new_ib_cm_id()
316 if (rdma_cap_opa_ah(target->srp_host->srp_dev->dev, in srp_new_ib_cm_id()
317 target->srp_host->port)) in srp_new_ib_cm_id()
321 ch->ib_cm.path.sgid = target->sgid; in srp_new_ib_cm_id()
322 ch->ib_cm.path.dgid = target->ib_cm.orig_dgid; in srp_new_ib_cm_id()
323 ch->ib_cm.path.pkey = target->ib_cm.pkey; in srp_new_ib_cm_id()
324 ch->ib_cm.path.service_id = target->ib_cm.service_id; in srp_new_ib_cm_id()
331 struct srp_target_port *target = ch->target; in srp_new_rdma_cm_id() local
335 new_cm_id = rdma_create_id(target->net, srp_rdma_cm_handler, ch, in srp_new_rdma_cm_id()
344 ret = rdma_resolve_addr(new_cm_id, target->rdma_cm.src_specified ? in srp_new_rdma_cm_id()
345 &target->rdma_cm.src.sa : NULL, in srp_new_rdma_cm_id()
346 &target->rdma_cm.dst.sa, in srp_new_rdma_cm_id()
350 &target->rdma_cm.src, &target->rdma_cm.dst, ret); in srp_new_rdma_cm_id()
360 &target->rdma_cm.dst, ret); in srp_new_rdma_cm_id()
375 struct srp_target_port *target = ch->target; in srp_new_cm_id() local
377 return target->using_rdma_cm ? srp_new_rdma_cm_id(ch) : in srp_new_cm_id()
497 static struct srp_fr_pool *srp_alloc_fr_pool(struct srp_target_port *target) in srp_alloc_fr_pool() argument
499 struct srp_device *dev = target->srp_host->srp_dev; in srp_alloc_fr_pool()
501 return srp_create_fr_pool(dev->dev, dev->pd, target->mr_pool_size, in srp_alloc_fr_pool()
525 struct srp_target_port *target = ch->target; in srp_create_ch_ib() local
526 struct srp_device *dev = target->srp_host->srp_dev; in srp_create_ch_ib()
532 const int m = 1 + dev->use_fast_reg * target->mr_per_cmd * 2; in srp_create_ch_ib()
540 recv_cq = ib_alloc_cq(dev->dev, ch, target->queue_size + 1, in srp_create_ch_ib()
547 send_cq = ib_alloc_cq(dev->dev, ch, m * target->queue_size, in srp_create_ch_ib()
555 init_attr->cap.max_send_wr = m * target->queue_size; in srp_create_ch_ib()
556 init_attr->cap.max_recv_wr = target->queue_size + 1; in srp_create_ch_ib()
566 if (target->using_rdma_cm) { in srp_create_ch_ib()
572 ret = srp_init_ib_qp(target, qp); in srp_create_ch_ib()
586 fr_pool = srp_alloc_fr_pool(target); in srp_create_ch_ib()
589 shost_printk(KERN_WARNING, target->scsi_host, PFX in srp_create_ch_ib()
616 if (target->using_rdma_cm) in srp_create_ch_ib()
636 static void srp_free_ch_ib(struct srp_target_port *target, in srp_free_ch_ib() argument
639 struct srp_device *dev = target->srp_host->srp_dev; in srp_free_ch_ib()
642 if (!ch->target) in srp_free_ch_ib()
645 if (target->using_rdma_cm) { in srp_free_ch_ib()
676 ch->target = NULL; in srp_free_ch_ib()
682 for (i = 0; i < target->queue_size; ++i) in srp_free_ch_ib()
683 srp_free_iu(target->srp_host, ch->rx_ring[i]); in srp_free_ch_ib()
688 for (i = 0; i < target->queue_size; ++i) in srp_free_ch_ib()
689 srp_free_iu(target->srp_host, ch->tx_ring[i]); in srp_free_ch_ib()
700 struct srp_target_port *target = ch->target; in srp_path_rec_completion() local
704 shost_printk(KERN_ERR, target->scsi_host, in srp_path_rec_completion()
713 struct srp_target_port *target = ch->target; in srp_ib_lookup_path() local
721 target->srp_host->srp_dev->dev, in srp_ib_lookup_path()
722 target->srp_host->port, in srp_ib_lookup_path()
741 shost_printk(KERN_WARNING, target->scsi_host, in srp_ib_lookup_path()
744 be16_to_cpu(target->ib_cm.pkey), in srp_ib_lookup_path()
745 be64_to_cpu(target->ib_cm.service_id)); in srp_ib_lookup_path()
752 struct srp_target_port *target = ch->target; in srp_rdma_lookup_path() local
764 shost_printk(KERN_WARNING, target->scsi_host, in srp_rdma_lookup_path()
772 struct srp_target_port *target = ch->target; in srp_lookup_path() local
774 return target->using_rdma_cm ? srp_rdma_lookup_path(ch) : in srp_lookup_path()
798 struct srp_target_port *target = ch->target; in srp_send_req() local
813 req->ib_param.retry_count = target->tl_retry_count; in srp_send_req()
835 if (target->using_rdma_cm) { in srp_send_req()
857 subnet_timeout = srp_get_subnet_timeout(target->srp_host); in srp_send_req()
861 req->ib_param.service_id = target->ib_cm.service_id; in srp_send_req()
884 if (target->io_class == SRP_REV10_IB_IO_CLASS) { in srp_send_req()
885 memcpy(ipi, &target->sgid.global.interface_id, 8); in srp_send_req()
886 memcpy(ipi + 8, &target->initiator_ext, 8); in srp_send_req()
887 memcpy(tpi, &target->ioc_guid, 8); in srp_send_req()
888 memcpy(tpi + 8, &target->id_ext, 8); in srp_send_req()
890 memcpy(ipi, &target->initiator_ext, 8); in srp_send_req()
891 memcpy(ipi + 8, &target->sgid.global.interface_id, 8); in srp_send_req()
892 memcpy(tpi, &target->id_ext, 8); in srp_send_req()
893 memcpy(tpi + 8, &target->ioc_guid, 8); in srp_send_req()
901 if (srp_target_is_topspin(target)) { in srp_send_req()
902 shost_printk(KERN_DEBUG, target->scsi_host, in srp_send_req()
904 "activated for target GUID %016llx\n", in srp_send_req()
905 be64_to_cpu(target->ioc_guid)); in srp_send_req()
907 memcpy(ipi + 8, &target->srp_host->srp_dev->dev->node_guid, 8); in srp_send_req()
910 if (target->using_rdma_cm) in srp_send_req()
920 static bool srp_queue_remove_work(struct srp_target_port *target) in srp_queue_remove_work() argument
924 spin_lock_irq(&target->lock); in srp_queue_remove_work()
925 if (target->state != SRP_TARGET_REMOVED) { in srp_queue_remove_work()
926 target->state = SRP_TARGET_REMOVED; in srp_queue_remove_work()
929 spin_unlock_irq(&target->lock); in srp_queue_remove_work()
932 queue_work(srp_remove_wq, &target->remove_work); in srp_queue_remove_work()
937 static void srp_disconnect_target(struct srp_target_port *target) in srp_disconnect_target() argument
944 for (i = 0; i < target->ch_count; i++) { in srp_disconnect_target()
945 ch = &target->ch[i]; in srp_disconnect_target()
948 if (target->using_rdma_cm) { in srp_disconnect_target()
957 shost_printk(KERN_DEBUG, target->scsi_host, in srp_disconnect_target()
965 struct srp_target_port *target = host_to_target(shost); in srp_exit_cmd_priv() local
966 struct srp_device *dev = target->srp_host->srp_dev; in srp_exit_cmd_priv()
973 target->indirect_size, in srp_exit_cmd_priv()
983 struct srp_target_port *target = host_to_target(shost); in srp_init_cmd_priv() local
984 struct srp_device *srp_dev = target->srp_host->srp_dev; in srp_init_cmd_priv()
991 req->fr_list = kmalloc_array(target->mr_per_cmd, sizeof(void *), in srp_init_cmd_priv()
996 req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL); in srp_init_cmd_priv()
1001 target->indirect_size, in srp_init_cmd_priv()
1037 static void srp_remove_target(struct srp_target_port *target) in srp_remove_target() argument
1042 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); in srp_remove_target()
1044 srp_del_scsi_host_attr(target->scsi_host); in srp_remove_target()
1045 srp_rport_get(target->rport); in srp_remove_target()
1046 srp_remove_host(target->scsi_host); in srp_remove_target()
1047 scsi_remove_host(target->scsi_host); in srp_remove_target()
1048 srp_stop_rport_timers(target->rport); in srp_remove_target()
1049 srp_disconnect_target(target); in srp_remove_target()
1050 kobj_ns_drop(KOBJ_NS_TYPE_NET, target->net); in srp_remove_target()
1051 for (i = 0; i < target->ch_count; i++) { in srp_remove_target()
1052 ch = &target->ch[i]; in srp_remove_target()
1053 srp_free_ch_ib(target, ch); in srp_remove_target()
1055 cancel_work_sync(&target->tl_err_work); in srp_remove_target()
1056 srp_rport_put(target->rport); in srp_remove_target()
1057 kfree(target->ch); in srp_remove_target()
1058 target->ch = NULL; in srp_remove_target()
1060 spin_lock(&target->srp_host->target_lock); in srp_remove_target()
1061 list_del(&target->list); in srp_remove_target()
1062 spin_unlock(&target->srp_host->target_lock); in srp_remove_target()
1064 scsi_host_put(target->scsi_host); in srp_remove_target()
1069 struct srp_target_port *target = in srp_remove_work() local
1072 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); in srp_remove_work()
1074 srp_remove_target(target); in srp_remove_work()
1079 struct srp_target_port *target = rport->lld_data; in srp_rport_delete() local
1081 srp_queue_remove_work(target); in srp_rport_delete()
1086 * @target: SRP target port.
1088 static int srp_connected_ch(struct srp_target_port *target) in srp_connected_ch() argument
1092 for (i = 0; i < target->ch_count; i++) in srp_connected_ch()
1093 c += target->ch[i].connected; in srp_connected_ch()
1101 struct srp_target_port *target = ch->target; in srp_connect_ch() local
1104 WARN_ON_ONCE(!multich && srp_connected_ch(target) > 0); in srp_connect_ch()
1141 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_connect_ch()
1180 struct srp_target_port *target = ch->target; in srp_unmap_data() local
1181 struct srp_device *dev = target->srp_host->srp_dev; in srp_unmap_data()
1196 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_unmap_data()
1200 &target->tl_err_work); in srp_unmap_data()
1249 * @req_lim_delta: Amount to be added to @target->req_lim.
1283 struct srp_target_port *target = context->srp_target; in srp_terminate_cmd() local
1285 struct srp_rdma_ch *ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)]; in srp_terminate_cmd()
1295 struct srp_target_port *target = rport->lld_data; in srp_terminate_io() local
1296 struct srp_terminate_context context = { .srp_target = target, in srp_terminate_io()
1299 scsi_host_busy_iter(target->scsi_host, srp_terminate_cmd, &context); in srp_terminate_io()
1302 /* Calculate maximum initiator to target information unit length. */
1333 struct srp_target_port *target = rport->lld_data; in srp_rport_reconnect() local
1335 uint32_t max_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, in srp_rport_reconnect()
1337 target->max_it_iu_size); in srp_rport_reconnect()
1341 srp_disconnect_target(target); in srp_rport_reconnect()
1343 if (target->state == SRP_TARGET_SCANNING) in srp_rport_reconnect()
1347 * Now get a new local CM ID so that we avoid confusing the target in in srp_rport_reconnect()
1351 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1352 ch = &target->ch[i]; in srp_rport_reconnect()
1357 .srp_target = target, .scsi_result = DID_RESET << 16}; in srp_rport_reconnect()
1359 scsi_host_busy_iter(target->scsi_host, srp_terminate_cmd, in srp_rport_reconnect()
1362 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1363 ch = &target->ch[i]; in srp_rport_reconnect()
1372 for (j = 0; j < target->queue_size; ++j) in srp_rport_reconnect()
1376 target->qp_in_error = false; in srp_rport_reconnect()
1378 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1379 ch = &target->ch[i]; in srp_rport_reconnect()
1387 shost_printk(KERN_INFO, target->scsi_host, in srp_rport_reconnect()
1425 struct srp_target_port *target = ch->target; in srp_map_finish_fr() local
1426 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_finish_fr()
1433 shost_printk(KERN_ERR, ch->target->scsi_host, in srp_map_finish_fr()
1435 ch->target->mr_per_cmd); in srp_map_finish_fr()
1441 if (sg_nents == 1 && target->global_rkey) { in srp_map_finish_fr()
1446 target->global_rkey); in srp_map_finish_fr()
1506 state->fr.end = req->fr_list + ch->target->mr_per_cmd; in srp_map_sg_fr()
1531 struct srp_target_port *target = ch->target; in srp_map_sg_dma() local
1537 target->global_rkey); in srp_map_sg_dma()
1554 struct srp_target_port *target = ch->target; in srp_map_idb() local
1555 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_idb()
1593 struct srp_device *dev = ch->target->srp_host->srp_dev; in srp_check_mapping()
1623 struct srp_target_port *target = ch->target; in srp_map_data() local
1643 shost_printk(KERN_WARNING, target->scsi_host, in srp_map_data()
1653 dev = target->srp_host->srp_dev; in srp_map_data()
1676 sge[i].lkey = target->lkey; in srp_map_data()
1686 if (count == 1 && target->global_rkey) { in srp_map_data()
1697 buf->key = cpu_to_be32(target->global_rkey); in srp_map_data()
1711 target->indirect_size, DMA_TO_DEVICE); in srp_map_data()
1732 * target is not using an external indirect table, we are in srp_map_data()
1748 if (unlikely(target->cmd_sg_cnt < state.ndesc && in srp_map_data()
1749 !target->allow_ext_sg)) { in srp_map_data()
1750 shost_printk(KERN_ERR, target->scsi_host, in srp_map_data()
1756 count = min(state.ndesc, target->cmd_sg_cnt); in srp_map_data()
1768 if (!target->global_rkey) { in srp_map_data()
1775 idb_rkey = cpu_to_be32(target->global_rkey); in srp_map_data()
1801 if (ret == -ENOMEM && req->nmdesc >= target->mr_pool_size) in srp_map_data()
1831 * - SRP_IU_RSP: 1, since a conforming SRP target never sends more than
1837 struct srp_target_port *target = ch->target; in __srp_get_tx_iu() local
1848 /* Initiator responses to target requests do not consume credits */ in __srp_get_tx_iu()
1851 ++target->zero_req_lim; in __srp_get_tx_iu()
1891 struct srp_target_port *target = ch->target; in srp_post_send() local
1899 iu->sge[0].lkey = target->lkey; in srp_post_send()
1915 struct srp_target_port *target = ch->target; in srp_post_recv() local
1921 list.lkey = target->lkey; in srp_post_recv()
1935 struct srp_target_port *target = ch->target; in srp_process_rsp() local
1949 shost_printk(KERN_ERR, target->scsi_host, in srp_process_rsp()
1955 scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag); in srp_process_rsp()
1961 shost_printk(KERN_ERR, target->scsi_host, in srp_process_rsp()
1963 rsp->tag, ch - target->ch, ch->qp->qp_num); in srp_process_rsp()
1995 struct srp_target_port *target = ch->target; in srp_response_common() local
1996 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_response_common()
2007 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_response_common()
2019 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_response_common()
2037 shost_printk(KERN_ERR, ch->target->scsi_host, PFX in srp_process_cred_req()
2044 struct srp_target_port *target = ch->target; in srp_process_aer_req() local
2051 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_process_aer_req()
2055 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_process_aer_req()
2063 struct srp_target_port *target = ch->target; in srp_recv_done() local
2064 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_recv_done()
2079 shost_printk(KERN_ERR, target->scsi_host, in srp_recv_done()
2099 /* XXX Handle target logout */ in srp_recv_done()
2100 shost_printk(KERN_WARNING, target->scsi_host, in srp_recv_done()
2101 PFX "Got target logout request\n"); in srp_recv_done()
2105 shost_printk(KERN_WARNING, target->scsi_host, in srp_recv_done()
2115 shost_printk(KERN_ERR, target->scsi_host, in srp_recv_done()
2121 * @work: Work structure embedded in an SRP target port.
2124 * hence the target->rport test.
2128 struct srp_target_port *target; in srp_tl_err_work() local
2130 target = container_of(work, struct srp_target_port, tl_err_work); in srp_tl_err_work()
2131 if (target->rport) in srp_tl_err_work()
2132 srp_start_tl_fail_timers(target->rport); in srp_tl_err_work()
2139 struct srp_target_port *target = ch->target; in srp_handle_qp_err() local
2141 if (ch->connected && !target->qp_in_error) { in srp_handle_qp_err()
2142 shost_printk(KERN_ERR, target->scsi_host, in srp_handle_qp_err()
2146 queue_work(system_long_wq, &target->tl_err_work); in srp_handle_qp_err()
2148 target->qp_in_error = true; in srp_handle_qp_err()
2154 struct srp_target_port *target = host_to_target(shost); in srp_queuecommand() local
2164 scmnd->result = srp_chkready(target->rport); in srp_queuecommand()
2170 ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)]; in srp_queuecommand()
2179 dev = target->srp_host->srp_dev->dev; in srp_queuecommand()
2202 shost_printk(KERN_ERR, target->scsi_host, in srp_queuecommand()
2219 shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n"); in srp_queuecommand()
2255 struct srp_target_port *target = ch->target; in srp_alloc_iu_bufs() local
2258 ch->rx_ring = kcalloc(target->queue_size, sizeof(*ch->rx_ring), in srp_alloc_iu_bufs()
2262 ch->tx_ring = kcalloc(target->queue_size, sizeof(*ch->tx_ring), in srp_alloc_iu_bufs()
2267 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2268 ch->rx_ring[i] = srp_alloc_iu(target->srp_host, in srp_alloc_iu_bufs()
2275 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2276 ch->tx_ring[i] = srp_alloc_iu(target->srp_host, in srp_alloc_iu_bufs()
2288 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2289 srp_free_iu(target->srp_host, ch->rx_ring[i]); in srp_alloc_iu_bufs()
2290 srp_free_iu(target->srp_host, ch->tx_ring[i]); in srp_alloc_iu_bufs()
2317 * Set target->rq_tmo_jiffies to one second more than the largest time in srp_compute_rq_tmo()
2334 struct srp_target_port *target = ch->target; in srp_cm_rep_handler() local
2345 ch->max_it_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, in srp_cm_rep_handler()
2347 target->max_it_iu_size); in srp_cm_rep_handler()
2352 shost_printk(KERN_DEBUG, target->scsi_host, in srp_cm_rep_handler()
2359 target->scsi_host->can_queue in srp_cm_rep_handler()
2361 target->scsi_host->can_queue); in srp_cm_rep_handler()
2362 target->scsi_host->cmd_per_lun in srp_cm_rep_handler()
2363 = min_t(int, target->scsi_host->can_queue, in srp_cm_rep_handler()
2364 target->scsi_host->cmd_per_lun); in srp_cm_rep_handler()
2366 shost_printk(KERN_WARNING, target->scsi_host, in srp_cm_rep_handler()
2378 for (i = 0; i < target->queue_size; i++) { in srp_cm_rep_handler()
2386 if (!target->using_rdma_cm) { in srp_cm_rep_handler()
2406 target->rq_tmo_jiffies = srp_compute_rq_tmo(qp_attr, attr_mask); in srp_cm_rep_handler()
2426 struct srp_target_port *target = ch->target; in srp_ib_cm_rej_handler() local
2427 struct Scsi_Host *shost = target->scsi_host; in srp_ib_cm_rej_handler()
2445 if (srp_target_is_topspin(target)) { in srp_ib_cm_rej_handler()
2456 PFX "Topspin/Cisco redirect to target port GID %016llx%016llx\n", in srp_ib_cm_rej_handler()
2486 target->sgid.raw, in srp_ib_cm_rej_handler()
2487 target->ib_cm.orig_dgid.raw, in srp_ib_cm_rej_handler()
2512 struct srp_target_port *target = ch->target; in srp_ib_cm_handler() local
2517 shost_printk(KERN_DEBUG, target->scsi_host, in srp_ib_cm_handler()
2529 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n"); in srp_ib_cm_handler()
2536 shost_printk(KERN_WARNING, target->scsi_host, in srp_ib_cm_handler()
2540 shost_printk(KERN_ERR, target->scsi_host, in srp_ib_cm_handler()
2542 queue_work(system_long_wq, &target->tl_err_work); in srp_ib_cm_handler()
2546 shost_printk(KERN_ERR, target->scsi_host, in srp_ib_cm_handler()
2559 shost_printk(KERN_WARNING, target->scsi_host, in srp_ib_cm_handler()
2573 struct srp_target_port *target = ch->target; in srp_rdma_cm_rej_handler() local
2574 struct Scsi_Host *shost = target->scsi_host; in srp_rdma_cm_rej_handler()
2624 struct srp_target_port *target = ch->target; in srp_rdma_cm_handler() local
2650 shost_printk(KERN_DEBUG, target->scsi_host, in srp_rdma_cm_handler()
2662 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n"); in srp_rdma_cm_handler()
2670 shost_printk(KERN_WARNING, target->scsi_host, in srp_rdma_cm_handler()
2675 queue_work(system_long_wq, &target->tl_err_work); in srp_rdma_cm_handler()
2680 shost_printk(KERN_ERR, target->scsi_host, in srp_rdma_cm_handler()
2688 shost_printk(KERN_WARNING, target->scsi_host, in srp_rdma_cm_handler()
2717 struct srp_target_port *target = ch->target; in srp_send_tsk_mgmt() local
2718 struct srp_rport *rport = target->rport; in srp_send_tsk_mgmt()
2719 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_send_tsk_mgmt()
2724 if (!ch->connected || target->qp_in_error) in srp_send_tsk_mgmt()
2782 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_abort() local
2788 shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n"); in srp_abort()
2792 if (WARN_ON_ONCE(ch_idx >= target->ch_count)) in srp_abort()
2794 ch = &target->ch[ch_idx]; in srp_abort()
2797 shost_printk(KERN_ERR, target->scsi_host, in srp_abort()
2804 if (target->rport->state == SRP_RPORT_LOST) in srp_abort()
2812 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_reset_device() local
2816 shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); in srp_reset_device()
2818 ch = &target->ch[0]; in srp_reset_device()
2830 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_reset_host() local
2832 shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host called\n"); in srp_reset_host()
2834 return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED; in srp_reset_host()
2840 struct srp_target_port *target = host_to_target(shost); in srp_target_alloc() local
2842 if (target->target_can_queue) in srp_target_alloc()
2843 starget->can_queue = target->target_can_queue; in srp_target_alloc()
2850 struct srp_target_port *target = host_to_target(shost); in srp_slave_configure() local
2855 timeout = max_t(unsigned, 30 * HZ, target->rq_tmo_jiffies); in srp_slave_configure()
2865 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in id_ext_show() local
2867 return sysfs_emit(buf, "0x%016llx\n", be64_to_cpu(target->id_ext)); in id_ext_show()
2875 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in ioc_guid_show() local
2877 return sysfs_emit(buf, "0x%016llx\n", be64_to_cpu(target->ioc_guid)); in ioc_guid_show()
2885 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in service_id_show() local
2887 if (target->using_rdma_cm) in service_id_show()
2890 be64_to_cpu(target->ib_cm.service_id)); in service_id_show()
2898 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in pkey_show() local
2900 if (target->using_rdma_cm) in pkey_show()
2903 return sysfs_emit(buf, "0x%04x\n", be16_to_cpu(target->ib_cm.pkey)); in pkey_show()
2911 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in sgid_show() local
2913 return sysfs_emit(buf, "%pI6\n", target->sgid.raw); in sgid_show()
2921 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in dgid_show() local
2922 struct srp_rdma_ch *ch = &target->ch[0]; in dgid_show()
2924 if (target->using_rdma_cm) in dgid_show()
2935 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in orig_dgid_show() local
2937 if (target->using_rdma_cm) in orig_dgid_show()
2940 return sysfs_emit(buf, "%pI6\n", target->ib_cm.orig_dgid.raw); in orig_dgid_show()
2948 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in req_lim_show() local
2952 for (i = 0; i < target->ch_count; i++) { in req_lim_show()
2953 ch = &target->ch[i]; in req_lim_show()
2965 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in zero_req_lim_show() local
2967 return sysfs_emit(buf, "%d\n", target->zero_req_lim); in zero_req_lim_show()
2975 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in local_ib_port_show() local
2977 return sysfs_emit(buf, "%u\n", target->srp_host->port); in local_ib_port_show()
2985 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in local_ib_device_show() local
2988 dev_name(&target->srp_host->srp_dev->dev->dev)); in local_ib_device_show()
2996 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in ch_count_show() local
2998 return sysfs_emit(buf, "%d\n", target->ch_count); in ch_count_show()
3006 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in comp_vector_show() local
3008 return sysfs_emit(buf, "%d\n", target->comp_vector); in comp_vector_show()
3016 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in tl_retry_count_show() local
3018 return sysfs_emit(buf, "%d\n", target->tl_retry_count); in tl_retry_count_show()
3026 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in cmd_sg_entries_show() local
3028 return sysfs_emit(buf, "%u\n", target->cmd_sg_cnt); in cmd_sg_entries_show()
3036 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in allow_ext_sg_show() local
3038 return sysfs_emit(buf, "%s\n", target->allow_ext_sg ? "true" : "false"); in allow_ext_sg_show()
3103 * < 0 upon failure. Caller is responsible for SRP target port cleanup.
3104 * 0 and target->state == SRP_TARGET_REMOVED if asynchronous target port
3106 * 0 and target->state != SRP_TARGET_REMOVED upon success.
3108 static int srp_add_target(struct srp_host *host, struct srp_target_port *target) in srp_add_target() argument
3113 target->state = SRP_TARGET_SCANNING; in srp_add_target()
3114 sprintf(target->target_name, "SRP.T10:%016llX", in srp_add_target()
3115 be64_to_cpu(target->id_ext)); in srp_add_target()
3117 if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dev.parent)) in srp_add_target()
3120 memcpy(ids.port_id, &target->id_ext, 8); in srp_add_target()
3121 memcpy(ids.port_id + 8, &target->ioc_guid, 8); in srp_add_target()
3123 rport = srp_rport_add(target->scsi_host, &ids); in srp_add_target()
3125 scsi_remove_host(target->scsi_host); in srp_add_target()
3129 rport->lld_data = target; in srp_add_target()
3130 target->rport = rport; in srp_add_target()
3133 list_add_tail(&target->list, &host->target_list); in srp_add_target()
3136 scsi_scan_target(&target->scsi_host->shost_gendev, in srp_add_target()
3137 0, target->scsi_id, SCAN_WILD_CARD, SCSI_SCAN_INITIAL); in srp_add_target()
3139 if (srp_connected_ch(target) < target->ch_count || in srp_add_target()
3140 target->qp_in_error) { in srp_add_target()
3141 shost_printk(KERN_INFO, target->scsi_host, in srp_add_target()
3143 srp_queue_remove_work(target); in srp_add_target()
3148 dev_name(&target->scsi_host->shost_gendev), in srp_add_target()
3149 srp_sdev_count(target->scsi_host)); in srp_add_target()
3151 spin_lock_irq(&target->lock); in srp_add_target()
3152 if (target->state == SRP_TARGET_SCANNING) in srp_add_target()
3153 target->state = SRP_TARGET_LIVE; in srp_add_target()
3154 spin_unlock_irq(&target->lock); in srp_add_target()
3179 * srp_conn_unique() - check whether the connection to a target is unique
3181 * @target: SRP target port.
3184 struct srp_target_port *target) in srp_conn_unique() argument
3189 if (target->state == SRP_TARGET_REMOVED) in srp_conn_unique()
3196 if (t != target && in srp_conn_unique()
3197 target->id_ext == t->id_ext && in srp_conn_unique()
3198 target->ioc_guid == t->ioc_guid && in srp_conn_unique()
3199 target->initiator_ext == t->initiator_ext) { in srp_conn_unique()
3211 * Target ports are added by writing
3322 struct srp_target_port *target) in srp_parse_options() argument
3359 target->id_ext = cpu_to_be64(ull); in srp_parse_options()
3375 target->ioc_guid = cpu_to_be64(ull); in srp_parse_options()
3391 ret = hex2bin(target->ib_cm.orig_dgid.raw, p, 16); in srp_parse_options()
3403 target->ib_cm.pkey = cpu_to_be16(token); in srp_parse_options()
3418 target->ib_cm.service_id = cpu_to_be64(ull); in srp_parse_options()
3428 ret = srp_parse_in(net, &target->rdma_cm.src.ss, p, in srp_parse_options()
3435 target->rdma_cm.src_specified = true; in srp_parse_options()
3445 ret = srp_parse_in(net, &target->rdma_cm.dst.ss, p, in srp_parse_options()
3454 target->using_rdma_cm = true; in srp_parse_options()
3464 target->scsi_host->max_sectors = token; in srp_parse_options()
3479 target->scsi_host->can_queue = token; in srp_parse_options()
3480 target->queue_size = token + SRP_RSP_SQ_SIZE + in srp_parse_options()
3483 target->scsi_host->cmd_per_lun = token; in srp_parse_options()
3499 target->scsi_host->cmd_per_lun = token; in srp_parse_options()
3515 target->target_can_queue = token; in srp_parse_options()
3532 target->io_class = token; in srp_parse_options()
3547 target->initiator_ext = cpu_to_be64(ull); in srp_parse_options()
3564 target->cmd_sg_cnt = token; in srp_parse_options()
3573 target->allow_ext_sg = !!token; in srp_parse_options()
3589 target->sg_tablesize = token; in srp_parse_options()
3604 target->comp_vector = token; in srp_parse_options()
3620 target->tl_retry_count = token; in srp_parse_options()
3631 pr_warn("bad maximum initiator to target IU size '%s'\n", p); in srp_parse_options()
3635 target->max_it_iu_size = token; in srp_parse_options()
3650 target->ch_count = token; in srp_parse_options()
3654 pr_warn("unknown parameter or missing value '%s' in target creation request\n", in srp_parse_options()
3668 pr_warn("target creation request is missing one or more parameters\n"); in srp_parse_options()
3670 if (target->scsi_host->cmd_per_lun > target->scsi_host->can_queue in srp_parse_options()
3673 target->scsi_host->cmd_per_lun, in srp_parse_options()
3674 target->scsi_host->can_queue); in srp_parse_options()
3688 struct srp_target_port *target; in add_target_store() local
3712 target = host_to_target(target_host); in add_target_store()
3714 target->net = kobj_ns_grab_current(KOBJ_NS_TYPE_NET); in add_target_store()
3715 target->io_class = SRP_REV16A_IB_IO_CLASS; in add_target_store()
3716 target->scsi_host = target_host; in add_target_store()
3717 target->srp_host = host; in add_target_store()
3718 target->lkey = host->srp_dev->pd->local_dma_lkey; in add_target_store()
3719 target->global_rkey = host->srp_dev->global_rkey; in add_target_store()
3720 target->cmd_sg_cnt = cmd_sg_entries; in add_target_store()
3721 target->sg_tablesize = indirect_sg_entries ? : cmd_sg_entries; in add_target_store()
3722 target->allow_ext_sg = allow_ext_sg; in add_target_store()
3723 target->tl_retry_count = 7; in add_target_store()
3724 target->queue_size = SRP_DEFAULT_QUEUE_SIZE; in add_target_store()
3730 scsi_host_get(target->scsi_host); in add_target_store()
3736 ret = srp_parse_options(target->net, buf, target); in add_target_store()
3740 if (!srp_conn_unique(target->srp_host, target)) { in add_target_store()
3741 if (target->using_rdma_cm) { in add_target_store()
3742 shost_printk(KERN_INFO, target->scsi_host, in add_target_store()
3743 PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;dest=%pIS\n", in add_target_store()
3744 be64_to_cpu(target->id_ext), in add_target_store()
3745 be64_to_cpu(target->ioc_guid), in add_target_store()
3746 &target->rdma_cm.dst); in add_target_store()
3748 shost_printk(KERN_INFO, target->scsi_host, in add_target_store()
3749 …PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;initiator_ext=%016llx\n… in add_target_store()
3750 be64_to_cpu(target->id_ext), in add_target_store()
3751 be64_to_cpu(target->ioc_guid), in add_target_store()
3752 be64_to_cpu(target->initiator_ext)); in add_target_store()
3758 if (!srp_dev->has_fr && !target->allow_ext_sg && in add_target_store()
3759 target->cmd_sg_cnt < target->sg_tablesize) { in add_target_store()
3761 target->sg_tablesize = target->cmd_sg_cnt; in add_target_store()
3785 (target->scsi_host->max_sectors + 1 + in add_target_store()
3789 (target->sg_tablesize + in add_target_store()
3794 target->scsi_host->max_sectors, srp_dev->max_pages_per_mr, srp_dev->mr_page_size, in add_target_store()
3798 target_host->sg_tablesize = target->sg_tablesize; in add_target_store()
3799 target->mr_pool_size = target->scsi_host->can_queue * mr_per_cmd; in add_target_store()
3800 target->mr_per_cmd = mr_per_cmd; in add_target_store()
3801 target->indirect_size = target->sg_tablesize * in add_target_store()
3803 max_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, in add_target_store()
3805 target->max_it_iu_size); in add_target_store()
3807 INIT_WORK(&target->tl_err_work, srp_tl_err_work); in add_target_store()
3808 INIT_WORK(&target->remove_work, srp_remove_work); in add_target_store()
3809 spin_lock_init(&target->lock); in add_target_store()
3810 ret = rdma_query_gid(ibdev, host->port, 0, &target->sgid); in add_target_store()
3815 if (target->ch_count == 0) { in add_target_store()
3816 target->ch_count = in add_target_store()
3823 target->ch = kcalloc(target->ch_count, sizeof(*target->ch), in add_target_store()
3825 if (!target->ch) in add_target_store()
3828 for (ch_idx = 0; ch_idx < target->ch_count; ++ch_idx) { in add_target_store()
3829 ch = &target->ch[ch_idx]; in add_target_store()
3830 ch->target = target; in add_target_store()
3846 if (target->using_rdma_cm) in add_target_store()
3848 &target->rdma_cm.dst); in add_target_store()
3851 target->ib_cm.orig_dgid.raw); in add_target_store()
3852 shost_printk(KERN_ERR, target->scsi_host, in add_target_store()
3855 target->ch_count, dst); in add_target_store()
3859 srp_free_ch_ib(target, ch); in add_target_store()
3860 target->ch_count = ch - target->ch; in add_target_store()
3868 target->scsi_host->nr_hw_queues = target->ch_count; in add_target_store()
3870 ret = srp_add_target(host, target); in add_target_store()
3874 if (target->state != SRP_TARGET_REMOVED) { in add_target_store()
3875 if (target->using_rdma_cm) { in add_target_store()
3876 shost_printk(KERN_DEBUG, target->scsi_host, PFX in add_target_store()
3877 "new target: id_ext %016llx ioc_guid %016llx sgid %pI6 dest %pIS\n", in add_target_store()
3878 be64_to_cpu(target->id_ext), in add_target_store()
3879 be64_to_cpu(target->ioc_guid), in add_target_store()
3880 target->sgid.raw, &target->rdma_cm.dst); in add_target_store()
3882 shost_printk(KERN_DEBUG, target->scsi_host, PFX in add_target_store()
3883 … "new target: id_ext %016llx ioc_guid %016llx pkey %04x service_id %016llx sgid %pI6 dgid %pI6\n", in add_target_store()
3884 be64_to_cpu(target->id_ext), in add_target_store()
3885 be64_to_cpu(target->ioc_guid), in add_target_store()
3886 be16_to_cpu(target->ib_cm.pkey), in add_target_store()
3887 be64_to_cpu(target->ib_cm.service_id), in add_target_store()
3888 target->sgid.raw, in add_target_store()
3889 target->ib_cm.orig_dgid.raw); in add_target_store()
3899 scsi_host_put(target->scsi_host); in add_target_store()
3906 if (target->state != SRP_TARGET_REMOVED) in add_target_store()
3907 kobj_ns_drop(KOBJ_NS_TYPE_NET, target->net); in add_target_store()
3908 scsi_host_put(target->scsi_host); in add_target_store()
3914 srp_disconnect_target(target); in add_target_store()
3917 for (i = 0; i < target->ch_count; i++) { in add_target_store()
3918 ch = &target->ch[i]; in add_target_store()
3919 srp_free_ch_ib(target, ch); in add_target_store()
3922 kfree(target->ch); in add_target_store()
4082 struct srp_target_port *target; in srp_remove_one() local
4088 * Remove the add_target sysfs entry so that no new target ports in srp_remove_one()
4094 * Remove all target ports. in srp_remove_one()
4097 list_for_each_entry(target, &host->target_list, list) in srp_remove_one()
4098 srp_queue_remove_work(target); in srp_remove_one()
4104 * target->tl_err_work so waiting for the remove works to in srp_remove_one()