1 /* 2 * Copyright (c) 2005 Cisco Systems. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: 9 * 10 * Redistribution and use in source and binary forms, with or 11 * without modification, are permitted provided that the following 12 * conditions are met: 13 * 14 * - Redistributions of source code must retain the above 15 * copyright notice, this list of conditions and the following 16 * disclaimer. 17 * 18 * - Redistributions in binary form must reproduce the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer in the documentation and/or other materials 21 * provided with the distribution. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 */ 32 33 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 34 35 #include <linux/module.h> 36 #include <linux/hex.h> 37 #include <linux/init.h> 38 #include <linux/slab.h> 39 #include <linux/err.h> 40 #include <linux/string.h> 41 #include <linux/parser.h> 42 #include <linux/random.h> 43 #include <linux/jiffies.h> 44 #include <linux/lockdep.h> 45 #include <linux/inet.h> 46 #include <net/net_namespace.h> 47 #include <rdma/ib_cache.h> 48 49 #include <linux/atomic.h> 50 51 #include <scsi/scsi.h> 52 #include <scsi/scsi_device.h> 53 #include <scsi/scsi_dbg.h> 54 #include <scsi/scsi_tcq.h> 55 #include <scsi/srp.h> 56 #include <scsi/scsi_transport_srp.h> 57 58 #include "ib_srp.h" 59 60 #define DRV_NAME "ib_srp" 61 #define PFX DRV_NAME ": " 62 63 MODULE_AUTHOR("Roland Dreier"); 64 MODULE_DESCRIPTION("InfiniBand SCSI RDMA Protocol initiator"); 65 MODULE_LICENSE("Dual BSD/GPL"); 66 67 static unsigned int srp_sg_tablesize; 68 static unsigned int cmd_sg_entries; 69 static unsigned int indirect_sg_entries; 70 static bool allow_ext_sg; 71 static bool register_always = true; 72 static bool never_register; 73 static int topspin_workarounds = 1; 74 75 module_param(srp_sg_tablesize, uint, 0444); 76 MODULE_PARM_DESC(srp_sg_tablesize, "Deprecated name for cmd_sg_entries"); 77 78 module_param(cmd_sg_entries, uint, 0444); 79 MODULE_PARM_DESC(cmd_sg_entries, 80 "Default number of gather/scatter entries in the SRP command (default is 12, max 255)"); 81 82 module_param(indirect_sg_entries, uint, 0444); 83 MODULE_PARM_DESC(indirect_sg_entries, 84 "Default max number of gather/scatter entries (default is 12, max is " __stringify(SG_MAX_SEGMENTS) ")"); 85 86 module_param(allow_ext_sg, bool, 0444); 87 MODULE_PARM_DESC(allow_ext_sg, 88 "Default behavior when there are more than cmd_sg_entries S/G entries after mapping; fails the request when false (default false)"); 89 90 module_param(topspin_workarounds, int, 0444); 91 MODULE_PARM_DESC(topspin_workarounds, 92 "Enable workarounds for Topspin/Cisco SRP target bugs if != 0"); 93 94 module_param(register_always, bool, 0444); 95 MODULE_PARM_DESC(register_always, 96 "Use memory registration even for contiguous memory regions"); 97 98 module_param(never_register, bool, 0444); 99 MODULE_PARM_DESC(never_register, "Never register memory"); 100 101 static const struct kernel_param_ops srp_tmo_ops; 102 103 static int srp_reconnect_delay = 10; 104 module_param_cb(reconnect_delay, &srp_tmo_ops, &srp_reconnect_delay, 105 S_IRUGO | S_IWUSR); 106 MODULE_PARM_DESC(reconnect_delay, "Time between successive reconnect attempts"); 107 108 static int srp_fast_io_fail_tmo = 15; 109 module_param_cb(fast_io_fail_tmo, &srp_tmo_ops, &srp_fast_io_fail_tmo, 110 S_IRUGO | S_IWUSR); 111 MODULE_PARM_DESC(fast_io_fail_tmo, 112 "Number of seconds between the observation of a transport" 113 " layer error and failing all I/O. \"off\" means that this" 114 " functionality is disabled."); 115 116 static int srp_dev_loss_tmo = 600; 117 module_param_cb(dev_loss_tmo, &srp_tmo_ops, &srp_dev_loss_tmo, 118 S_IRUGO | S_IWUSR); 119 MODULE_PARM_DESC(dev_loss_tmo, 120 "Maximum number of seconds that the SRP transport should" 121 " insulate transport layer errors. After this time has been" 122 " exceeded the SCSI host is removed. Should be" 123 " between 1 and " __stringify(SCSI_DEVICE_BLOCK_MAX_TIMEOUT) 124 " if fast_io_fail_tmo has not been set. \"off\" means that" 125 " this functionality is disabled."); 126 127 static bool srp_use_imm_data = true; 128 module_param_named(use_imm_data, srp_use_imm_data, bool, 0644); 129 MODULE_PARM_DESC(use_imm_data, 130 "Whether or not to request permission to use immediate data during SRP login."); 131 132 static unsigned int srp_max_imm_data = 8 * 1024; 133 module_param_named(max_imm_data, srp_max_imm_data, uint, 0644); 134 MODULE_PARM_DESC(max_imm_data, "Maximum immediate data size."); 135 136 static unsigned ch_count; 137 module_param(ch_count, uint, 0444); 138 MODULE_PARM_DESC(ch_count, 139 "Number of RDMA channels to use for communication with an SRP target. Using more than one channel improves performance if the HCA supports multiple completion vectors. The default value is the minimum of four times the number of online CPU sockets and the number of completion vectors supported by the HCA."); 140 141 static int srp_add_one(struct ib_device *device); 142 static void srp_remove_one(struct ib_device *device, void *client_data); 143 static void srp_rename_dev(struct ib_device *device, void *client_data); 144 static void srp_recv_done(struct ib_cq *cq, struct ib_wc *wc); 145 static void srp_handle_qp_err(struct ib_cq *cq, struct ib_wc *wc, 146 const char *opname); 147 static int srp_ib_cm_handler(struct ib_cm_id *cm_id, 148 const struct ib_cm_event *event); 149 static int srp_rdma_cm_handler(struct rdma_cm_id *cm_id, 150 struct rdma_cm_event *event); 151 152 static struct scsi_transport_template *ib_srp_transport_template; 153 static struct workqueue_struct *srp_remove_wq; 154 155 static struct ib_client srp_client = { 156 .name = "srp", 157 .add = srp_add_one, 158 .remove = srp_remove_one, 159 .rename = srp_rename_dev 160 }; 161 162 static struct ib_sa_client srp_sa_client; 163 164 static int srp_tmo_get(char *buffer, const struct kernel_param *kp) 165 { 166 int tmo = *(int *)kp->arg; 167 168 if (tmo >= 0) 169 return sysfs_emit(buffer, "%d\n", tmo); 170 else 171 return sysfs_emit(buffer, "off\n"); 172 } 173 174 static int srp_tmo_set(const char *val, const struct kernel_param *kp) 175 { 176 int tmo, res; 177 178 res = srp_parse_tmo(&tmo, val); 179 if (res) 180 goto out; 181 182 if (kp->arg == &srp_reconnect_delay) 183 res = srp_tmo_valid(tmo, srp_fast_io_fail_tmo, 184 srp_dev_loss_tmo); 185 else if (kp->arg == &srp_fast_io_fail_tmo) 186 res = srp_tmo_valid(srp_reconnect_delay, tmo, srp_dev_loss_tmo); 187 else 188 res = srp_tmo_valid(srp_reconnect_delay, srp_fast_io_fail_tmo, 189 tmo); 190 if (res) 191 goto out; 192 *(int *)kp->arg = tmo; 193 194 out: 195 return res; 196 } 197 198 static const struct kernel_param_ops srp_tmo_ops = { 199 .get = srp_tmo_get, 200 .set = srp_tmo_set, 201 }; 202 203 static inline struct srp_target_port *host_to_target(struct Scsi_Host *host) 204 { 205 return (struct srp_target_port *) host->hostdata; 206 } 207 208 static const char *srp_target_info(struct Scsi_Host *host) 209 { 210 return host_to_target(host)->target_name; 211 } 212 213 static int srp_target_is_topspin(struct srp_target_port *target) 214 { 215 static const u8 topspin_oui[3] = { 0x00, 0x05, 0xad }; 216 static const u8 cisco_oui[3] = { 0x00, 0x1b, 0x0d }; 217 218 return topspin_workarounds && 219 (!memcmp(&target->ioc_guid, topspin_oui, sizeof topspin_oui) || 220 !memcmp(&target->ioc_guid, cisco_oui, sizeof cisco_oui)); 221 } 222 223 static struct srp_iu *srp_alloc_iu(struct srp_host *host, size_t size, 224 gfp_t gfp_mask, 225 enum dma_data_direction direction) 226 { 227 struct srp_iu *iu; 228 229 iu = kmalloc_obj(*iu, gfp_mask); 230 if (!iu) 231 goto out; 232 233 iu->buf = kzalloc(size, gfp_mask); 234 if (!iu->buf) 235 goto out_free_iu; 236 237 iu->dma = ib_dma_map_single(host->srp_dev->dev, iu->buf, size, 238 direction); 239 if (ib_dma_mapping_error(host->srp_dev->dev, iu->dma)) 240 goto out_free_buf; 241 242 iu->size = size; 243 iu->direction = direction; 244 245 return iu; 246 247 out_free_buf: 248 kfree(iu->buf); 249 out_free_iu: 250 kfree(iu); 251 out: 252 return NULL; 253 } 254 255 static void srp_free_iu(struct srp_host *host, struct srp_iu *iu) 256 { 257 if (!iu) 258 return; 259 260 ib_dma_unmap_single(host->srp_dev->dev, iu->dma, iu->size, 261 iu->direction); 262 kfree(iu->buf); 263 kfree(iu); 264 } 265 266 static void srp_qp_event(struct ib_event *event, void *context) 267 { 268 pr_debug("QP event %s (%d)\n", 269 ib_event_msg(event->event), event->event); 270 } 271 272 static int srp_init_ib_qp(struct srp_target_port *target, 273 struct ib_qp *qp) 274 { 275 struct ib_qp_attr *attr; 276 int ret; 277 278 attr = kmalloc_obj(*attr); 279 if (!attr) 280 return -ENOMEM; 281 282 ret = ib_find_cached_pkey(target->srp_host->srp_dev->dev, 283 target->srp_host->port, 284 be16_to_cpu(target->ib_cm.pkey), 285 &attr->pkey_index); 286 if (ret) 287 goto out; 288 289 attr->qp_state = IB_QPS_INIT; 290 attr->qp_access_flags = (IB_ACCESS_REMOTE_READ | 291 IB_ACCESS_REMOTE_WRITE); 292 attr->port_num = target->srp_host->port; 293 294 ret = ib_modify_qp(qp, attr, 295 IB_QP_STATE | 296 IB_QP_PKEY_INDEX | 297 IB_QP_ACCESS_FLAGS | 298 IB_QP_PORT); 299 300 out: 301 kfree(attr); 302 return ret; 303 } 304 305 static int srp_new_ib_cm_id(struct srp_rdma_ch *ch) 306 { 307 struct srp_target_port *target = ch->target; 308 struct ib_cm_id *new_cm_id; 309 310 new_cm_id = ib_create_cm_id(target->srp_host->srp_dev->dev, 311 srp_ib_cm_handler, ch); 312 if (IS_ERR(new_cm_id)) 313 return PTR_ERR(new_cm_id); 314 315 if (ch->ib_cm.cm_id) 316 ib_destroy_cm_id(ch->ib_cm.cm_id); 317 ch->ib_cm.cm_id = new_cm_id; 318 if (rdma_cap_opa_ah(target->srp_host->srp_dev->dev, 319 target->srp_host->port)) 320 ch->ib_cm.path.rec_type = SA_PATH_REC_TYPE_OPA; 321 else 322 ch->ib_cm.path.rec_type = SA_PATH_REC_TYPE_IB; 323 ch->ib_cm.path.sgid = target->sgid; 324 ch->ib_cm.path.dgid = target->ib_cm.orig_dgid; 325 ch->ib_cm.path.pkey = target->ib_cm.pkey; 326 ch->ib_cm.path.service_id = target->ib_cm.service_id; 327 328 return 0; 329 } 330 331 static int srp_new_rdma_cm_id(struct srp_rdma_ch *ch) 332 { 333 struct srp_target_port *target = ch->target; 334 struct rdma_cm_id *new_cm_id; 335 int ret; 336 337 new_cm_id = rdma_create_id(target->net, srp_rdma_cm_handler, ch, 338 RDMA_PS_TCP, IB_QPT_RC); 339 if (IS_ERR(new_cm_id)) { 340 ret = PTR_ERR(new_cm_id); 341 new_cm_id = NULL; 342 goto out; 343 } 344 345 init_completion(&ch->done); 346 ret = rdma_resolve_addr(new_cm_id, target->rdma_cm.src_specified ? 347 &target->rdma_cm.src.sa : NULL, 348 &target->rdma_cm.dst.sa, 349 SRP_PATH_REC_TIMEOUT_MS); 350 if (ret) { 351 pr_err("No route available from %pISpsc to %pISpsc (%d)\n", 352 &target->rdma_cm.src, &target->rdma_cm.dst, ret); 353 goto out; 354 } 355 ret = wait_for_completion_interruptible(&ch->done); 356 if (ret < 0) 357 goto out; 358 359 ret = ch->status; 360 if (ret) { 361 pr_err("Resolving address %pISpsc failed (%d)\n", 362 &target->rdma_cm.dst, ret); 363 goto out; 364 } 365 366 swap(ch->rdma_cm.cm_id, new_cm_id); 367 368 out: 369 if (new_cm_id) 370 rdma_destroy_id(new_cm_id); 371 372 return ret; 373 } 374 375 static int srp_new_cm_id(struct srp_rdma_ch *ch) 376 { 377 struct srp_target_port *target = ch->target; 378 379 return target->using_rdma_cm ? srp_new_rdma_cm_id(ch) : 380 srp_new_ib_cm_id(ch); 381 } 382 383 /** 384 * srp_destroy_fr_pool() - free the resources owned by a pool 385 * @pool: Fast registration pool to be destroyed. 386 */ 387 static void srp_destroy_fr_pool(struct srp_fr_pool *pool) 388 { 389 int i; 390 struct srp_fr_desc *d; 391 392 if (!pool) 393 return; 394 395 for (i = 0, d = &pool->desc[0]; i < pool->size; i++, d++) { 396 if (d->mr) 397 ib_dereg_mr(d->mr); 398 } 399 kfree(pool); 400 } 401 402 /** 403 * srp_create_fr_pool() - allocate and initialize a pool for fast registration 404 * @device: IB device to allocate fast registration descriptors for. 405 * @pd: Protection domain associated with the FR descriptors. 406 * @pool_size: Number of descriptors to allocate. 407 * @max_page_list_len: Maximum fast registration work request page list length. 408 */ 409 static struct srp_fr_pool *srp_create_fr_pool(struct ib_device *device, 410 struct ib_pd *pd, int pool_size, 411 int max_page_list_len) 412 { 413 struct srp_fr_pool *pool; 414 struct srp_fr_desc *d; 415 struct ib_mr *mr; 416 int i, ret = -EINVAL; 417 enum ib_mr_type mr_type; 418 419 if (pool_size <= 0) 420 goto err; 421 ret = -ENOMEM; 422 pool = kzalloc_flex(*pool, desc, pool_size); 423 if (!pool) 424 goto err; 425 pool->size = pool_size; 426 pool->max_page_list_len = max_page_list_len; 427 spin_lock_init(&pool->lock); 428 INIT_LIST_HEAD(&pool->free_list); 429 430 if (device->attrs.kernel_cap_flags & IBK_SG_GAPS_REG) 431 mr_type = IB_MR_TYPE_SG_GAPS; 432 else 433 mr_type = IB_MR_TYPE_MEM_REG; 434 435 for (i = 0, d = &pool->desc[0]; i < pool->size; i++, d++) { 436 mr = ib_alloc_mr(pd, mr_type, max_page_list_len); 437 if (IS_ERR(mr)) { 438 ret = PTR_ERR(mr); 439 if (ret == -ENOMEM) 440 pr_info("%s: ib_alloc_mr() failed. Try to reduce max_cmd_per_lun, max_sect or ch_count\n", 441 dev_name(&device->dev)); 442 goto destroy_pool; 443 } 444 d->mr = mr; 445 list_add_tail(&d->entry, &pool->free_list); 446 } 447 448 out: 449 return pool; 450 451 destroy_pool: 452 srp_destroy_fr_pool(pool); 453 454 err: 455 pool = ERR_PTR(ret); 456 goto out; 457 } 458 459 /** 460 * srp_fr_pool_get() - obtain a descriptor suitable for fast registration 461 * @pool: Pool to obtain descriptor from. 462 */ 463 static struct srp_fr_desc *srp_fr_pool_get(struct srp_fr_pool *pool) 464 { 465 struct srp_fr_desc *d = NULL; 466 unsigned long flags; 467 468 spin_lock_irqsave(&pool->lock, flags); 469 if (!list_empty(&pool->free_list)) { 470 d = list_first_entry(&pool->free_list, typeof(*d), entry); 471 list_del(&d->entry); 472 } 473 spin_unlock_irqrestore(&pool->lock, flags); 474 475 return d; 476 } 477 478 /** 479 * srp_fr_pool_put() - put an FR descriptor back in the free list 480 * @pool: Pool the descriptor was allocated from. 481 * @desc: Pointer to an array of fast registration descriptor pointers. 482 * @n: Number of descriptors to put back. 483 * 484 * Note: The caller must already have queued an invalidation request for 485 * desc->mr->rkey before calling this function. 486 */ 487 static void srp_fr_pool_put(struct srp_fr_pool *pool, struct srp_fr_desc **desc, 488 int n) 489 { 490 unsigned long flags; 491 int i; 492 493 spin_lock_irqsave(&pool->lock, flags); 494 for (i = 0; i < n; i++) 495 list_add(&desc[i]->entry, &pool->free_list); 496 spin_unlock_irqrestore(&pool->lock, flags); 497 } 498 499 static struct srp_fr_pool *srp_alloc_fr_pool(struct srp_target_port *target) 500 { 501 struct srp_device *dev = target->srp_host->srp_dev; 502 503 return srp_create_fr_pool(dev->dev, dev->pd, target->mr_pool_size, 504 dev->max_pages_per_mr); 505 } 506 507 /** 508 * srp_destroy_qp() - destroy an RDMA queue pair 509 * @ch: SRP RDMA channel. 510 * 511 * Drain the qp before destroying it. This avoids that the receive 512 * completion handler can access the queue pair while it is 513 * being destroyed. 514 */ 515 static void srp_destroy_qp(struct srp_rdma_ch *ch) 516 { 517 spin_lock_irq(&ch->lock); 518 ib_process_cq_direct(ch->send_cq, -1); 519 spin_unlock_irq(&ch->lock); 520 521 ib_drain_qp(ch->qp); 522 ib_destroy_qp(ch->qp); 523 } 524 525 static int srp_create_ch_ib(struct srp_rdma_ch *ch) 526 { 527 struct srp_target_port *target = ch->target; 528 struct srp_device *dev = target->srp_host->srp_dev; 529 const struct ib_device_attr *attr = &dev->dev->attrs; 530 struct ib_qp_init_attr *init_attr; 531 struct ib_cq *recv_cq, *send_cq; 532 struct ib_qp *qp; 533 struct srp_fr_pool *fr_pool = NULL; 534 const int m = 1 + dev->use_fast_reg * target->mr_per_cmd * 2; 535 int ret; 536 537 init_attr = kzalloc_obj(*init_attr); 538 if (!init_attr) 539 return -ENOMEM; 540 541 /* queue_size + 1 for ib_drain_rq() */ 542 recv_cq = ib_alloc_cq(dev->dev, ch, target->queue_size + 1, 543 ch->comp_vector, IB_POLL_SOFTIRQ); 544 if (IS_ERR(recv_cq)) { 545 ret = PTR_ERR(recv_cq); 546 goto err; 547 } 548 549 send_cq = ib_alloc_cq(dev->dev, ch, m * target->queue_size, 550 ch->comp_vector, IB_POLL_DIRECT); 551 if (IS_ERR(send_cq)) { 552 ret = PTR_ERR(send_cq); 553 goto err_recv_cq; 554 } 555 556 init_attr->event_handler = srp_qp_event; 557 init_attr->cap.max_send_wr = m * target->queue_size; 558 init_attr->cap.max_recv_wr = target->queue_size + 1; 559 init_attr->cap.max_recv_sge = 1; 560 init_attr->cap.max_send_sge = min(attr->max_send_sge, SRP_MAX_SGE); 561 init_attr->sq_sig_type = IB_SIGNAL_REQ_WR; 562 init_attr->qp_type = IB_QPT_RC; 563 init_attr->send_cq = send_cq; 564 init_attr->recv_cq = recv_cq; 565 566 ch->max_imm_sge = min(init_attr->cap.max_send_sge - 1U, 255U); 567 568 if (target->using_rdma_cm) { 569 ret = rdma_create_qp(ch->rdma_cm.cm_id, dev->pd, init_attr); 570 qp = ch->rdma_cm.cm_id->qp; 571 } else { 572 qp = ib_create_qp(dev->pd, init_attr); 573 if (!IS_ERR(qp)) { 574 ret = srp_init_ib_qp(target, qp); 575 if (ret) 576 ib_destroy_qp(qp); 577 } else { 578 ret = PTR_ERR(qp); 579 } 580 } 581 if (ret) { 582 pr_err("QP creation failed for dev %s: %d\n", 583 dev_name(&dev->dev->dev), ret); 584 goto err_send_cq; 585 } 586 587 if (dev->use_fast_reg) { 588 fr_pool = srp_alloc_fr_pool(target); 589 if (IS_ERR(fr_pool)) { 590 ret = PTR_ERR(fr_pool); 591 shost_printk(KERN_WARNING, target->scsi_host, PFX 592 "FR pool allocation failed (%d)\n", ret); 593 goto err_qp; 594 } 595 } 596 597 if (ch->qp) 598 srp_destroy_qp(ch); 599 if (ch->recv_cq) 600 ib_free_cq(ch->recv_cq); 601 if (ch->send_cq) 602 ib_free_cq(ch->send_cq); 603 604 ch->qp = qp; 605 ch->recv_cq = recv_cq; 606 ch->send_cq = send_cq; 607 608 if (dev->use_fast_reg) { 609 if (ch->fr_pool) 610 srp_destroy_fr_pool(ch->fr_pool); 611 ch->fr_pool = fr_pool; 612 } 613 614 kfree(init_attr); 615 return 0; 616 617 err_qp: 618 if (target->using_rdma_cm) 619 rdma_destroy_qp(ch->rdma_cm.cm_id); 620 else 621 ib_destroy_qp(qp); 622 623 err_send_cq: 624 ib_free_cq(send_cq); 625 626 err_recv_cq: 627 ib_free_cq(recv_cq); 628 629 err: 630 kfree(init_attr); 631 return ret; 632 } 633 634 /* 635 * Note: this function may be called without srp_alloc_iu_bufs() having been 636 * invoked. Hence the ch->[rt]x_ring checks. 637 */ 638 static void srp_free_ch_ib(struct srp_target_port *target, 639 struct srp_rdma_ch *ch) 640 { 641 struct srp_device *dev = target->srp_host->srp_dev; 642 int i; 643 644 if (!ch->target) 645 return; 646 647 if (target->using_rdma_cm) { 648 if (ch->rdma_cm.cm_id) { 649 rdma_destroy_id(ch->rdma_cm.cm_id); 650 ch->rdma_cm.cm_id = NULL; 651 } 652 } else { 653 if (ch->ib_cm.cm_id) { 654 ib_destroy_cm_id(ch->ib_cm.cm_id); 655 ch->ib_cm.cm_id = NULL; 656 } 657 } 658 659 /* If srp_new_cm_id() succeeded but srp_create_ch_ib() not, return. */ 660 if (!ch->qp) 661 return; 662 663 if (dev->use_fast_reg) { 664 if (ch->fr_pool) 665 srp_destroy_fr_pool(ch->fr_pool); 666 } 667 668 srp_destroy_qp(ch); 669 ib_free_cq(ch->send_cq); 670 ib_free_cq(ch->recv_cq); 671 672 /* 673 * Avoid that the SCSI error handler tries to use this channel after 674 * it has been freed. The SCSI error handler can namely continue 675 * trying to perform recovery actions after scsi_remove_host() 676 * returned. 677 */ 678 ch->target = NULL; 679 680 ch->qp = NULL; 681 ch->send_cq = ch->recv_cq = NULL; 682 683 if (ch->rx_ring) { 684 for (i = 0; i < target->queue_size; ++i) 685 srp_free_iu(target->srp_host, ch->rx_ring[i]); 686 kfree(ch->rx_ring); 687 ch->rx_ring = NULL; 688 } 689 if (ch->tx_ring) { 690 for (i = 0; i < target->queue_size; ++i) 691 srp_free_iu(target->srp_host, ch->tx_ring[i]); 692 kfree(ch->tx_ring); 693 ch->tx_ring = NULL; 694 } 695 } 696 697 static void srp_path_rec_completion(int status, 698 struct sa_path_rec *pathrec, 699 unsigned int num_paths, void *ch_ptr) 700 { 701 struct srp_rdma_ch *ch = ch_ptr; 702 struct srp_target_port *target = ch->target; 703 704 ch->status = status; 705 if (status) 706 shost_printk(KERN_ERR, target->scsi_host, 707 PFX "Got failed path rec status %d\n", status); 708 else 709 ch->ib_cm.path = *pathrec; 710 complete(&ch->done); 711 } 712 713 static int srp_ib_lookup_path(struct srp_rdma_ch *ch) 714 { 715 struct srp_target_port *target = ch->target; 716 int ret; 717 718 ch->ib_cm.path.numb_path = 1; 719 720 init_completion(&ch->done); 721 722 ch->ib_cm.path_query_id = ib_sa_path_rec_get(&srp_sa_client, 723 target->srp_host->srp_dev->dev, 724 target->srp_host->port, 725 &ch->ib_cm.path, 726 IB_SA_PATH_REC_SERVICE_ID | 727 IB_SA_PATH_REC_DGID | 728 IB_SA_PATH_REC_SGID | 729 IB_SA_PATH_REC_NUMB_PATH | 730 IB_SA_PATH_REC_PKEY, 731 SRP_PATH_REC_TIMEOUT_MS, 732 GFP_KERNEL, 733 srp_path_rec_completion, 734 ch, &ch->ib_cm.path_query); 735 if (ch->ib_cm.path_query_id < 0) 736 return ch->ib_cm.path_query_id; 737 738 ret = wait_for_completion_interruptible(&ch->done); 739 if (ret < 0) 740 return ret; 741 742 if (ch->status < 0) 743 shost_printk(KERN_WARNING, target->scsi_host, 744 PFX "Path record query failed: sgid %pI6, dgid %pI6, pkey %#04x, service_id %#16llx\n", 745 ch->ib_cm.path.sgid.raw, ch->ib_cm.path.dgid.raw, 746 be16_to_cpu(target->ib_cm.pkey), 747 be64_to_cpu(target->ib_cm.service_id)); 748 749 return ch->status; 750 } 751 752 static int srp_rdma_lookup_path(struct srp_rdma_ch *ch) 753 { 754 struct srp_target_port *target = ch->target; 755 int ret; 756 757 init_completion(&ch->done); 758 759 ret = rdma_resolve_route(ch->rdma_cm.cm_id, SRP_PATH_REC_TIMEOUT_MS); 760 if (ret) 761 return ret; 762 763 wait_for_completion_interruptible(&ch->done); 764 765 if (ch->status != 0) 766 shost_printk(KERN_WARNING, target->scsi_host, 767 PFX "Path resolution failed\n"); 768 769 return ch->status; 770 } 771 772 static int srp_lookup_path(struct srp_rdma_ch *ch) 773 { 774 struct srp_target_port *target = ch->target; 775 776 return target->using_rdma_cm ? srp_rdma_lookup_path(ch) : 777 srp_ib_lookup_path(ch); 778 } 779 780 static u8 srp_get_subnet_timeout(struct srp_host *host) 781 { 782 struct ib_port_attr attr; 783 int ret; 784 u8 subnet_timeout = 18; 785 786 ret = ib_query_port(host->srp_dev->dev, host->port, &attr); 787 if (ret == 0) 788 subnet_timeout = attr.subnet_timeout; 789 790 if (unlikely(subnet_timeout < 15)) 791 pr_warn("%s: subnet timeout %d may cause SRP login to fail.\n", 792 dev_name(&host->srp_dev->dev->dev), subnet_timeout); 793 794 return subnet_timeout; 795 } 796 797 static int srp_send_req(struct srp_rdma_ch *ch, uint32_t max_iu_len, 798 bool multich) 799 { 800 struct srp_target_port *target = ch->target; 801 struct { 802 struct rdma_conn_param rdma_param; 803 struct srp_login_req_rdma rdma_req; 804 struct ib_cm_req_param ib_param; 805 struct srp_login_req ib_req; 806 } *req = NULL; 807 char *ipi, *tpi; 808 int status; 809 810 req = kzalloc_obj(*req); 811 if (!req) 812 return -ENOMEM; 813 814 req->ib_param.flow_control = 1; 815 req->ib_param.retry_count = target->tl_retry_count; 816 817 /* 818 * Pick some arbitrary defaults here; we could make these 819 * module parameters if anyone cared about setting them. 820 */ 821 req->ib_param.responder_resources = 4; 822 req->ib_param.rnr_retry_count = 7; 823 req->ib_param.max_cm_retries = 15; 824 825 req->ib_req.opcode = SRP_LOGIN_REQ; 826 req->ib_req.tag = 0; 827 req->ib_req.req_it_iu_len = cpu_to_be32(max_iu_len); 828 req->ib_req.req_buf_fmt = cpu_to_be16(SRP_BUF_FORMAT_DIRECT | 829 SRP_BUF_FORMAT_INDIRECT); 830 req->ib_req.req_flags = (multich ? SRP_MULTICHAN_MULTI : 831 SRP_MULTICHAN_SINGLE); 832 if (srp_use_imm_data) { 833 req->ib_req.req_flags |= SRP_IMMED_REQUESTED; 834 req->ib_req.imm_data_offset = cpu_to_be16(SRP_IMM_DATA_OFFSET); 835 } 836 837 if (target->using_rdma_cm) { 838 req->rdma_param.flow_control = req->ib_param.flow_control; 839 req->rdma_param.responder_resources = 840 req->ib_param.responder_resources; 841 req->rdma_param.initiator_depth = req->ib_param.initiator_depth; 842 req->rdma_param.retry_count = req->ib_param.retry_count; 843 req->rdma_param.rnr_retry_count = req->ib_param.rnr_retry_count; 844 req->rdma_param.private_data = &req->rdma_req; 845 req->rdma_param.private_data_len = sizeof(req->rdma_req); 846 847 req->rdma_req.opcode = req->ib_req.opcode; 848 req->rdma_req.tag = req->ib_req.tag; 849 req->rdma_req.req_it_iu_len = req->ib_req.req_it_iu_len; 850 req->rdma_req.req_buf_fmt = req->ib_req.req_buf_fmt; 851 req->rdma_req.req_flags = req->ib_req.req_flags; 852 req->rdma_req.imm_data_offset = req->ib_req.imm_data_offset; 853 854 ipi = req->rdma_req.initiator_port_id; 855 tpi = req->rdma_req.target_port_id; 856 } else { 857 u8 subnet_timeout; 858 859 subnet_timeout = srp_get_subnet_timeout(target->srp_host); 860 861 req->ib_param.primary_path = &ch->ib_cm.path; 862 req->ib_param.alternate_path = NULL; 863 req->ib_param.service_id = target->ib_cm.service_id; 864 get_random_bytes(&req->ib_param.starting_psn, 4); 865 req->ib_param.starting_psn &= 0xffffff; 866 req->ib_param.qp_num = ch->qp->qp_num; 867 req->ib_param.qp_type = ch->qp->qp_type; 868 req->ib_param.local_cm_response_timeout = subnet_timeout + 2; 869 req->ib_param.remote_cm_response_timeout = subnet_timeout + 2; 870 req->ib_param.private_data = &req->ib_req; 871 req->ib_param.private_data_len = sizeof(req->ib_req); 872 873 ipi = req->ib_req.initiator_port_id; 874 tpi = req->ib_req.target_port_id; 875 } 876 877 /* 878 * In the published SRP specification (draft rev. 16a), the 879 * port identifier format is 8 bytes of ID extension followed 880 * by 8 bytes of GUID. Older drafts put the two halves in the 881 * opposite order, so that the GUID comes first. 882 * 883 * Targets conforming to these obsolete drafts can be 884 * recognized by the I/O Class they report. 885 */ 886 if (target->io_class == SRP_REV10_IB_IO_CLASS) { 887 memcpy(ipi, &target->sgid.global.interface_id, 8); 888 memcpy(ipi + 8, &target->initiator_ext, 8); 889 memcpy(tpi, &target->ioc_guid, 8); 890 memcpy(tpi + 8, &target->id_ext, 8); 891 } else { 892 memcpy(ipi, &target->initiator_ext, 8); 893 memcpy(ipi + 8, &target->sgid.global.interface_id, 8); 894 memcpy(tpi, &target->id_ext, 8); 895 memcpy(tpi + 8, &target->ioc_guid, 8); 896 } 897 898 /* 899 * Topspin/Cisco SRP targets will reject our login unless we 900 * zero out the first 8 bytes of our initiator port ID and set 901 * the second 8 bytes to the local node GUID. 902 */ 903 if (srp_target_is_topspin(target)) { 904 shost_printk(KERN_DEBUG, target->scsi_host, 905 PFX "Topspin/Cisco initiator port ID workaround " 906 "activated for target GUID %016llx\n", 907 be64_to_cpu(target->ioc_guid)); 908 memset(ipi, 0, 8); 909 memcpy(ipi + 8, &target->srp_host->srp_dev->dev->node_guid, 8); 910 } 911 912 if (target->using_rdma_cm) 913 status = rdma_connect(ch->rdma_cm.cm_id, &req->rdma_param); 914 else 915 status = ib_send_cm_req(ch->ib_cm.cm_id, &req->ib_param); 916 917 kfree(req); 918 919 return status; 920 } 921 922 static bool srp_queue_remove_work(struct srp_target_port *target) 923 { 924 bool changed = false; 925 926 spin_lock_irq(&target->lock); 927 if (target->state != SRP_TARGET_REMOVED) { 928 target->state = SRP_TARGET_REMOVED; 929 changed = true; 930 } 931 spin_unlock_irq(&target->lock); 932 933 if (changed) 934 queue_work(srp_remove_wq, &target->remove_work); 935 936 return changed; 937 } 938 939 static void srp_disconnect_target(struct srp_target_port *target) 940 { 941 struct srp_rdma_ch *ch; 942 int i, ret; 943 944 /* XXX should send SRP_I_LOGOUT request */ 945 946 for (i = 0; i < target->ch_count; i++) { 947 ch = &target->ch[i]; 948 ch->connected = false; 949 ret = 0; 950 if (target->using_rdma_cm) { 951 if (ch->rdma_cm.cm_id) 952 rdma_disconnect(ch->rdma_cm.cm_id); 953 } else { 954 if (ch->ib_cm.cm_id) 955 ret = ib_send_cm_dreq(ch->ib_cm.cm_id, 956 NULL, 0); 957 } 958 if (ret < 0) { 959 shost_printk(KERN_DEBUG, target->scsi_host, 960 PFX "Sending CM DREQ failed\n"); 961 } 962 } 963 } 964 965 static int srp_exit_cmd_priv(struct Scsi_Host *shost, struct scsi_cmnd *cmd) 966 { 967 struct srp_target_port *target = host_to_target(shost); 968 struct srp_device *dev = target->srp_host->srp_dev; 969 struct ib_device *ibdev = dev->dev; 970 struct srp_request *req = scsi_cmd_priv(cmd); 971 972 kfree(req->fr_list); 973 if (req->indirect_dma_addr) { 974 ib_dma_unmap_single(ibdev, req->indirect_dma_addr, 975 target->indirect_size, 976 DMA_TO_DEVICE); 977 } 978 kfree(req->indirect_desc); 979 980 return 0; 981 } 982 983 static int srp_init_cmd_priv(struct Scsi_Host *shost, struct scsi_cmnd *cmd) 984 { 985 struct srp_target_port *target = host_to_target(shost); 986 struct srp_device *srp_dev = target->srp_host->srp_dev; 987 struct ib_device *ibdev = srp_dev->dev; 988 struct srp_request *req = scsi_cmd_priv(cmd); 989 dma_addr_t dma_addr; 990 int ret = -ENOMEM; 991 992 if (srp_dev->use_fast_reg) { 993 req->fr_list = kmalloc_array(target->mr_per_cmd, sizeof(void *), 994 GFP_KERNEL); 995 if (!req->fr_list) 996 goto out; 997 } 998 req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL); 999 if (!req->indirect_desc) 1000 goto out; 1001 1002 dma_addr = ib_dma_map_single(ibdev, req->indirect_desc, 1003 target->indirect_size, 1004 DMA_TO_DEVICE); 1005 if (ib_dma_mapping_error(ibdev, dma_addr)) { 1006 srp_exit_cmd_priv(shost, cmd); 1007 goto out; 1008 } 1009 1010 req->indirect_dma_addr = dma_addr; 1011 ret = 0; 1012 1013 out: 1014 return ret; 1015 } 1016 1017 /** 1018 * srp_del_scsi_host_attr() - Remove attributes defined in the host template. 1019 * @shost: SCSI host whose attributes to remove from sysfs. 1020 * 1021 * Note: Any attributes defined in the host template and that did not exist 1022 * before invocation of this function will be ignored. 1023 */ 1024 static void srp_del_scsi_host_attr(struct Scsi_Host *shost) 1025 { 1026 const struct attribute_group **g; 1027 struct attribute **attr; 1028 1029 for (g = shost->hostt->shost_groups; *g; ++g) { 1030 for (attr = (*g)->attrs; *attr; ++attr) { 1031 struct device_attribute *dev_attr = 1032 container_of(*attr, typeof(*dev_attr), attr); 1033 1034 device_remove_file(&shost->shost_dev, dev_attr); 1035 } 1036 } 1037 } 1038 1039 static void srp_remove_target(struct srp_target_port *target) 1040 { 1041 struct scsi_device *sdev; 1042 struct srp_rdma_ch *ch; 1043 int i; 1044 1045 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); 1046 1047 srp_del_scsi_host_attr(target->scsi_host); 1048 /* 1049 * Remove all logical units. This must happen before the 1050 * srp_disconnect_target() call because scsi_remove_device() may trigger 1051 * submission of SCSI commands. See also sd_shutdown(). 1052 */ 1053 shost_for_each_device(sdev, target->scsi_host) 1054 scsi_remove_device(sdev); 1055 srp_stop_rport_timers(target->rport); 1056 srp_disconnect_target(target); 1057 kobj_ns_drop(KOBJ_NS_TYPE_NET, to_ns_common(target->net)); 1058 for (i = 0; i < target->ch_count; i++) { 1059 ch = &target->ch[i]; 1060 srp_free_ch_ib(target, ch); 1061 } 1062 cancel_work_sync(&target->tl_err_work); 1063 srp_remove_host(target->scsi_host); 1064 scsi_remove_host(target->scsi_host); 1065 kfree(target->ch); 1066 target->ch = NULL; 1067 1068 spin_lock(&target->srp_host->target_lock); 1069 list_del(&target->list); 1070 spin_unlock(&target->srp_host->target_lock); 1071 1072 scsi_host_put(target->scsi_host); 1073 } 1074 1075 static void srp_remove_work(struct work_struct *work) 1076 { 1077 struct srp_target_port *target = 1078 container_of(work, struct srp_target_port, remove_work); 1079 1080 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); 1081 1082 srp_remove_target(target); 1083 } 1084 1085 static void srp_rport_delete(struct srp_rport *rport) 1086 { 1087 struct srp_target_port *target = rport->lld_data; 1088 1089 srp_queue_remove_work(target); 1090 } 1091 1092 /** 1093 * srp_connected_ch() - number of connected channels 1094 * @target: SRP target port. 1095 */ 1096 static int srp_connected_ch(struct srp_target_port *target) 1097 { 1098 int i, c = 0; 1099 1100 for (i = 0; i < target->ch_count; i++) 1101 c += target->ch[i].connected; 1102 1103 return c; 1104 } 1105 1106 static int srp_connect_ch(struct srp_rdma_ch *ch, uint32_t max_iu_len, 1107 bool multich) 1108 { 1109 struct srp_target_port *target = ch->target; 1110 int ret; 1111 1112 WARN_ON_ONCE(!multich && srp_connected_ch(target) > 0); 1113 1114 ret = srp_lookup_path(ch); 1115 if (ret) 1116 goto out; 1117 1118 while (1) { 1119 init_completion(&ch->done); 1120 ret = srp_send_req(ch, max_iu_len, multich); 1121 if (ret) 1122 goto out; 1123 ret = wait_for_completion_interruptible(&ch->done); 1124 if (ret < 0) 1125 goto out; 1126 1127 /* 1128 * The CM event handling code will set status to 1129 * SRP_PORT_REDIRECT if we get a port redirect REJ 1130 * back, or SRP_DLID_REDIRECT if we get a lid/qp 1131 * redirect REJ back. 1132 */ 1133 ret = ch->status; 1134 switch (ret) { 1135 case 0: 1136 ch->connected = true; 1137 goto out; 1138 1139 case SRP_PORT_REDIRECT: 1140 ret = srp_lookup_path(ch); 1141 if (ret) 1142 goto out; 1143 break; 1144 1145 case SRP_DLID_REDIRECT: 1146 break; 1147 1148 case SRP_STALE_CONN: 1149 shost_printk(KERN_ERR, target->scsi_host, PFX 1150 "giving up on stale connection\n"); 1151 ret = -ECONNRESET; 1152 goto out; 1153 1154 default: 1155 goto out; 1156 } 1157 } 1158 1159 out: 1160 return ret <= 0 ? ret : -ENODEV; 1161 } 1162 1163 static void srp_inv_rkey_err_done(struct ib_cq *cq, struct ib_wc *wc) 1164 { 1165 srp_handle_qp_err(cq, wc, "INV RKEY"); 1166 } 1167 1168 static int srp_inv_rkey(struct srp_request *req, struct srp_rdma_ch *ch, 1169 u32 rkey) 1170 { 1171 struct ib_send_wr wr = { 1172 .opcode = IB_WR_LOCAL_INV, 1173 .next = NULL, 1174 .num_sge = 0, 1175 .send_flags = 0, 1176 .ex.invalidate_rkey = rkey, 1177 }; 1178 1179 wr.wr_cqe = &req->reg_cqe; 1180 req->reg_cqe.done = srp_inv_rkey_err_done; 1181 return ib_post_send(ch->qp, &wr, NULL); 1182 } 1183 1184 static void srp_unmap_data(struct scsi_cmnd *scmnd, 1185 struct srp_rdma_ch *ch, 1186 struct srp_request *req) 1187 { 1188 struct srp_target_port *target = ch->target; 1189 struct srp_device *dev = target->srp_host->srp_dev; 1190 struct ib_device *ibdev = dev->dev; 1191 int i, res; 1192 1193 if (!scsi_sglist(scmnd) || 1194 (scmnd->sc_data_direction != DMA_TO_DEVICE && 1195 scmnd->sc_data_direction != DMA_FROM_DEVICE)) 1196 return; 1197 1198 if (dev->use_fast_reg) { 1199 struct srp_fr_desc **pfr; 1200 1201 for (i = req->nmdesc, pfr = req->fr_list; i > 0; i--, pfr++) { 1202 res = srp_inv_rkey(req, ch, (*pfr)->mr->rkey); 1203 if (res < 0) { 1204 shost_printk(KERN_ERR, target->scsi_host, PFX 1205 "Queueing INV WR for rkey %#x failed (%d)\n", 1206 (*pfr)->mr->rkey, res); 1207 queue_work(system_long_wq, 1208 &target->tl_err_work); 1209 } 1210 } 1211 if (req->nmdesc) 1212 srp_fr_pool_put(ch->fr_pool, req->fr_list, 1213 req->nmdesc); 1214 } 1215 1216 ib_dma_unmap_sg(ibdev, scsi_sglist(scmnd), scsi_sg_count(scmnd), 1217 scmnd->sc_data_direction); 1218 } 1219 1220 /** 1221 * srp_claim_req - Take ownership of the scmnd associated with a request. 1222 * @ch: SRP RDMA channel. 1223 * @req: SRP request. 1224 * @sdev: If not NULL, only take ownership for this SCSI device. 1225 * @scmnd: If NULL, take ownership of @req->scmnd. If not NULL, only take 1226 * ownership of @req->scmnd if it equals @scmnd. 1227 * 1228 * Return value: 1229 * Either NULL or a pointer to the SCSI command the caller became owner of. 1230 */ 1231 static struct scsi_cmnd *srp_claim_req(struct srp_rdma_ch *ch, 1232 struct srp_request *req, 1233 struct scsi_device *sdev, 1234 struct scsi_cmnd *scmnd) 1235 { 1236 unsigned long flags; 1237 1238 spin_lock_irqsave(&ch->lock, flags); 1239 if (req->scmnd && 1240 (!sdev || req->scmnd->device == sdev) && 1241 (!scmnd || req->scmnd == scmnd)) { 1242 scmnd = req->scmnd; 1243 req->scmnd = NULL; 1244 } else { 1245 scmnd = NULL; 1246 } 1247 spin_unlock_irqrestore(&ch->lock, flags); 1248 1249 return scmnd; 1250 } 1251 1252 /** 1253 * srp_free_req() - Unmap data and adjust ch->req_lim. 1254 * @ch: SRP RDMA channel. 1255 * @req: Request to be freed. 1256 * @scmnd: SCSI command associated with @req. 1257 * @req_lim_delta: Amount to be added to @target->req_lim. 1258 */ 1259 static void srp_free_req(struct srp_rdma_ch *ch, struct srp_request *req, 1260 struct scsi_cmnd *scmnd, s32 req_lim_delta) 1261 { 1262 unsigned long flags; 1263 1264 srp_unmap_data(scmnd, ch, req); 1265 1266 spin_lock_irqsave(&ch->lock, flags); 1267 ch->req_lim += req_lim_delta; 1268 spin_unlock_irqrestore(&ch->lock, flags); 1269 } 1270 1271 static void srp_finish_req(struct srp_rdma_ch *ch, struct srp_request *req, 1272 struct scsi_device *sdev, int result) 1273 { 1274 struct scsi_cmnd *scmnd = srp_claim_req(ch, req, sdev, NULL); 1275 1276 if (scmnd) { 1277 srp_free_req(ch, req, scmnd, 0); 1278 scmnd->result = result; 1279 scsi_done(scmnd); 1280 } 1281 } 1282 1283 struct srp_terminate_context { 1284 struct srp_target_port *srp_target; 1285 int scsi_result; 1286 }; 1287 1288 static bool srp_terminate_cmd(struct scsi_cmnd *scmnd, void *context_ptr) 1289 { 1290 struct srp_terminate_context *context = context_ptr; 1291 struct srp_target_port *target = context->srp_target; 1292 u32 tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmnd)); 1293 struct srp_rdma_ch *ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)]; 1294 struct srp_request *req = scsi_cmd_priv(scmnd); 1295 1296 srp_finish_req(ch, req, NULL, context->scsi_result); 1297 1298 return true; 1299 } 1300 1301 static void srp_terminate_io(struct srp_rport *rport) 1302 { 1303 struct srp_target_port *target = rport->lld_data; 1304 struct srp_terminate_context context = { .srp_target = target, 1305 .scsi_result = DID_TRANSPORT_FAILFAST << 16 }; 1306 1307 scsi_host_busy_iter(target->scsi_host, srp_terminate_cmd, &context); 1308 } 1309 1310 /* Calculate maximum initiator to target information unit length. */ 1311 static uint32_t srp_max_it_iu_len(int cmd_sg_cnt, bool use_imm_data, 1312 uint32_t max_it_iu_size) 1313 { 1314 uint32_t max_iu_len = sizeof(struct srp_cmd) + SRP_MAX_ADD_CDB_LEN + 1315 sizeof(struct srp_indirect_buf) + 1316 cmd_sg_cnt * sizeof(struct srp_direct_buf); 1317 1318 if (use_imm_data) 1319 max_iu_len = max(max_iu_len, SRP_IMM_DATA_OFFSET + 1320 srp_max_imm_data); 1321 1322 if (max_it_iu_size) 1323 max_iu_len = min(max_iu_len, max_it_iu_size); 1324 1325 pr_debug("max_iu_len = %d\n", max_iu_len); 1326 1327 return max_iu_len; 1328 } 1329 1330 /* 1331 * It is up to the caller to ensure that srp_rport_reconnect() calls are 1332 * serialized and that no concurrent srp_queuecommand(), srp_abort(), 1333 * srp_reset_device() or srp_reset_host() calls will occur while this function 1334 * is in progress. One way to realize that is not to call this function 1335 * directly but to call srp_reconnect_rport() instead since that last function 1336 * serializes calls of this function via rport->mutex and also blocks 1337 * srp_queuecommand() calls before invoking this function. 1338 */ 1339 static int srp_rport_reconnect(struct srp_rport *rport) 1340 { 1341 struct srp_target_port *target = rport->lld_data; 1342 struct srp_rdma_ch *ch; 1343 uint32_t max_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, 1344 srp_use_imm_data, 1345 target->max_it_iu_size); 1346 int i, j, ret = 0; 1347 bool multich = false; 1348 1349 srp_disconnect_target(target); 1350 1351 if (target->state == SRP_TARGET_SCANNING) 1352 return -ENODEV; 1353 1354 /* 1355 * Now get a new local CM ID so that we avoid confusing the target in 1356 * case things are really fouled up. Doing so also ensures that all CM 1357 * callbacks will have finished before a new QP is allocated. 1358 */ 1359 for (i = 0; i < target->ch_count; i++) { 1360 ch = &target->ch[i]; 1361 ret += srp_new_cm_id(ch); 1362 } 1363 { 1364 struct srp_terminate_context context = { 1365 .srp_target = target, .scsi_result = DID_RESET << 16}; 1366 1367 scsi_host_busy_iter(target->scsi_host, srp_terminate_cmd, 1368 &context); 1369 } 1370 for (i = 0; i < target->ch_count; i++) { 1371 ch = &target->ch[i]; 1372 /* 1373 * Whether or not creating a new CM ID succeeded, create a new 1374 * QP. This guarantees that all completion callback function 1375 * invocations have finished before request resetting starts. 1376 */ 1377 ret += srp_create_ch_ib(ch); 1378 1379 INIT_LIST_HEAD(&ch->free_tx); 1380 for (j = 0; j < target->queue_size; ++j) 1381 list_add(&ch->tx_ring[j]->list, &ch->free_tx); 1382 } 1383 1384 target->qp_in_error = false; 1385 1386 for (i = 0; i < target->ch_count; i++) { 1387 ch = &target->ch[i]; 1388 if (ret) 1389 break; 1390 ret = srp_connect_ch(ch, max_iu_len, multich); 1391 multich = true; 1392 } 1393 1394 if (ret == 0) 1395 shost_printk(KERN_INFO, target->scsi_host, 1396 PFX "reconnect succeeded\n"); 1397 1398 return ret; 1399 } 1400 1401 static void srp_map_desc(struct srp_map_state *state, dma_addr_t dma_addr, 1402 unsigned int dma_len, u32 rkey) 1403 { 1404 struct srp_direct_buf *desc = state->desc; 1405 1406 WARN_ON_ONCE(!dma_len); 1407 1408 desc->va = cpu_to_be64(dma_addr); 1409 desc->key = cpu_to_be32(rkey); 1410 desc->len = cpu_to_be32(dma_len); 1411 1412 state->total_len += dma_len; 1413 state->desc++; 1414 state->ndesc++; 1415 } 1416 1417 static void srp_reg_mr_err_done(struct ib_cq *cq, struct ib_wc *wc) 1418 { 1419 srp_handle_qp_err(cq, wc, "FAST REG"); 1420 } 1421 1422 /* 1423 * Map up to sg_nents elements of state->sg where *sg_offset_p is the offset 1424 * where to start in the first element. If sg_offset_p != NULL then 1425 * *sg_offset_p is updated to the offset in state->sg[retval] of the first 1426 * byte that has not yet been mapped. 1427 */ 1428 static int srp_map_finish_fr(struct srp_map_state *state, 1429 struct srp_request *req, 1430 struct srp_rdma_ch *ch, int sg_nents, 1431 unsigned int *sg_offset_p) 1432 { 1433 struct srp_target_port *target = ch->target; 1434 struct srp_device *dev = target->srp_host->srp_dev; 1435 struct ib_reg_wr wr; 1436 struct srp_fr_desc *desc; 1437 u32 rkey; 1438 int n, err; 1439 1440 if (state->fr.next >= state->fr.end) { 1441 shost_printk(KERN_ERR, ch->target->scsi_host, 1442 PFX "Out of MRs (mr_per_cmd = %d)\n", 1443 ch->target->mr_per_cmd); 1444 return -ENOMEM; 1445 } 1446 1447 WARN_ON_ONCE(!dev->use_fast_reg); 1448 1449 if (sg_nents == 1 && target->global_rkey) { 1450 unsigned int sg_offset = sg_offset_p ? *sg_offset_p : 0; 1451 1452 srp_map_desc(state, sg_dma_address(state->sg) + sg_offset, 1453 sg_dma_len(state->sg) - sg_offset, 1454 target->global_rkey); 1455 if (sg_offset_p) 1456 *sg_offset_p = 0; 1457 return 1; 1458 } 1459 1460 desc = srp_fr_pool_get(ch->fr_pool); 1461 if (!desc) 1462 return -ENOMEM; 1463 1464 rkey = ib_inc_rkey(desc->mr->rkey); 1465 ib_update_fast_reg_key(desc->mr, rkey); 1466 1467 n = ib_map_mr_sg(desc->mr, state->sg, sg_nents, sg_offset_p, 1468 dev->mr_page_size); 1469 if (unlikely(n < 0)) { 1470 srp_fr_pool_put(ch->fr_pool, &desc, 1); 1471 pr_debug("%s: ib_map_mr_sg(%d, %d) returned %d.\n", 1472 dev_name(&req->scmnd->device->sdev_gendev), sg_nents, 1473 sg_offset_p ? *sg_offset_p : -1, n); 1474 return n; 1475 } 1476 1477 WARN_ON_ONCE(desc->mr->length == 0); 1478 1479 req->reg_cqe.done = srp_reg_mr_err_done; 1480 1481 wr.wr.next = NULL; 1482 wr.wr.opcode = IB_WR_REG_MR; 1483 wr.wr.wr_cqe = &req->reg_cqe; 1484 wr.wr.num_sge = 0; 1485 wr.wr.send_flags = 0; 1486 wr.mr = desc->mr; 1487 wr.key = desc->mr->rkey; 1488 wr.access = (IB_ACCESS_LOCAL_WRITE | 1489 IB_ACCESS_REMOTE_READ | 1490 IB_ACCESS_REMOTE_WRITE); 1491 1492 *state->fr.next++ = desc; 1493 state->nmdesc++; 1494 1495 srp_map_desc(state, desc->mr->iova, 1496 desc->mr->length, desc->mr->rkey); 1497 1498 err = ib_post_send(ch->qp, &wr.wr, NULL); 1499 if (unlikely(err)) { 1500 WARN_ON_ONCE(err == -ENOMEM); 1501 return err; 1502 } 1503 1504 return n; 1505 } 1506 1507 static int srp_map_sg_fr(struct srp_map_state *state, struct srp_rdma_ch *ch, 1508 struct srp_request *req, struct scatterlist *scat, 1509 int count) 1510 { 1511 unsigned int sg_offset = 0; 1512 1513 state->fr.next = req->fr_list; 1514 state->fr.end = req->fr_list + ch->target->mr_per_cmd; 1515 state->sg = scat; 1516 1517 if (count == 0) 1518 return 0; 1519 1520 while (count) { 1521 int i, n; 1522 1523 n = srp_map_finish_fr(state, req, ch, count, &sg_offset); 1524 if (unlikely(n < 0)) 1525 return n; 1526 1527 count -= n; 1528 for (i = 0; i < n; i++) 1529 state->sg = sg_next(state->sg); 1530 } 1531 1532 return 0; 1533 } 1534 1535 static int srp_map_sg_dma(struct srp_map_state *state, struct srp_rdma_ch *ch, 1536 struct srp_request *req, struct scatterlist *scat, 1537 int count) 1538 { 1539 struct srp_target_port *target = ch->target; 1540 struct scatterlist *sg; 1541 int i; 1542 1543 for_each_sg(scat, sg, count, i) { 1544 srp_map_desc(state, sg_dma_address(sg), sg_dma_len(sg), 1545 target->global_rkey); 1546 } 1547 1548 return 0; 1549 } 1550 1551 /* 1552 * Register the indirect data buffer descriptor with the HCA. 1553 * 1554 * Note: since the indirect data buffer descriptor has been allocated with 1555 * kmalloc() it is guaranteed that this buffer is a physically contiguous 1556 * memory buffer. 1557 */ 1558 static int srp_map_idb(struct srp_rdma_ch *ch, struct srp_request *req, 1559 void **next_mr, void **end_mr, u32 idb_len, 1560 __be32 *idb_rkey) 1561 { 1562 struct srp_target_port *target = ch->target; 1563 struct srp_device *dev = target->srp_host->srp_dev; 1564 struct srp_map_state state; 1565 struct srp_direct_buf idb_desc; 1566 struct scatterlist idb_sg[1]; 1567 int ret; 1568 1569 memset(&state, 0, sizeof(state)); 1570 memset(&idb_desc, 0, sizeof(idb_desc)); 1571 state.gen.next = next_mr; 1572 state.gen.end = end_mr; 1573 state.desc = &idb_desc; 1574 state.base_dma_addr = req->indirect_dma_addr; 1575 state.dma_len = idb_len; 1576 1577 if (dev->use_fast_reg) { 1578 state.sg = idb_sg; 1579 sg_init_one(idb_sg, req->indirect_desc, idb_len); 1580 idb_sg->dma_address = req->indirect_dma_addr; /* hack! */ 1581 #ifdef CONFIG_NEED_SG_DMA_LENGTH 1582 idb_sg->dma_length = idb_sg->length; /* hack^2 */ 1583 #endif 1584 ret = srp_map_finish_fr(&state, req, ch, 1, NULL); 1585 if (ret < 0) 1586 return ret; 1587 WARN_ON_ONCE(ret < 1); 1588 } else { 1589 return -EINVAL; 1590 } 1591 1592 *idb_rkey = idb_desc.key; 1593 1594 return 0; 1595 } 1596 1597 static void srp_check_mapping(struct srp_map_state *state, 1598 struct srp_rdma_ch *ch, struct srp_request *req, 1599 struct scatterlist *scat, int count) 1600 { 1601 struct srp_device *dev = ch->target->srp_host->srp_dev; 1602 struct srp_fr_desc **pfr; 1603 u64 desc_len = 0, mr_len = 0; 1604 int i; 1605 1606 for (i = 0; i < state->ndesc; i++) 1607 desc_len += be32_to_cpu(req->indirect_desc[i].len); 1608 if (dev->use_fast_reg) 1609 for (i = 0, pfr = req->fr_list; i < state->nmdesc; i++, pfr++) 1610 mr_len += (*pfr)->mr->length; 1611 if (desc_len != scsi_bufflen(req->scmnd) || 1612 mr_len > scsi_bufflen(req->scmnd)) 1613 pr_err("Inconsistent: scsi len %d <> desc len %lld <> mr len %lld; ndesc %d; nmdesc = %d\n", 1614 scsi_bufflen(req->scmnd), desc_len, mr_len, 1615 state->ndesc, state->nmdesc); 1616 } 1617 1618 /** 1619 * srp_map_data() - map SCSI data buffer onto an SRP request 1620 * @scmnd: SCSI command to map 1621 * @ch: SRP RDMA channel 1622 * @req: SRP request 1623 * 1624 * Returns the length in bytes of the SRP_CMD IU or a negative value if 1625 * mapping failed. The size of any immediate data is not included in the 1626 * return value. 1627 */ 1628 static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_rdma_ch *ch, 1629 struct srp_request *req) 1630 { 1631 struct srp_target_port *target = ch->target; 1632 struct scatterlist *scat, *sg; 1633 struct srp_cmd *cmd = req->cmd->buf; 1634 int i, len, nents, count, ret; 1635 struct srp_device *dev; 1636 struct ib_device *ibdev; 1637 struct srp_map_state state; 1638 struct srp_indirect_buf *indirect_hdr; 1639 u64 data_len; 1640 u32 idb_len, table_len; 1641 __be32 idb_rkey; 1642 u8 fmt; 1643 1644 req->cmd->num_sge = 1; 1645 1646 if (!scsi_sglist(scmnd) || scmnd->sc_data_direction == DMA_NONE) 1647 return sizeof(struct srp_cmd) + cmd->add_cdb_len; 1648 1649 if (scmnd->sc_data_direction != DMA_FROM_DEVICE && 1650 scmnd->sc_data_direction != DMA_TO_DEVICE) { 1651 shost_printk(KERN_WARNING, target->scsi_host, 1652 PFX "Unhandled data direction %d\n", 1653 scmnd->sc_data_direction); 1654 return -EINVAL; 1655 } 1656 1657 nents = scsi_sg_count(scmnd); 1658 scat = scsi_sglist(scmnd); 1659 data_len = scsi_bufflen(scmnd); 1660 1661 dev = target->srp_host->srp_dev; 1662 ibdev = dev->dev; 1663 1664 count = ib_dma_map_sg(ibdev, scat, nents, scmnd->sc_data_direction); 1665 if (unlikely(count == 0)) 1666 return -EIO; 1667 1668 if (ch->use_imm_data && 1669 count <= ch->max_imm_sge && 1670 SRP_IMM_DATA_OFFSET + data_len <= ch->max_it_iu_len && 1671 scmnd->sc_data_direction == DMA_TO_DEVICE) { 1672 struct srp_imm_buf *buf; 1673 struct ib_sge *sge = &req->cmd->sge[1]; 1674 1675 fmt = SRP_DATA_DESC_IMM; 1676 len = SRP_IMM_DATA_OFFSET; 1677 req->nmdesc = 0; 1678 buf = (void *)cmd->add_data + cmd->add_cdb_len; 1679 buf->len = cpu_to_be32(data_len); 1680 WARN_ON_ONCE((void *)(buf + 1) > (void *)cmd + len); 1681 for_each_sg(scat, sg, count, i) { 1682 sge[i].addr = sg_dma_address(sg); 1683 sge[i].length = sg_dma_len(sg); 1684 sge[i].lkey = target->lkey; 1685 } 1686 req->cmd->num_sge += count; 1687 goto map_complete; 1688 } 1689 1690 fmt = SRP_DATA_DESC_DIRECT; 1691 len = sizeof(struct srp_cmd) + cmd->add_cdb_len + 1692 sizeof(struct srp_direct_buf); 1693 1694 if (count == 1 && target->global_rkey) { 1695 /* 1696 * The midlayer only generated a single gather/scatter 1697 * entry, or DMA mapping coalesced everything to a 1698 * single entry. So a direct descriptor along with 1699 * the DMA MR suffices. 1700 */ 1701 struct srp_direct_buf *buf; 1702 1703 buf = (void *)cmd->add_data + cmd->add_cdb_len; 1704 buf->va = cpu_to_be64(sg_dma_address(scat)); 1705 buf->key = cpu_to_be32(target->global_rkey); 1706 buf->len = cpu_to_be32(sg_dma_len(scat)); 1707 1708 req->nmdesc = 0; 1709 goto map_complete; 1710 } 1711 1712 /* 1713 * We have more than one scatter/gather entry, so build our indirect 1714 * descriptor table, trying to merge as many entries as we can. 1715 */ 1716 indirect_hdr = (void *)cmd->add_data + cmd->add_cdb_len; 1717 1718 ib_dma_sync_single_for_cpu(ibdev, req->indirect_dma_addr, 1719 target->indirect_size, DMA_TO_DEVICE); 1720 1721 memset(&state, 0, sizeof(state)); 1722 state.desc = req->indirect_desc; 1723 if (dev->use_fast_reg) 1724 ret = srp_map_sg_fr(&state, ch, req, scat, count); 1725 else 1726 ret = srp_map_sg_dma(&state, ch, req, scat, count); 1727 req->nmdesc = state.nmdesc; 1728 if (ret < 0) 1729 goto unmap; 1730 1731 { 1732 DEFINE_DYNAMIC_DEBUG_METADATA(ddm, 1733 "Memory mapping consistency check"); 1734 if (DYNAMIC_DEBUG_BRANCH(ddm)) 1735 srp_check_mapping(&state, ch, req, scat, count); 1736 } 1737 1738 /* We've mapped the request, now pull as much of the indirect 1739 * descriptor table as we can into the command buffer. If this 1740 * target is not using an external indirect table, we are 1741 * guaranteed to fit into the command, as the SCSI layer won't 1742 * give us more S/G entries than we allow. 1743 */ 1744 if (state.ndesc == 1) { 1745 /* 1746 * Memory registration collapsed the sg-list into one entry, 1747 * so use a direct descriptor. 1748 */ 1749 struct srp_direct_buf *buf; 1750 1751 buf = (void *)cmd->add_data + cmd->add_cdb_len; 1752 *buf = req->indirect_desc[0]; 1753 goto map_complete; 1754 } 1755 1756 if (unlikely(target->cmd_sg_cnt < state.ndesc && 1757 !target->allow_ext_sg)) { 1758 shost_printk(KERN_ERR, target->scsi_host, 1759 "Could not fit S/G list into SRP_CMD\n"); 1760 ret = -EIO; 1761 goto unmap; 1762 } 1763 1764 count = min(state.ndesc, target->cmd_sg_cnt); 1765 table_len = state.ndesc * sizeof (struct srp_direct_buf); 1766 idb_len = sizeof(struct srp_indirect_buf) + table_len; 1767 1768 fmt = SRP_DATA_DESC_INDIRECT; 1769 len = sizeof(struct srp_cmd) + cmd->add_cdb_len + 1770 sizeof(struct srp_indirect_buf); 1771 len += count * sizeof (struct srp_direct_buf); 1772 1773 memcpy(indirect_hdr->desc_list, req->indirect_desc, 1774 count * sizeof (struct srp_direct_buf)); 1775 1776 if (!target->global_rkey) { 1777 ret = srp_map_idb(ch, req, state.gen.next, state.gen.end, 1778 idb_len, &idb_rkey); 1779 if (ret < 0) 1780 goto unmap; 1781 req->nmdesc++; 1782 } else { 1783 idb_rkey = cpu_to_be32(target->global_rkey); 1784 } 1785 1786 indirect_hdr->table_desc.va = cpu_to_be64(req->indirect_dma_addr); 1787 indirect_hdr->table_desc.key = idb_rkey; 1788 indirect_hdr->table_desc.len = cpu_to_be32(table_len); 1789 indirect_hdr->len = cpu_to_be32(state.total_len); 1790 1791 if (scmnd->sc_data_direction == DMA_TO_DEVICE) 1792 cmd->data_out_desc_cnt = count; 1793 else 1794 cmd->data_in_desc_cnt = count; 1795 1796 ib_dma_sync_single_for_device(ibdev, req->indirect_dma_addr, table_len, 1797 DMA_TO_DEVICE); 1798 1799 map_complete: 1800 if (scmnd->sc_data_direction == DMA_TO_DEVICE) 1801 cmd->buf_fmt = fmt << 4; 1802 else 1803 cmd->buf_fmt = fmt; 1804 1805 return len; 1806 1807 unmap: 1808 srp_unmap_data(scmnd, ch, req); 1809 if (ret == -ENOMEM && req->nmdesc >= target->mr_pool_size) 1810 ret = -E2BIG; 1811 return ret; 1812 } 1813 1814 /* 1815 * Return an IU and possible credit to the free pool 1816 */ 1817 static void srp_put_tx_iu(struct srp_rdma_ch *ch, struct srp_iu *iu, 1818 enum srp_iu_type iu_type) 1819 { 1820 unsigned long flags; 1821 1822 spin_lock_irqsave(&ch->lock, flags); 1823 list_add(&iu->list, &ch->free_tx); 1824 if (iu_type != SRP_IU_RSP) 1825 ++ch->req_lim; 1826 spin_unlock_irqrestore(&ch->lock, flags); 1827 } 1828 1829 /* 1830 * Must be called with ch->lock held to protect req_lim and free_tx. 1831 * If IU is not sent, it must be returned using srp_put_tx_iu(). 1832 * 1833 * Note: 1834 * An upper limit for the number of allocated information units for each 1835 * request type is: 1836 * - SRP_IU_CMD: SRP_CMD_SQ_SIZE, since the SCSI mid-layer never queues 1837 * more than Scsi_Host.can_queue requests. 1838 * - SRP_IU_TSK_MGMT: SRP_TSK_MGMT_SQ_SIZE. 1839 * - SRP_IU_RSP: 1, since a conforming SRP target never sends more than 1840 * one unanswered SRP request to an initiator. 1841 */ 1842 static struct srp_iu *__srp_get_tx_iu(struct srp_rdma_ch *ch, 1843 enum srp_iu_type iu_type) 1844 { 1845 struct srp_target_port *target = ch->target; 1846 s32 rsv = (iu_type == SRP_IU_TSK_MGMT) ? 0 : SRP_TSK_MGMT_SQ_SIZE; 1847 struct srp_iu *iu; 1848 1849 lockdep_assert_held(&ch->lock); 1850 1851 ib_process_cq_direct(ch->send_cq, -1); 1852 1853 if (list_empty(&ch->free_tx)) 1854 return NULL; 1855 1856 /* Initiator responses to target requests do not consume credits */ 1857 if (iu_type != SRP_IU_RSP) { 1858 if (ch->req_lim <= rsv) { 1859 ++target->zero_req_lim; 1860 return NULL; 1861 } 1862 1863 --ch->req_lim; 1864 } 1865 1866 iu = list_first_entry(&ch->free_tx, struct srp_iu, list); 1867 list_del(&iu->list); 1868 return iu; 1869 } 1870 1871 /* 1872 * Note: if this function is called from inside ib_drain_sq() then it will 1873 * be called without ch->lock being held. If ib_drain_sq() dequeues a WQE 1874 * with status IB_WC_SUCCESS then that's a bug. 1875 */ 1876 static void srp_send_done(struct ib_cq *cq, struct ib_wc *wc) 1877 { 1878 struct srp_iu *iu = container_of(wc->wr_cqe, struct srp_iu, cqe); 1879 struct srp_rdma_ch *ch = cq->cq_context; 1880 1881 if (unlikely(wc->status != IB_WC_SUCCESS)) { 1882 srp_handle_qp_err(cq, wc, "SEND"); 1883 return; 1884 } 1885 1886 lockdep_assert_held(&ch->lock); 1887 1888 list_add(&iu->list, &ch->free_tx); 1889 } 1890 1891 /** 1892 * srp_post_send() - send an SRP information unit 1893 * @ch: RDMA channel over which to send the information unit. 1894 * @iu: Information unit to send. 1895 * @len: Length of the information unit excluding immediate data. 1896 */ 1897 static int srp_post_send(struct srp_rdma_ch *ch, struct srp_iu *iu, int len) 1898 { 1899 struct srp_target_port *target = ch->target; 1900 struct ib_send_wr wr; 1901 1902 if (WARN_ON_ONCE(iu->num_sge > SRP_MAX_SGE)) 1903 return -EINVAL; 1904 1905 iu->sge[0].addr = iu->dma; 1906 iu->sge[0].length = len; 1907 iu->sge[0].lkey = target->lkey; 1908 1909 iu->cqe.done = srp_send_done; 1910 1911 wr.next = NULL; 1912 wr.wr_cqe = &iu->cqe; 1913 wr.sg_list = &iu->sge[0]; 1914 wr.num_sge = iu->num_sge; 1915 wr.opcode = IB_WR_SEND; 1916 wr.send_flags = IB_SEND_SIGNALED; 1917 1918 return ib_post_send(ch->qp, &wr, NULL); 1919 } 1920 1921 static int srp_post_recv(struct srp_rdma_ch *ch, struct srp_iu *iu) 1922 { 1923 struct srp_target_port *target = ch->target; 1924 struct ib_recv_wr wr; 1925 struct ib_sge list; 1926 1927 list.addr = iu->dma; 1928 list.length = iu->size; 1929 list.lkey = target->lkey; 1930 1931 iu->cqe.done = srp_recv_done; 1932 1933 wr.next = NULL; 1934 wr.wr_cqe = &iu->cqe; 1935 wr.sg_list = &list; 1936 wr.num_sge = 1; 1937 1938 return ib_post_recv(ch->qp, &wr, NULL); 1939 } 1940 1941 static void srp_process_rsp(struct srp_rdma_ch *ch, struct srp_rsp *rsp, 1942 u32 byte_len) 1943 { 1944 struct srp_target_port *target = ch->target; 1945 struct srp_request *req; 1946 struct scsi_cmnd *scmnd; 1947 unsigned long flags; 1948 1949 if (unlikely(rsp->tag & SRP_TAG_TSK_MGMT)) { 1950 spin_lock_irqsave(&ch->lock, flags); 1951 ch->req_lim += be32_to_cpu(rsp->req_lim_delta); 1952 if (rsp->tag == ch->tsk_mgmt_tag) { 1953 ch->tsk_mgmt_status = -1; 1954 if (be32_to_cpu(rsp->resp_data_len) >= 4 && 1955 byte_len >= sizeof(*rsp) + 4) 1956 ch->tsk_mgmt_status = rsp->data[3]; 1957 complete(&ch->tsk_mgmt_done); 1958 } else { 1959 shost_printk(KERN_ERR, target->scsi_host, 1960 "Received tsk mgmt response too late for tag %#llx\n", 1961 rsp->tag); 1962 } 1963 spin_unlock_irqrestore(&ch->lock, flags); 1964 } else { 1965 scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag); 1966 if (scmnd) { 1967 req = scsi_cmd_priv(scmnd); 1968 scmnd = srp_claim_req(ch, req, NULL, scmnd); 1969 } 1970 if (!scmnd) { 1971 shost_printk(KERN_ERR, target->scsi_host, 1972 "Null scmnd for RSP w/tag %#016llx received on ch %td / QP %#x\n", 1973 rsp->tag, ch - target->ch, ch->qp->qp_num); 1974 1975 spin_lock_irqsave(&ch->lock, flags); 1976 ch->req_lim += be32_to_cpu(rsp->req_lim_delta); 1977 spin_unlock_irqrestore(&ch->lock, flags); 1978 1979 return; 1980 } 1981 scmnd->result = rsp->status; 1982 1983 if (rsp->flags & SRP_RSP_FLAG_SNSVALID) { 1984 u32 resp_len = be32_to_cpu(rsp->resp_data_len); 1985 u32 sense_len = be32_to_cpu(rsp->sense_data_len); 1986 1987 /* 1988 * The sense data starts resp_data_len bytes past the 1989 * response data area; both lengths come from the 1990 * target-controlled response. Copy the sense data 1991 * only if it has not been truncated, that is, only if 1992 * the full sense region fits within the bytes actually 1993 * received. Otherwise the copy source would run past 1994 * the receive buffer (sized to the target-chosen 1995 * max_ti_iu_len), reading out of bounds. 1996 */ 1997 if (sizeof(*rsp) + (u64)resp_len + sense_len <= byte_len) 1998 memcpy(scmnd->sense_buffer, 1999 rsp->data + resp_len, 2000 min(sense_len, SCSI_SENSE_BUFFERSIZE)); 2001 else 2002 shost_printk(KERN_ERR, target->scsi_host, 2003 "dropping truncated sense data (resp_data_len %u sense_data_len %u, %u bytes received)\n", 2004 resp_len, sense_len, byte_len); 2005 } 2006 2007 if (unlikely(rsp->flags & SRP_RSP_FLAG_DIUNDER)) 2008 scsi_set_resid(scmnd, be32_to_cpu(rsp->data_in_res_cnt)); 2009 else if (unlikely(rsp->flags & SRP_RSP_FLAG_DOUNDER)) 2010 scsi_set_resid(scmnd, be32_to_cpu(rsp->data_out_res_cnt)); 2011 2012 srp_free_req(ch, req, scmnd, 2013 be32_to_cpu(rsp->req_lim_delta)); 2014 2015 scsi_done(scmnd); 2016 } 2017 } 2018 2019 static int srp_response_common(struct srp_rdma_ch *ch, s32 req_delta, 2020 void *rsp, int len) 2021 { 2022 struct srp_target_port *target = ch->target; 2023 struct ib_device *dev = target->srp_host->srp_dev->dev; 2024 unsigned long flags; 2025 struct srp_iu *iu; 2026 int err; 2027 2028 spin_lock_irqsave(&ch->lock, flags); 2029 ch->req_lim += req_delta; 2030 iu = __srp_get_tx_iu(ch, SRP_IU_RSP); 2031 spin_unlock_irqrestore(&ch->lock, flags); 2032 2033 if (!iu) { 2034 shost_printk(KERN_ERR, target->scsi_host, PFX 2035 "no IU available to send response\n"); 2036 return 1; 2037 } 2038 2039 iu->num_sge = 1; 2040 ib_dma_sync_single_for_cpu(dev, iu->dma, len, DMA_TO_DEVICE); 2041 memcpy(iu->buf, rsp, len); 2042 ib_dma_sync_single_for_device(dev, iu->dma, len, DMA_TO_DEVICE); 2043 2044 err = srp_post_send(ch, iu, len); 2045 if (err) { 2046 shost_printk(KERN_ERR, target->scsi_host, PFX 2047 "unable to post response: %d\n", err); 2048 srp_put_tx_iu(ch, iu, SRP_IU_RSP); 2049 } 2050 2051 return err; 2052 } 2053 2054 static void srp_process_cred_req(struct srp_rdma_ch *ch, 2055 struct srp_cred_req *req, u32 byte_len) 2056 { 2057 struct srp_cred_rsp rsp = { .opcode = SRP_CRED_RSP }; 2058 s32 delta; 2059 2060 if (byte_len < sizeof(*req)) { 2061 shost_printk(KERN_ERR, ch->target->scsi_host, PFX 2062 "dropping truncated SRP_CRED_REQ (%u bytes received, %zu expected)\n", 2063 byte_len, sizeof(*req)); 2064 return; 2065 } 2066 2067 rsp.tag = req->tag; 2068 delta = be32_to_cpu(req->req_lim_delta); 2069 2070 if (srp_response_common(ch, delta, &rsp, sizeof(rsp))) 2071 shost_printk(KERN_ERR, ch->target->scsi_host, PFX 2072 "problems processing SRP_CRED_REQ\n"); 2073 } 2074 2075 static void srp_process_aer_req(struct srp_rdma_ch *ch, 2076 struct srp_aer_req *req, u32 byte_len) 2077 { 2078 struct srp_target_port *target = ch->target; 2079 struct srp_aer_rsp rsp = { .opcode = SRP_AER_RSP }; 2080 s32 delta; 2081 2082 if (byte_len < sizeof(*req)) { 2083 shost_printk(KERN_ERR, target->scsi_host, PFX 2084 "dropping truncated SRP_AER_REQ (%u bytes received, %zu expected)\n", 2085 byte_len, sizeof(*req)); 2086 return; 2087 } 2088 2089 rsp.tag = req->tag; 2090 delta = be32_to_cpu(req->req_lim_delta); 2091 2092 shost_printk(KERN_ERR, target->scsi_host, PFX 2093 "ignoring AER for LUN %llu\n", scsilun_to_int(&req->lun)); 2094 2095 if (srp_response_common(ch, delta, &rsp, sizeof(rsp))) 2096 shost_printk(KERN_ERR, target->scsi_host, PFX 2097 "problems processing SRP_AER_REQ\n"); 2098 } 2099 2100 static void srp_recv_done(struct ib_cq *cq, struct ib_wc *wc) 2101 { 2102 struct srp_iu *iu = container_of(wc->wr_cqe, struct srp_iu, cqe); 2103 struct srp_rdma_ch *ch = cq->cq_context; 2104 struct srp_target_port *target = ch->target; 2105 struct ib_device *dev = target->srp_host->srp_dev->dev; 2106 int res; 2107 u8 opcode; 2108 2109 if (unlikely(wc->status != IB_WC_SUCCESS)) { 2110 srp_handle_qp_err(cq, wc, "RECV"); 2111 return; 2112 } 2113 2114 ib_dma_sync_single_for_cpu(dev, iu->dma, ch->max_ti_iu_len, 2115 DMA_FROM_DEVICE); 2116 2117 opcode = *(u8 *) iu->buf; 2118 2119 if (0) { 2120 shost_printk(KERN_ERR, target->scsi_host, 2121 PFX "recv completion, opcode 0x%02x\n", opcode); 2122 print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 8, 1, 2123 iu->buf, wc->byte_len, true); 2124 } 2125 2126 switch (opcode) { 2127 case SRP_RSP: 2128 srp_process_rsp(ch, iu->buf, wc->byte_len); 2129 break; 2130 2131 case SRP_CRED_REQ: 2132 srp_process_cred_req(ch, iu->buf, wc->byte_len); 2133 break; 2134 2135 case SRP_AER_REQ: 2136 srp_process_aer_req(ch, iu->buf, wc->byte_len); 2137 break; 2138 2139 case SRP_T_LOGOUT: 2140 /* XXX Handle target logout */ 2141 shost_printk(KERN_WARNING, target->scsi_host, 2142 PFX "Got target logout request\n"); 2143 break; 2144 2145 default: 2146 shost_printk(KERN_WARNING, target->scsi_host, 2147 PFX "Unhandled SRP opcode 0x%02x\n", opcode); 2148 break; 2149 } 2150 2151 ib_dma_sync_single_for_device(dev, iu->dma, ch->max_ti_iu_len, 2152 DMA_FROM_DEVICE); 2153 2154 res = srp_post_recv(ch, iu); 2155 if (res != 0) 2156 shost_printk(KERN_ERR, target->scsi_host, 2157 PFX "Recv failed with error code %d\n", res); 2158 } 2159 2160 /** 2161 * srp_tl_err_work() - handle a transport layer error 2162 * @work: Work structure embedded in an SRP target port. 2163 * 2164 * Note: This function may get invoked before the rport has been created, 2165 * hence the target->rport test. 2166 */ 2167 static void srp_tl_err_work(struct work_struct *work) 2168 { 2169 struct srp_target_port *target; 2170 2171 target = container_of(work, struct srp_target_port, tl_err_work); 2172 if (target->rport) 2173 srp_start_tl_fail_timers(target->rport); 2174 } 2175 2176 static void srp_handle_qp_err(struct ib_cq *cq, struct ib_wc *wc, 2177 const char *opname) 2178 { 2179 struct srp_rdma_ch *ch = cq->cq_context; 2180 struct srp_target_port *target = ch->target; 2181 2182 if (ch->connected && !target->qp_in_error) { 2183 shost_printk(KERN_ERR, target->scsi_host, 2184 PFX "failed %s status %s (%d) for CQE %p\n", 2185 opname, ib_wc_status_msg(wc->status), wc->status, 2186 wc->wr_cqe); 2187 queue_work(system_long_wq, &target->tl_err_work); 2188 } 2189 target->qp_in_error = true; 2190 } 2191 2192 static enum scsi_qc_status srp_queuecommand(struct Scsi_Host *shost, 2193 struct scsi_cmnd *scmnd) 2194 { 2195 struct request *rq = scsi_cmd_to_rq(scmnd); 2196 struct srp_target_port *target = host_to_target(shost); 2197 struct srp_rdma_ch *ch; 2198 struct srp_request *req = scsi_cmd_priv(scmnd); 2199 struct srp_iu *iu; 2200 struct srp_cmd *cmd; 2201 struct ib_device *dev; 2202 unsigned long flags; 2203 u32 tag; 2204 int len, ret; 2205 2206 scmnd->result = srp_chkready(target->rport); 2207 if (unlikely(scmnd->result)) 2208 goto err; 2209 2210 WARN_ON_ONCE(rq->tag < 0); 2211 tag = blk_mq_unique_tag(rq); 2212 ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)]; 2213 2214 spin_lock_irqsave(&ch->lock, flags); 2215 iu = __srp_get_tx_iu(ch, SRP_IU_CMD); 2216 spin_unlock_irqrestore(&ch->lock, flags); 2217 2218 if (!iu) 2219 goto err; 2220 2221 dev = target->srp_host->srp_dev->dev; 2222 ib_dma_sync_single_for_cpu(dev, iu->dma, ch->max_it_iu_len, 2223 DMA_TO_DEVICE); 2224 2225 cmd = iu->buf; 2226 memset(cmd, 0, sizeof *cmd); 2227 2228 cmd->opcode = SRP_CMD; 2229 int_to_scsilun(scmnd->device->lun, &cmd->lun); 2230 cmd->tag = tag; 2231 memcpy(cmd->cdb, scmnd->cmnd, scmnd->cmd_len); 2232 if (unlikely(scmnd->cmd_len > sizeof(cmd->cdb))) { 2233 cmd->add_cdb_len = round_up(scmnd->cmd_len - sizeof(cmd->cdb), 2234 4); 2235 if (WARN_ON_ONCE(cmd->add_cdb_len > SRP_MAX_ADD_CDB_LEN)) 2236 goto err_iu; 2237 } 2238 2239 req->scmnd = scmnd; 2240 req->cmd = iu; 2241 2242 len = srp_map_data(scmnd, ch, req); 2243 if (len < 0) { 2244 shost_printk(KERN_ERR, target->scsi_host, 2245 PFX "Failed to map data (%d)\n", len); 2246 /* 2247 * If we ran out of memory descriptors (-ENOMEM) because an 2248 * application is queuing many requests with more than 2249 * max_pages_per_mr sg-list elements, tell the SCSI mid-layer 2250 * to reduce queue depth temporarily. 2251 */ 2252 scmnd->result = len == -ENOMEM ? 2253 DID_OK << 16 | SAM_STAT_TASK_SET_FULL : DID_ERROR << 16; 2254 goto err_iu; 2255 } 2256 2257 ib_dma_sync_single_for_device(dev, iu->dma, ch->max_it_iu_len, 2258 DMA_TO_DEVICE); 2259 2260 if (srp_post_send(ch, iu, len)) { 2261 shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n"); 2262 scmnd->result = DID_ERROR << 16; 2263 goto err_unmap; 2264 } 2265 2266 return 0; 2267 2268 err_unmap: 2269 srp_unmap_data(scmnd, ch, req); 2270 2271 err_iu: 2272 srp_put_tx_iu(ch, iu, SRP_IU_CMD); 2273 2274 /* 2275 * Avoid that the loops that iterate over the request ring can 2276 * encounter a dangling SCSI command pointer. 2277 */ 2278 req->scmnd = NULL; 2279 2280 err: 2281 if (scmnd->result) { 2282 scsi_done(scmnd); 2283 ret = 0; 2284 } else { 2285 ret = SCSI_MLQUEUE_HOST_BUSY; 2286 } 2287 2288 return ret; 2289 } 2290 2291 /* 2292 * Note: the resources allocated in this function are freed in 2293 * srp_free_ch_ib(). 2294 */ 2295 static int srp_alloc_iu_bufs(struct srp_rdma_ch *ch) 2296 { 2297 struct srp_target_port *target = ch->target; 2298 int i; 2299 2300 ch->rx_ring = kzalloc_objs(*ch->rx_ring, target->queue_size); 2301 if (!ch->rx_ring) 2302 goto err_no_ring; 2303 ch->tx_ring = kzalloc_objs(*ch->tx_ring, target->queue_size); 2304 if (!ch->tx_ring) 2305 goto err_no_ring; 2306 2307 for (i = 0; i < target->queue_size; ++i) { 2308 ch->rx_ring[i] = srp_alloc_iu(target->srp_host, 2309 ch->max_ti_iu_len, 2310 GFP_KERNEL, DMA_FROM_DEVICE); 2311 if (!ch->rx_ring[i]) 2312 goto err; 2313 } 2314 2315 for (i = 0; i < target->queue_size; ++i) { 2316 ch->tx_ring[i] = srp_alloc_iu(target->srp_host, 2317 ch->max_it_iu_len, 2318 GFP_KERNEL, DMA_TO_DEVICE); 2319 if (!ch->tx_ring[i]) 2320 goto err; 2321 2322 list_add(&ch->tx_ring[i]->list, &ch->free_tx); 2323 } 2324 2325 return 0; 2326 2327 err: 2328 for (i = 0; i < target->queue_size; ++i) { 2329 srp_free_iu(target->srp_host, ch->rx_ring[i]); 2330 srp_free_iu(target->srp_host, ch->tx_ring[i]); 2331 } 2332 2333 2334 err_no_ring: 2335 kfree(ch->tx_ring); 2336 ch->tx_ring = NULL; 2337 kfree(ch->rx_ring); 2338 ch->rx_ring = NULL; 2339 2340 return -ENOMEM; 2341 } 2342 2343 static uint32_t srp_compute_rq_tmo(struct ib_qp_attr *qp_attr, int attr_mask) 2344 { 2345 uint64_t T_tr_ns, max_compl_time_ms; 2346 uint32_t rq_tmo_jiffies; 2347 2348 /* 2349 * According to section 11.2.4.2 in the IBTA spec (Modify Queue Pair, 2350 * table 91), both the QP timeout and the retry count have to be set 2351 * for RC QP's during the RTR to RTS transition. 2352 */ 2353 WARN_ON_ONCE((attr_mask & (IB_QP_TIMEOUT | IB_QP_RETRY_CNT)) != 2354 (IB_QP_TIMEOUT | IB_QP_RETRY_CNT)); 2355 2356 /* 2357 * Set target->rq_tmo_jiffies to one second more than the largest time 2358 * it can take before an error completion is generated. See also 2359 * C9-140..142 in the IBTA spec for more information about how to 2360 * convert the QP Local ACK Timeout value to nanoseconds. 2361 */ 2362 T_tr_ns = 4096 * (1ULL << qp_attr->timeout); 2363 max_compl_time_ms = qp_attr->retry_cnt * 4 * T_tr_ns; 2364 do_div(max_compl_time_ms, NSEC_PER_MSEC); 2365 rq_tmo_jiffies = msecs_to_jiffies(max_compl_time_ms + 1000); 2366 2367 return rq_tmo_jiffies; 2368 } 2369 2370 static void srp_cm_rep_handler(struct ib_cm_id *cm_id, 2371 const struct srp_login_rsp *lrsp, 2372 struct srp_rdma_ch *ch) 2373 { 2374 struct srp_target_port *target = ch->target; 2375 struct ib_qp_attr *qp_attr = NULL; 2376 int attr_mask = 0; 2377 int ret = 0; 2378 int i; 2379 2380 if (lrsp->opcode == SRP_LOGIN_RSP) { 2381 ch->max_ti_iu_len = be32_to_cpu(lrsp->max_ti_iu_len); 2382 ch->req_lim = be32_to_cpu(lrsp->req_lim_delta); 2383 ch->use_imm_data = srp_use_imm_data && 2384 (lrsp->rsp_flags & SRP_LOGIN_RSP_IMMED_SUPP); 2385 ch->max_it_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, 2386 ch->use_imm_data, 2387 target->max_it_iu_size); 2388 WARN_ON_ONCE(ch->max_it_iu_len > 2389 be32_to_cpu(lrsp->max_it_iu_len)); 2390 2391 if (ch->use_imm_data) 2392 shost_printk(KERN_DEBUG, target->scsi_host, 2393 PFX "using immediate data\n"); 2394 2395 /* 2396 * Reserve credits for task management so we don't 2397 * bounce requests back to the SCSI mid-layer. 2398 */ 2399 target->scsi_host->can_queue 2400 = min(ch->req_lim - SRP_TSK_MGMT_SQ_SIZE, 2401 target->scsi_host->can_queue); 2402 target->scsi_host->cmd_per_lun 2403 = min_t(int, target->scsi_host->can_queue, 2404 target->scsi_host->cmd_per_lun); 2405 } else { 2406 shost_printk(KERN_WARNING, target->scsi_host, 2407 PFX "Unhandled RSP opcode %#x\n", lrsp->opcode); 2408 ret = -ECONNRESET; 2409 goto error; 2410 } 2411 2412 if (!ch->rx_ring) { 2413 ret = srp_alloc_iu_bufs(ch); 2414 if (ret) 2415 goto error; 2416 } 2417 2418 for (i = 0; i < target->queue_size; i++) { 2419 struct srp_iu *iu = ch->rx_ring[i]; 2420 2421 ret = srp_post_recv(ch, iu); 2422 if (ret) 2423 goto error; 2424 } 2425 2426 if (!target->using_rdma_cm) { 2427 ret = -ENOMEM; 2428 qp_attr = kmalloc_obj(*qp_attr); 2429 if (!qp_attr) 2430 goto error; 2431 2432 qp_attr->qp_state = IB_QPS_RTR; 2433 ret = ib_cm_init_qp_attr(cm_id, qp_attr, &attr_mask); 2434 if (ret) 2435 goto error_free; 2436 2437 ret = ib_modify_qp(ch->qp, qp_attr, attr_mask); 2438 if (ret) 2439 goto error_free; 2440 2441 qp_attr->qp_state = IB_QPS_RTS; 2442 ret = ib_cm_init_qp_attr(cm_id, qp_attr, &attr_mask); 2443 if (ret) 2444 goto error_free; 2445 2446 target->rq_tmo_jiffies = srp_compute_rq_tmo(qp_attr, attr_mask); 2447 2448 ret = ib_modify_qp(ch->qp, qp_attr, attr_mask); 2449 if (ret) 2450 goto error_free; 2451 2452 ret = ib_send_cm_rtu(cm_id, NULL, 0); 2453 } 2454 2455 error_free: 2456 kfree(qp_attr); 2457 2458 error: 2459 ch->status = ret; 2460 } 2461 2462 static void srp_ib_cm_rej_handler(struct ib_cm_id *cm_id, 2463 const struct ib_cm_event *event, 2464 struct srp_rdma_ch *ch) 2465 { 2466 struct srp_target_port *target = ch->target; 2467 struct Scsi_Host *shost = target->scsi_host; 2468 struct ib_class_port_info *cpi; 2469 int opcode; 2470 u16 dlid; 2471 2472 switch (event->param.rej_rcvd.reason) { 2473 case IB_CM_REJ_PORT_CM_REDIRECT: 2474 cpi = event->param.rej_rcvd.ari; 2475 dlid = be16_to_cpu(cpi->redirect_lid); 2476 sa_path_set_dlid(&ch->ib_cm.path, dlid); 2477 ch->ib_cm.path.pkey = cpi->redirect_pkey; 2478 cm_id->remote_cm_qpn = be32_to_cpu(cpi->redirect_qp) & 0x00ffffff; 2479 memcpy(ch->ib_cm.path.dgid.raw, cpi->redirect_gid, 16); 2480 2481 ch->status = dlid ? SRP_DLID_REDIRECT : SRP_PORT_REDIRECT; 2482 break; 2483 2484 case IB_CM_REJ_PORT_REDIRECT: 2485 if (srp_target_is_topspin(target)) { 2486 union ib_gid *dgid = &ch->ib_cm.path.dgid; 2487 2488 /* 2489 * Topspin/Cisco SRP gateways incorrectly send 2490 * reject reason code 25 when they mean 24 2491 * (port redirect). 2492 */ 2493 memcpy(dgid->raw, event->param.rej_rcvd.ari, 16); 2494 2495 shost_printk(KERN_DEBUG, shost, 2496 PFX "Topspin/Cisco redirect to target port GID %016llx%016llx\n", 2497 be64_to_cpu(dgid->global.subnet_prefix), 2498 be64_to_cpu(dgid->global.interface_id)); 2499 2500 ch->status = SRP_PORT_REDIRECT; 2501 } else { 2502 shost_printk(KERN_WARNING, shost, 2503 " REJ reason: IB_CM_REJ_PORT_REDIRECT\n"); 2504 ch->status = -ECONNRESET; 2505 } 2506 break; 2507 2508 case IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID: 2509 shost_printk(KERN_WARNING, shost, 2510 " REJ reason: IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID\n"); 2511 ch->status = -ECONNRESET; 2512 break; 2513 2514 case IB_CM_REJ_CONSUMER_DEFINED: 2515 opcode = *(u8 *) event->private_data; 2516 if (opcode == SRP_LOGIN_REJ) { 2517 struct srp_login_rej *rej = event->private_data; 2518 u32 reason = be32_to_cpu(rej->reason); 2519 2520 if (reason == SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE) 2521 shost_printk(KERN_WARNING, shost, 2522 PFX "SRP_LOGIN_REJ: requested max_it_iu_len too large\n"); 2523 else 2524 shost_printk(KERN_WARNING, shost, PFX 2525 "SRP LOGIN from %pI6 to %pI6 REJECTED, reason 0x%08x\n", 2526 target->sgid.raw, 2527 target->ib_cm.orig_dgid.raw, 2528 reason); 2529 } else 2530 shost_printk(KERN_WARNING, shost, 2531 " REJ reason: IB_CM_REJ_CONSUMER_DEFINED," 2532 " opcode 0x%02x\n", opcode); 2533 ch->status = -ECONNRESET; 2534 break; 2535 2536 case IB_CM_REJ_STALE_CONN: 2537 shost_printk(KERN_WARNING, shost, " REJ reason: stale connection\n"); 2538 ch->status = SRP_STALE_CONN; 2539 break; 2540 2541 default: 2542 shost_printk(KERN_WARNING, shost, " REJ reason 0x%x\n", 2543 event->param.rej_rcvd.reason); 2544 ch->status = -ECONNRESET; 2545 } 2546 } 2547 2548 static int srp_ib_cm_handler(struct ib_cm_id *cm_id, 2549 const struct ib_cm_event *event) 2550 { 2551 struct srp_rdma_ch *ch = cm_id->context; 2552 struct srp_target_port *target = ch->target; 2553 int comp = 0; 2554 2555 switch (event->event) { 2556 case IB_CM_REQ_ERROR: 2557 shost_printk(KERN_DEBUG, target->scsi_host, 2558 PFX "Sending CM REQ failed\n"); 2559 comp = 1; 2560 ch->status = -ECONNRESET; 2561 break; 2562 2563 case IB_CM_REP_RECEIVED: 2564 comp = 1; 2565 srp_cm_rep_handler(cm_id, event->private_data, ch); 2566 break; 2567 2568 case IB_CM_REJ_RECEIVED: 2569 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n"); 2570 comp = 1; 2571 2572 srp_ib_cm_rej_handler(cm_id, event, ch); 2573 break; 2574 2575 case IB_CM_DREQ_RECEIVED: 2576 shost_printk(KERN_WARNING, target->scsi_host, 2577 PFX "DREQ received - connection closed\n"); 2578 ch->connected = false; 2579 if (ib_send_cm_drep(cm_id, NULL, 0)) 2580 shost_printk(KERN_ERR, target->scsi_host, 2581 PFX "Sending CM DREP failed\n"); 2582 queue_work(system_long_wq, &target->tl_err_work); 2583 break; 2584 2585 case IB_CM_TIMEWAIT_EXIT: 2586 shost_printk(KERN_ERR, target->scsi_host, 2587 PFX "connection closed\n"); 2588 comp = 1; 2589 2590 ch->status = 0; 2591 break; 2592 2593 case IB_CM_MRA_RECEIVED: 2594 case IB_CM_DREQ_ERROR: 2595 case IB_CM_DREP_RECEIVED: 2596 break; 2597 2598 default: 2599 shost_printk(KERN_WARNING, target->scsi_host, 2600 PFX "Unhandled CM event %d\n", event->event); 2601 break; 2602 } 2603 2604 if (comp) 2605 complete(&ch->done); 2606 2607 return 0; 2608 } 2609 2610 static void srp_rdma_cm_rej_handler(struct srp_rdma_ch *ch, 2611 struct rdma_cm_event *event) 2612 { 2613 struct srp_target_port *target = ch->target; 2614 struct Scsi_Host *shost = target->scsi_host; 2615 int opcode; 2616 2617 switch (event->status) { 2618 case IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID: 2619 shost_printk(KERN_WARNING, shost, 2620 " REJ reason: IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID\n"); 2621 ch->status = -ECONNRESET; 2622 break; 2623 2624 case IB_CM_REJ_CONSUMER_DEFINED: 2625 opcode = *(u8 *) event->param.conn.private_data; 2626 if (opcode == SRP_LOGIN_REJ) { 2627 struct srp_login_rej *rej = 2628 (struct srp_login_rej *) 2629 event->param.conn.private_data; 2630 u32 reason = be32_to_cpu(rej->reason); 2631 2632 if (reason == SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE) 2633 shost_printk(KERN_WARNING, shost, 2634 PFX "SRP_LOGIN_REJ: requested max_it_iu_len too large\n"); 2635 else 2636 shost_printk(KERN_WARNING, shost, 2637 PFX "SRP LOGIN REJECTED, reason 0x%08x\n", reason); 2638 } else { 2639 shost_printk(KERN_WARNING, shost, 2640 " REJ reason: IB_CM_REJ_CONSUMER_DEFINED, opcode 0x%02x\n", 2641 opcode); 2642 } 2643 ch->status = -ECONNRESET; 2644 break; 2645 2646 case IB_CM_REJ_STALE_CONN: 2647 shost_printk(KERN_WARNING, shost, 2648 " REJ reason: stale connection\n"); 2649 ch->status = SRP_STALE_CONN; 2650 break; 2651 2652 default: 2653 shost_printk(KERN_WARNING, shost, " REJ reason 0x%x\n", 2654 event->status); 2655 ch->status = -ECONNRESET; 2656 break; 2657 } 2658 } 2659 2660 static int srp_rdma_cm_handler(struct rdma_cm_id *cm_id, 2661 struct rdma_cm_event *event) 2662 { 2663 struct srp_rdma_ch *ch = cm_id->context; 2664 struct srp_target_port *target = ch->target; 2665 int comp = 0; 2666 2667 switch (event->event) { 2668 case RDMA_CM_EVENT_ADDR_RESOLVED: 2669 ch->status = 0; 2670 comp = 1; 2671 break; 2672 2673 case RDMA_CM_EVENT_ADDR_ERROR: 2674 ch->status = -ENXIO; 2675 comp = 1; 2676 break; 2677 2678 case RDMA_CM_EVENT_ROUTE_RESOLVED: 2679 ch->status = 0; 2680 comp = 1; 2681 break; 2682 2683 case RDMA_CM_EVENT_ROUTE_ERROR: 2684 case RDMA_CM_EVENT_UNREACHABLE: 2685 ch->status = -EHOSTUNREACH; 2686 comp = 1; 2687 break; 2688 2689 case RDMA_CM_EVENT_CONNECT_ERROR: 2690 shost_printk(KERN_DEBUG, target->scsi_host, 2691 PFX "Sending CM REQ failed\n"); 2692 comp = 1; 2693 ch->status = -ECONNRESET; 2694 break; 2695 2696 case RDMA_CM_EVENT_ESTABLISHED: 2697 comp = 1; 2698 srp_cm_rep_handler(NULL, event->param.conn.private_data, ch); 2699 break; 2700 2701 case RDMA_CM_EVENT_REJECTED: 2702 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n"); 2703 comp = 1; 2704 2705 srp_rdma_cm_rej_handler(ch, event); 2706 break; 2707 2708 case RDMA_CM_EVENT_DISCONNECTED: 2709 if (ch->connected) { 2710 shost_printk(KERN_WARNING, target->scsi_host, 2711 PFX "received DREQ\n"); 2712 rdma_disconnect(ch->rdma_cm.cm_id); 2713 comp = 1; 2714 ch->status = 0; 2715 queue_work(system_long_wq, &target->tl_err_work); 2716 } 2717 break; 2718 2719 case RDMA_CM_EVENT_TIMEWAIT_EXIT: 2720 shost_printk(KERN_ERR, target->scsi_host, 2721 PFX "connection closed\n"); 2722 2723 comp = 1; 2724 ch->status = 0; 2725 break; 2726 2727 default: 2728 shost_printk(KERN_WARNING, target->scsi_host, 2729 PFX "Unhandled CM event %d\n", event->event); 2730 break; 2731 } 2732 2733 if (comp) 2734 complete(&ch->done); 2735 2736 return 0; 2737 } 2738 2739 /** 2740 * srp_change_queue_depth - setting device queue depth 2741 * @sdev: scsi device struct 2742 * @qdepth: requested queue depth 2743 * 2744 * Returns queue depth. 2745 */ 2746 static int 2747 srp_change_queue_depth(struct scsi_device *sdev, int qdepth) 2748 { 2749 if (!sdev->tagged_supported) 2750 qdepth = 1; 2751 return scsi_change_queue_depth(sdev, qdepth); 2752 } 2753 2754 static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, u64 lun, 2755 u8 func, u8 *status) 2756 { 2757 struct srp_target_port *target = ch->target; 2758 struct srp_rport *rport = target->rport; 2759 struct ib_device *dev = target->srp_host->srp_dev->dev; 2760 struct srp_iu *iu; 2761 struct srp_tsk_mgmt *tsk_mgmt; 2762 int res; 2763 2764 if (!ch->connected || target->qp_in_error) 2765 return -1; 2766 2767 /* 2768 * Lock the rport mutex to avoid that srp_create_ch_ib() is 2769 * invoked while a task management function is being sent. 2770 */ 2771 mutex_lock(&rport->mutex); 2772 spin_lock_irq(&ch->lock); 2773 iu = __srp_get_tx_iu(ch, SRP_IU_TSK_MGMT); 2774 spin_unlock_irq(&ch->lock); 2775 2776 if (!iu) { 2777 mutex_unlock(&rport->mutex); 2778 2779 return -1; 2780 } 2781 2782 iu->num_sge = 1; 2783 2784 ib_dma_sync_single_for_cpu(dev, iu->dma, sizeof *tsk_mgmt, 2785 DMA_TO_DEVICE); 2786 tsk_mgmt = iu->buf; 2787 memset(tsk_mgmt, 0, sizeof *tsk_mgmt); 2788 2789 tsk_mgmt->opcode = SRP_TSK_MGMT; 2790 int_to_scsilun(lun, &tsk_mgmt->lun); 2791 tsk_mgmt->tsk_mgmt_func = func; 2792 tsk_mgmt->task_tag = req_tag; 2793 2794 spin_lock_irq(&ch->lock); 2795 ch->tsk_mgmt_tag = (ch->tsk_mgmt_tag + 1) | SRP_TAG_TSK_MGMT; 2796 tsk_mgmt->tag = ch->tsk_mgmt_tag; 2797 spin_unlock_irq(&ch->lock); 2798 2799 init_completion(&ch->tsk_mgmt_done); 2800 2801 ib_dma_sync_single_for_device(dev, iu->dma, sizeof *tsk_mgmt, 2802 DMA_TO_DEVICE); 2803 if (srp_post_send(ch, iu, sizeof(*tsk_mgmt))) { 2804 srp_put_tx_iu(ch, iu, SRP_IU_TSK_MGMT); 2805 mutex_unlock(&rport->mutex); 2806 2807 return -1; 2808 } 2809 res = wait_for_completion_timeout(&ch->tsk_mgmt_done, 2810 msecs_to_jiffies(SRP_ABORT_TIMEOUT_MS)); 2811 if (res > 0 && status) 2812 *status = ch->tsk_mgmt_status; 2813 mutex_unlock(&rport->mutex); 2814 2815 WARN_ON_ONCE(res < 0); 2816 2817 return res > 0 ? 0 : -1; 2818 } 2819 2820 static int srp_abort(struct scsi_cmnd *scmnd) 2821 { 2822 struct srp_target_port *target = host_to_target(scmnd->device->host); 2823 struct srp_request *req = scsi_cmd_priv(scmnd); 2824 u32 tag; 2825 u16 ch_idx; 2826 struct srp_rdma_ch *ch; 2827 2828 shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n"); 2829 2830 tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmnd)); 2831 ch_idx = blk_mq_unique_tag_to_hwq(tag); 2832 if (WARN_ON_ONCE(ch_idx >= target->ch_count)) 2833 return SUCCESS; 2834 ch = &target->ch[ch_idx]; 2835 if (!srp_claim_req(ch, req, NULL, scmnd)) 2836 return SUCCESS; 2837 shost_printk(KERN_ERR, target->scsi_host, 2838 "Sending SRP abort for tag %#x\n", tag); 2839 if (srp_send_tsk_mgmt(ch, tag, scmnd->device->lun, 2840 SRP_TSK_ABORT_TASK, NULL) == 0) { 2841 srp_free_req(ch, req, scmnd, 0); 2842 return SUCCESS; 2843 } 2844 if (target->rport->state == SRP_RPORT_LOST) 2845 return FAST_IO_FAIL; 2846 2847 return FAILED; 2848 } 2849 2850 static int srp_reset_device(struct scsi_cmnd *scmnd) 2851 { 2852 struct srp_target_port *target = host_to_target(scmnd->device->host); 2853 struct srp_rdma_ch *ch; 2854 u8 status; 2855 2856 shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); 2857 2858 ch = &target->ch[0]; 2859 if (srp_send_tsk_mgmt(ch, SRP_TAG_NO_REQ, scmnd->device->lun, 2860 SRP_TSK_LUN_RESET, &status)) 2861 return FAILED; 2862 if (status) 2863 return FAILED; 2864 2865 return SUCCESS; 2866 } 2867 2868 static int srp_reset_host(struct scsi_cmnd *scmnd) 2869 { 2870 struct srp_target_port *target = host_to_target(scmnd->device->host); 2871 2872 shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host called\n"); 2873 2874 return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED; 2875 } 2876 2877 static int srp_target_alloc(struct scsi_target *starget) 2878 { 2879 struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); 2880 struct srp_target_port *target = host_to_target(shost); 2881 2882 if (target->target_can_queue) 2883 starget->can_queue = target->target_can_queue; 2884 return 0; 2885 } 2886 2887 static int srp_sdev_configure(struct scsi_device *sdev, 2888 struct queue_limits *lim) 2889 { 2890 struct Scsi_Host *shost = sdev->host; 2891 struct srp_target_port *target = host_to_target(shost); 2892 struct request_queue *q = sdev->request_queue; 2893 unsigned long timeout; 2894 2895 if (sdev->type == TYPE_DISK) { 2896 timeout = max_t(unsigned, 30 * HZ, target->rq_tmo_jiffies); 2897 blk_queue_rq_timeout(q, timeout); 2898 } 2899 2900 return 0; 2901 } 2902 2903 static ssize_t id_ext_show(struct device *dev, struct device_attribute *attr, 2904 char *buf) 2905 { 2906 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 2907 2908 return sysfs_emit(buf, "0x%016llx\n", be64_to_cpu(target->id_ext)); 2909 } 2910 2911 static DEVICE_ATTR_RO(id_ext); 2912 2913 static ssize_t ioc_guid_show(struct device *dev, struct device_attribute *attr, 2914 char *buf) 2915 { 2916 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 2917 2918 return sysfs_emit(buf, "0x%016llx\n", be64_to_cpu(target->ioc_guid)); 2919 } 2920 2921 static DEVICE_ATTR_RO(ioc_guid); 2922 2923 static ssize_t service_id_show(struct device *dev, 2924 struct device_attribute *attr, char *buf) 2925 { 2926 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 2927 2928 if (target->using_rdma_cm) 2929 return -ENOENT; 2930 return sysfs_emit(buf, "0x%016llx\n", 2931 be64_to_cpu(target->ib_cm.service_id)); 2932 } 2933 2934 static DEVICE_ATTR_RO(service_id); 2935 2936 static ssize_t pkey_show(struct device *dev, struct device_attribute *attr, 2937 char *buf) 2938 { 2939 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 2940 2941 if (target->using_rdma_cm) 2942 return -ENOENT; 2943 2944 return sysfs_emit(buf, "0x%04x\n", be16_to_cpu(target->ib_cm.pkey)); 2945 } 2946 2947 static DEVICE_ATTR_RO(pkey); 2948 2949 static ssize_t sgid_show(struct device *dev, struct device_attribute *attr, 2950 char *buf) 2951 { 2952 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 2953 2954 return sysfs_emit(buf, "%pI6\n", target->sgid.raw); 2955 } 2956 2957 static DEVICE_ATTR_RO(sgid); 2958 2959 static ssize_t dgid_show(struct device *dev, struct device_attribute *attr, 2960 char *buf) 2961 { 2962 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 2963 struct srp_rdma_ch *ch = &target->ch[0]; 2964 2965 if (target->using_rdma_cm) 2966 return -ENOENT; 2967 2968 return sysfs_emit(buf, "%pI6\n", ch->ib_cm.path.dgid.raw); 2969 } 2970 2971 static DEVICE_ATTR_RO(dgid); 2972 2973 static ssize_t orig_dgid_show(struct device *dev, struct device_attribute *attr, 2974 char *buf) 2975 { 2976 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 2977 2978 if (target->using_rdma_cm) 2979 return -ENOENT; 2980 2981 return sysfs_emit(buf, "%pI6\n", target->ib_cm.orig_dgid.raw); 2982 } 2983 2984 static DEVICE_ATTR_RO(orig_dgid); 2985 2986 static ssize_t req_lim_show(struct device *dev, struct device_attribute *attr, 2987 char *buf) 2988 { 2989 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 2990 struct srp_rdma_ch *ch; 2991 int i, req_lim = INT_MAX; 2992 2993 for (i = 0; i < target->ch_count; i++) { 2994 ch = &target->ch[i]; 2995 req_lim = min(req_lim, ch->req_lim); 2996 } 2997 2998 return sysfs_emit(buf, "%d\n", req_lim); 2999 } 3000 3001 static DEVICE_ATTR_RO(req_lim); 3002 3003 static ssize_t zero_req_lim_show(struct device *dev, 3004 struct device_attribute *attr, char *buf) 3005 { 3006 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 3007 3008 return sysfs_emit(buf, "%d\n", target->zero_req_lim); 3009 } 3010 3011 static DEVICE_ATTR_RO(zero_req_lim); 3012 3013 static ssize_t local_ib_port_show(struct device *dev, 3014 struct device_attribute *attr, char *buf) 3015 { 3016 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 3017 3018 return sysfs_emit(buf, "%u\n", target->srp_host->port); 3019 } 3020 3021 static DEVICE_ATTR_RO(local_ib_port); 3022 3023 static ssize_t local_ib_device_show(struct device *dev, 3024 struct device_attribute *attr, char *buf) 3025 { 3026 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 3027 3028 return sysfs_emit(buf, "%s\n", 3029 dev_name(&target->srp_host->srp_dev->dev->dev)); 3030 } 3031 3032 static DEVICE_ATTR_RO(local_ib_device); 3033 3034 static ssize_t ch_count_show(struct device *dev, struct device_attribute *attr, 3035 char *buf) 3036 { 3037 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 3038 3039 return sysfs_emit(buf, "%d\n", target->ch_count); 3040 } 3041 3042 static DEVICE_ATTR_RO(ch_count); 3043 3044 static ssize_t comp_vector_show(struct device *dev, 3045 struct device_attribute *attr, char *buf) 3046 { 3047 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 3048 3049 return sysfs_emit(buf, "%d\n", target->comp_vector); 3050 } 3051 3052 static DEVICE_ATTR_RO(comp_vector); 3053 3054 static ssize_t tl_retry_count_show(struct device *dev, 3055 struct device_attribute *attr, char *buf) 3056 { 3057 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 3058 3059 return sysfs_emit(buf, "%d\n", target->tl_retry_count); 3060 } 3061 3062 static DEVICE_ATTR_RO(tl_retry_count); 3063 3064 static ssize_t cmd_sg_entries_show(struct device *dev, 3065 struct device_attribute *attr, char *buf) 3066 { 3067 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 3068 3069 return sysfs_emit(buf, "%u\n", target->cmd_sg_cnt); 3070 } 3071 3072 static DEVICE_ATTR_RO(cmd_sg_entries); 3073 3074 static ssize_t allow_ext_sg_show(struct device *dev, 3075 struct device_attribute *attr, char *buf) 3076 { 3077 struct srp_target_port *target = host_to_target(class_to_shost(dev)); 3078 3079 return sysfs_emit(buf, "%s\n", target->allow_ext_sg ? "true" : "false"); 3080 } 3081 3082 static DEVICE_ATTR_RO(allow_ext_sg); 3083 3084 static struct attribute *srp_host_attrs[] = { 3085 &dev_attr_id_ext.attr, 3086 &dev_attr_ioc_guid.attr, 3087 &dev_attr_service_id.attr, 3088 &dev_attr_pkey.attr, 3089 &dev_attr_sgid.attr, 3090 &dev_attr_dgid.attr, 3091 &dev_attr_orig_dgid.attr, 3092 &dev_attr_req_lim.attr, 3093 &dev_attr_zero_req_lim.attr, 3094 &dev_attr_local_ib_port.attr, 3095 &dev_attr_local_ib_device.attr, 3096 &dev_attr_ch_count.attr, 3097 &dev_attr_comp_vector.attr, 3098 &dev_attr_tl_retry_count.attr, 3099 &dev_attr_cmd_sg_entries.attr, 3100 &dev_attr_allow_ext_sg.attr, 3101 NULL 3102 }; 3103 3104 ATTRIBUTE_GROUPS(srp_host); 3105 3106 static const struct scsi_host_template srp_template = { 3107 .module = THIS_MODULE, 3108 .name = "InfiniBand SRP initiator", 3109 .proc_name = DRV_NAME, 3110 .target_alloc = srp_target_alloc, 3111 .sdev_configure = srp_sdev_configure, 3112 .info = srp_target_info, 3113 .init_cmd_priv = srp_init_cmd_priv, 3114 .exit_cmd_priv = srp_exit_cmd_priv, 3115 .queuecommand = srp_queuecommand, 3116 .change_queue_depth = srp_change_queue_depth, 3117 .eh_timed_out = srp_timed_out, 3118 .eh_abort_handler = srp_abort, 3119 .eh_device_reset_handler = srp_reset_device, 3120 .eh_host_reset_handler = srp_reset_host, 3121 .skip_settle_delay = true, 3122 .sg_tablesize = SRP_DEF_SG_TABLESIZE, 3123 .can_queue = SRP_DEFAULT_CMD_SQ_SIZE, 3124 .this_id = -1, 3125 .cmd_per_lun = SRP_DEFAULT_CMD_SQ_SIZE, 3126 .shost_groups = srp_host_groups, 3127 .track_queue_depth = 1, 3128 .cmd_size = sizeof(struct srp_request), 3129 }; 3130 3131 static int srp_sdev_count(struct Scsi_Host *host) 3132 { 3133 struct scsi_device *sdev; 3134 int c = 0; 3135 3136 shost_for_each_device(sdev, host) 3137 c++; 3138 3139 return c; 3140 } 3141 3142 /* 3143 * Return values: 3144 * < 0 upon failure. Caller is responsible for SRP target port cleanup. 3145 * 0 and target->state == SRP_TARGET_REMOVED if asynchronous target port 3146 * removal has been scheduled. 3147 * 0 and target->state != SRP_TARGET_REMOVED upon success. 3148 */ 3149 static int srp_add_target(struct srp_host *host, struct srp_target_port *target) 3150 { 3151 struct srp_rport_identifiers ids; 3152 struct srp_rport *rport; 3153 3154 target->state = SRP_TARGET_SCANNING; 3155 sprintf(target->target_name, "SRP.T10:%016llX", 3156 be64_to_cpu(target->id_ext)); 3157 3158 if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dev.parent)) 3159 return -ENODEV; 3160 3161 memcpy(ids.port_id, &target->id_ext, 8); 3162 memcpy(ids.port_id + 8, &target->ioc_guid, 8); 3163 ids.roles = SRP_RPORT_ROLE_TARGET; 3164 rport = srp_rport_add(target->scsi_host, &ids); 3165 if (IS_ERR(rport)) { 3166 scsi_remove_host(target->scsi_host); 3167 return PTR_ERR(rport); 3168 } 3169 3170 rport->lld_data = target; 3171 target->rport = rport; 3172 3173 spin_lock(&host->target_lock); 3174 list_add_tail(&target->list, &host->target_list); 3175 spin_unlock(&host->target_lock); 3176 3177 scsi_scan_target(&target->scsi_host->shost_gendev, 3178 0, target->scsi_id, SCAN_WILD_CARD, SCSI_SCAN_INITIAL); 3179 3180 if (srp_connected_ch(target) < target->ch_count || 3181 target->qp_in_error) { 3182 shost_printk(KERN_INFO, target->scsi_host, 3183 PFX "SCSI scan failed - removing SCSI host\n"); 3184 srp_queue_remove_work(target); 3185 goto out; 3186 } 3187 3188 pr_debug("%s: SCSI scan succeeded - detected %d LUNs\n", 3189 dev_name(&target->scsi_host->shost_gendev), 3190 srp_sdev_count(target->scsi_host)); 3191 3192 spin_lock_irq(&target->lock); 3193 if (target->state == SRP_TARGET_SCANNING) 3194 target->state = SRP_TARGET_LIVE; 3195 spin_unlock_irq(&target->lock); 3196 3197 out: 3198 return 0; 3199 } 3200 3201 static void srp_release_dev(struct device *dev) 3202 { 3203 struct srp_host *host = 3204 container_of(dev, struct srp_host, dev); 3205 3206 kfree(host); 3207 } 3208 3209 static struct attribute *srp_class_attrs[]; 3210 3211 ATTRIBUTE_GROUPS(srp_class); 3212 3213 /* 3214 * SRP hosts are named after their ib device, so tag the class by the ib 3215 * device's net namespace. 3216 */ 3217 static const struct ns_common *srp_net_namespace(const struct device *dev) 3218 { 3219 struct srp_host *host = container_of(dev, struct srp_host, dev); 3220 struct net *net = rdma_dev_net(host->srp_dev->dev); 3221 3222 return net ? to_ns_common(net) : NULL; 3223 } 3224 3225 static struct class srp_class = { 3226 .name = "infiniband_srp", 3227 .dev_groups = srp_class_groups, 3228 .dev_release = srp_release_dev, 3229 .ns_type = &net_ns_type_operations, 3230 .namespace = srp_net_namespace, 3231 }; 3232 3233 /** 3234 * srp_conn_unique() - check whether the connection to a target is unique 3235 * @host: SRP host. 3236 * @target: SRP target port. 3237 */ 3238 static bool srp_conn_unique(struct srp_host *host, 3239 struct srp_target_port *target) 3240 { 3241 struct srp_target_port *t; 3242 bool ret = false; 3243 3244 if (target->state == SRP_TARGET_REMOVED) 3245 goto out; 3246 3247 ret = true; 3248 3249 spin_lock(&host->target_lock); 3250 list_for_each_entry(t, &host->target_list, list) { 3251 if (t != target && 3252 target->id_ext == t->id_ext && 3253 target->ioc_guid == t->ioc_guid && 3254 target->initiator_ext == t->initiator_ext) { 3255 ret = false; 3256 break; 3257 } 3258 } 3259 spin_unlock(&host->target_lock); 3260 3261 out: 3262 return ret; 3263 } 3264 3265 /* 3266 * Target ports are added by writing 3267 * 3268 * id_ext=<SRP ID ext>,ioc_guid=<SRP IOC GUID>,dgid=<dest GID>, 3269 * pkey=<P_Key>,service_id=<service ID> 3270 * or 3271 * id_ext=<SRP ID ext>,ioc_guid=<SRP IOC GUID>, 3272 * [src=<IPv4 address>,]dest=<IPv4 address>:<port number> 3273 * 3274 * to the add_target sysfs attribute. 3275 */ 3276 enum { 3277 SRP_OPT_ERR = 0, 3278 SRP_OPT_ID_EXT = 1 << 0, 3279 SRP_OPT_IOC_GUID = 1 << 1, 3280 SRP_OPT_DGID = 1 << 2, 3281 SRP_OPT_PKEY = 1 << 3, 3282 SRP_OPT_SERVICE_ID = 1 << 4, 3283 SRP_OPT_MAX_SECT = 1 << 5, 3284 SRP_OPT_MAX_CMD_PER_LUN = 1 << 6, 3285 SRP_OPT_IO_CLASS = 1 << 7, 3286 SRP_OPT_INITIATOR_EXT = 1 << 8, 3287 SRP_OPT_CMD_SG_ENTRIES = 1 << 9, 3288 SRP_OPT_ALLOW_EXT_SG = 1 << 10, 3289 SRP_OPT_SG_TABLESIZE = 1 << 11, 3290 SRP_OPT_COMP_VECTOR = 1 << 12, 3291 SRP_OPT_TL_RETRY_COUNT = 1 << 13, 3292 SRP_OPT_QUEUE_SIZE = 1 << 14, 3293 SRP_OPT_IP_SRC = 1 << 15, 3294 SRP_OPT_IP_DEST = 1 << 16, 3295 SRP_OPT_TARGET_CAN_QUEUE= 1 << 17, 3296 SRP_OPT_MAX_IT_IU_SIZE = 1 << 18, 3297 SRP_OPT_CH_COUNT = 1 << 19, 3298 }; 3299 3300 static unsigned int srp_opt_mandatory[] = { 3301 SRP_OPT_ID_EXT | 3302 SRP_OPT_IOC_GUID | 3303 SRP_OPT_DGID | 3304 SRP_OPT_PKEY | 3305 SRP_OPT_SERVICE_ID, 3306 SRP_OPT_ID_EXT | 3307 SRP_OPT_IOC_GUID | 3308 SRP_OPT_IP_DEST, 3309 }; 3310 3311 static const match_table_t srp_opt_tokens = { 3312 { SRP_OPT_ID_EXT, "id_ext=%s" }, 3313 { SRP_OPT_IOC_GUID, "ioc_guid=%s" }, 3314 { SRP_OPT_DGID, "dgid=%s" }, 3315 { SRP_OPT_PKEY, "pkey=%x" }, 3316 { SRP_OPT_SERVICE_ID, "service_id=%s" }, 3317 { SRP_OPT_MAX_SECT, "max_sect=%d" }, 3318 { SRP_OPT_MAX_CMD_PER_LUN, "max_cmd_per_lun=%d" }, 3319 { SRP_OPT_TARGET_CAN_QUEUE, "target_can_queue=%d" }, 3320 { SRP_OPT_IO_CLASS, "io_class=%x" }, 3321 { SRP_OPT_INITIATOR_EXT, "initiator_ext=%s" }, 3322 { SRP_OPT_CMD_SG_ENTRIES, "cmd_sg_entries=%u" }, 3323 { SRP_OPT_ALLOW_EXT_SG, "allow_ext_sg=%u" }, 3324 { SRP_OPT_SG_TABLESIZE, "sg_tablesize=%u" }, 3325 { SRP_OPT_COMP_VECTOR, "comp_vector=%u" }, 3326 { SRP_OPT_TL_RETRY_COUNT, "tl_retry_count=%u" }, 3327 { SRP_OPT_QUEUE_SIZE, "queue_size=%d" }, 3328 { SRP_OPT_IP_SRC, "src=%s" }, 3329 { SRP_OPT_IP_DEST, "dest=%s" }, 3330 { SRP_OPT_MAX_IT_IU_SIZE, "max_it_iu_size=%d" }, 3331 { SRP_OPT_CH_COUNT, "ch_count=%u", }, 3332 { SRP_OPT_ERR, NULL } 3333 }; 3334 3335 /** 3336 * srp_parse_in - parse an IP address and port number combination 3337 * @net: [in] Network namespace. 3338 * @sa: [out] Address family, IP address and port number. 3339 * @addr_port_str: [in] IP address and port number. 3340 * @has_port: [out] Whether or not @addr_port_str includes a port number. 3341 * 3342 * Parse the following address formats: 3343 * - IPv4: <ip_address>:<port>, e.g. 1.2.3.4:5. 3344 * - IPv6: \[<ipv6_address>\]:<port>, e.g. [1::2:3%4]:5. 3345 */ 3346 static int srp_parse_in(struct net *net, struct sockaddr_storage *sa, 3347 const char *addr_port_str, bool *has_port) 3348 { 3349 char *addr_end, *addr = kstrdup(addr_port_str, GFP_KERNEL); 3350 char *port_str; 3351 int ret; 3352 3353 if (!addr) 3354 return -ENOMEM; 3355 port_str = strrchr(addr, ':'); 3356 if (port_str && strchr(port_str, ']')) 3357 port_str = NULL; 3358 if (port_str) 3359 *port_str++ = '\0'; 3360 if (has_port) 3361 *has_port = port_str != NULL; 3362 ret = inet_pton_with_scope(net, AF_INET, addr, port_str, sa); 3363 if (ret && addr[0]) { 3364 addr_end = addr + strlen(addr) - 1; 3365 if (addr[0] == '[' && *addr_end == ']') { 3366 *addr_end = '\0'; 3367 ret = inet_pton_with_scope(net, AF_INET6, addr + 1, 3368 port_str, sa); 3369 } 3370 } 3371 kfree(addr); 3372 pr_debug("%s -> %pISpfsc\n", addr_port_str, sa); 3373 return ret; 3374 } 3375 3376 static int srp_parse_options(struct net *net, const char *buf, 3377 struct srp_target_port *target) 3378 { 3379 char *options, *sep_opt; 3380 char *p; 3381 substring_t args[MAX_OPT_ARGS]; 3382 unsigned long long ull; 3383 bool has_port; 3384 int opt_mask = 0; 3385 int token; 3386 int ret = -EINVAL; 3387 int i; 3388 3389 options = kstrdup(buf, GFP_KERNEL); 3390 if (!options) 3391 return -ENOMEM; 3392 3393 sep_opt = options; 3394 while ((p = strsep(&sep_opt, ",\n")) != NULL) { 3395 if (!*p) 3396 continue; 3397 3398 token = match_token(p, srp_opt_tokens, args); 3399 opt_mask |= token; 3400 3401 switch (token) { 3402 case SRP_OPT_ID_EXT: 3403 p = match_strdup(args); 3404 if (!p) { 3405 ret = -ENOMEM; 3406 goto out; 3407 } 3408 ret = kstrtoull(p, 16, &ull); 3409 if (ret) { 3410 pr_warn("invalid id_ext parameter '%s'\n", p); 3411 kfree(p); 3412 goto out; 3413 } 3414 target->id_ext = cpu_to_be64(ull); 3415 kfree(p); 3416 break; 3417 3418 case SRP_OPT_IOC_GUID: 3419 p = match_strdup(args); 3420 if (!p) { 3421 ret = -ENOMEM; 3422 goto out; 3423 } 3424 ret = kstrtoull(p, 16, &ull); 3425 if (ret) { 3426 pr_warn("invalid ioc_guid parameter '%s'\n", p); 3427 kfree(p); 3428 goto out; 3429 } 3430 target->ioc_guid = cpu_to_be64(ull); 3431 kfree(p); 3432 break; 3433 3434 case SRP_OPT_DGID: 3435 p = match_strdup(args); 3436 if (!p) { 3437 ret = -ENOMEM; 3438 goto out; 3439 } 3440 if (strlen(p) != 32) { 3441 pr_warn("bad dest GID parameter '%s'\n", p); 3442 kfree(p); 3443 goto out; 3444 } 3445 3446 ret = hex2bin(target->ib_cm.orig_dgid.raw, p, 16); 3447 kfree(p); 3448 if (ret < 0) 3449 goto out; 3450 break; 3451 3452 case SRP_OPT_PKEY: 3453 ret = match_hex(args, &token); 3454 if (ret) { 3455 pr_warn("bad P_Key parameter '%s'\n", p); 3456 goto out; 3457 } 3458 target->ib_cm.pkey = cpu_to_be16(token); 3459 break; 3460 3461 case SRP_OPT_SERVICE_ID: 3462 p = match_strdup(args); 3463 if (!p) { 3464 ret = -ENOMEM; 3465 goto out; 3466 } 3467 ret = kstrtoull(p, 16, &ull); 3468 if (ret) { 3469 pr_warn("bad service_id parameter '%s'\n", p); 3470 kfree(p); 3471 goto out; 3472 } 3473 target->ib_cm.service_id = cpu_to_be64(ull); 3474 kfree(p); 3475 break; 3476 3477 case SRP_OPT_IP_SRC: 3478 p = match_strdup(args); 3479 if (!p) { 3480 ret = -ENOMEM; 3481 goto out; 3482 } 3483 ret = srp_parse_in(net, &target->rdma_cm.src.ss, p, 3484 NULL); 3485 if (ret < 0) { 3486 pr_warn("bad source parameter '%s'\n", p); 3487 kfree(p); 3488 goto out; 3489 } 3490 target->rdma_cm.src_specified = true; 3491 kfree(p); 3492 break; 3493 3494 case SRP_OPT_IP_DEST: 3495 p = match_strdup(args); 3496 if (!p) { 3497 ret = -ENOMEM; 3498 goto out; 3499 } 3500 ret = srp_parse_in(net, &target->rdma_cm.dst.ss, p, 3501 &has_port); 3502 if (ret == 0 && !has_port) 3503 ret = -EINVAL; 3504 if (ret < 0) { 3505 pr_warn("bad dest parameter '%s'\n", p); 3506 kfree(p); 3507 goto out; 3508 } 3509 target->using_rdma_cm = true; 3510 kfree(p); 3511 break; 3512 3513 case SRP_OPT_MAX_SECT: 3514 ret = match_int(args, &token); 3515 if (ret) { 3516 pr_warn("bad max sect parameter '%s'\n", p); 3517 goto out; 3518 } 3519 target->scsi_host->max_sectors = token; 3520 break; 3521 3522 case SRP_OPT_QUEUE_SIZE: 3523 ret = match_int(args, &token); 3524 if (ret) { 3525 pr_warn("match_int() failed for queue_size parameter '%s', Error %d\n", 3526 p, ret); 3527 goto out; 3528 } 3529 if (token < 1) { 3530 pr_warn("bad queue_size parameter '%s'\n", p); 3531 ret = -EINVAL; 3532 goto out; 3533 } 3534 target->scsi_host->can_queue = token; 3535 target->queue_size = token + SRP_RSP_SQ_SIZE + 3536 SRP_TSK_MGMT_SQ_SIZE; 3537 if (!(opt_mask & SRP_OPT_MAX_CMD_PER_LUN)) 3538 target->scsi_host->cmd_per_lun = token; 3539 break; 3540 3541 case SRP_OPT_MAX_CMD_PER_LUN: 3542 ret = match_int(args, &token); 3543 if (ret) { 3544 pr_warn("match_int() failed for max cmd_per_lun parameter '%s', Error %d\n", 3545 p, ret); 3546 goto out; 3547 } 3548 if (token < 1) { 3549 pr_warn("bad max cmd_per_lun parameter '%s'\n", 3550 p); 3551 ret = -EINVAL; 3552 goto out; 3553 } 3554 target->scsi_host->cmd_per_lun = token; 3555 break; 3556 3557 case SRP_OPT_TARGET_CAN_QUEUE: 3558 ret = match_int(args, &token); 3559 if (ret) { 3560 pr_warn("match_int() failed for max target_can_queue parameter '%s', Error %d\n", 3561 p, ret); 3562 goto out; 3563 } 3564 if (token < 1) { 3565 pr_warn("bad max target_can_queue parameter '%s'\n", 3566 p); 3567 ret = -EINVAL; 3568 goto out; 3569 } 3570 target->target_can_queue = token; 3571 break; 3572 3573 case SRP_OPT_IO_CLASS: 3574 ret = match_hex(args, &token); 3575 if (ret) { 3576 pr_warn("bad IO class parameter '%s'\n", p); 3577 goto out; 3578 } 3579 if (token != SRP_REV10_IB_IO_CLASS && 3580 token != SRP_REV16A_IB_IO_CLASS) { 3581 pr_warn("unknown IO class parameter value %x specified (use %x or %x).\n", 3582 token, SRP_REV10_IB_IO_CLASS, 3583 SRP_REV16A_IB_IO_CLASS); 3584 ret = -EINVAL; 3585 goto out; 3586 } 3587 target->io_class = token; 3588 break; 3589 3590 case SRP_OPT_INITIATOR_EXT: 3591 p = match_strdup(args); 3592 if (!p) { 3593 ret = -ENOMEM; 3594 goto out; 3595 } 3596 ret = kstrtoull(p, 16, &ull); 3597 if (ret) { 3598 pr_warn("bad initiator_ext value '%s'\n", p); 3599 kfree(p); 3600 goto out; 3601 } 3602 target->initiator_ext = cpu_to_be64(ull); 3603 kfree(p); 3604 break; 3605 3606 case SRP_OPT_CMD_SG_ENTRIES: 3607 ret = match_int(args, &token); 3608 if (ret) { 3609 pr_warn("match_int() failed for max cmd_sg_entries parameter '%s', Error %d\n", 3610 p, ret); 3611 goto out; 3612 } 3613 if (token < 1 || token > 255) { 3614 pr_warn("bad max cmd_sg_entries parameter '%s'\n", 3615 p); 3616 ret = -EINVAL; 3617 goto out; 3618 } 3619 target->cmd_sg_cnt = token; 3620 break; 3621 3622 case SRP_OPT_ALLOW_EXT_SG: 3623 ret = match_int(args, &token); 3624 if (ret) { 3625 pr_warn("bad allow_ext_sg parameter '%s'\n", p); 3626 goto out; 3627 } 3628 target->allow_ext_sg = !!token; 3629 break; 3630 3631 case SRP_OPT_SG_TABLESIZE: 3632 ret = match_int(args, &token); 3633 if (ret) { 3634 pr_warn("match_int() failed for max sg_tablesize parameter '%s', Error %d\n", 3635 p, ret); 3636 goto out; 3637 } 3638 if (token < 1 || token > SG_MAX_SEGMENTS) { 3639 pr_warn("bad max sg_tablesize parameter '%s'\n", 3640 p); 3641 ret = -EINVAL; 3642 goto out; 3643 } 3644 target->sg_tablesize = token; 3645 break; 3646 3647 case SRP_OPT_COMP_VECTOR: 3648 ret = match_int(args, &token); 3649 if (ret) { 3650 pr_warn("match_int() failed for comp_vector parameter '%s', Error %d\n", 3651 p, ret); 3652 goto out; 3653 } 3654 if (token < 0) { 3655 pr_warn("bad comp_vector parameter '%s'\n", p); 3656 ret = -EINVAL; 3657 goto out; 3658 } 3659 target->comp_vector = token; 3660 break; 3661 3662 case SRP_OPT_TL_RETRY_COUNT: 3663 ret = match_int(args, &token); 3664 if (ret) { 3665 pr_warn("match_int() failed for tl_retry_count parameter '%s', Error %d\n", 3666 p, ret); 3667 goto out; 3668 } 3669 if (token < 2 || token > 7) { 3670 pr_warn("bad tl_retry_count parameter '%s' (must be a number between 2 and 7)\n", 3671 p); 3672 ret = -EINVAL; 3673 goto out; 3674 } 3675 target->tl_retry_count = token; 3676 break; 3677 3678 case SRP_OPT_MAX_IT_IU_SIZE: 3679 ret = match_int(args, &token); 3680 if (ret) { 3681 pr_warn("match_int() failed for max it_iu_size parameter '%s', Error %d\n", 3682 p, ret); 3683 goto out; 3684 } 3685 if (token < 0) { 3686 pr_warn("bad maximum initiator to target IU size '%s'\n", p); 3687 ret = -EINVAL; 3688 goto out; 3689 } 3690 target->max_it_iu_size = token; 3691 break; 3692 3693 case SRP_OPT_CH_COUNT: 3694 ret = match_int(args, &token); 3695 if (ret) { 3696 pr_warn("match_int() failed for channel count parameter '%s', Error %d\n", 3697 p, ret); 3698 goto out; 3699 } 3700 if (token < 1) { 3701 pr_warn("bad channel count %s\n", p); 3702 ret = -EINVAL; 3703 goto out; 3704 } 3705 target->ch_count = token; 3706 break; 3707 3708 default: 3709 pr_warn("unknown parameter or missing value '%s' in target creation request\n", 3710 p); 3711 ret = -EINVAL; 3712 goto out; 3713 } 3714 } 3715 3716 for (i = 0; i < ARRAY_SIZE(srp_opt_mandatory); i++) { 3717 if ((opt_mask & srp_opt_mandatory[i]) == srp_opt_mandatory[i]) { 3718 ret = 0; 3719 break; 3720 } 3721 } 3722 if (ret) 3723 pr_warn("target creation request is missing one or more parameters\n"); 3724 3725 if (target->scsi_host->cmd_per_lun > target->scsi_host->can_queue 3726 && (opt_mask & SRP_OPT_MAX_CMD_PER_LUN)) 3727 pr_warn("cmd_per_lun = %d > queue_size = %d\n", 3728 target->scsi_host->cmd_per_lun, 3729 target->scsi_host->can_queue); 3730 3731 out: 3732 kfree(options); 3733 return ret; 3734 } 3735 3736 static ssize_t add_target_store(struct device *dev, 3737 struct device_attribute *attr, const char *buf, 3738 size_t count) 3739 { 3740 struct srp_host *host = 3741 container_of(dev, struct srp_host, dev); 3742 struct Scsi_Host *target_host; 3743 struct srp_target_port *target; 3744 struct srp_rdma_ch *ch; 3745 struct srp_device *srp_dev = host->srp_dev; 3746 struct ib_device *ibdev = srp_dev->dev; 3747 int ret, i, ch_idx; 3748 unsigned int max_sectors_per_mr, mr_per_cmd = 0; 3749 bool multich = false; 3750 uint32_t max_iu_len; 3751 3752 target_host = scsi_host_alloc(&srp_template, 3753 sizeof (struct srp_target_port)); 3754 if (!target_host) 3755 return -ENOMEM; 3756 3757 target_host->transportt = ib_srp_transport_template; 3758 target_host->max_channel = 0; 3759 target_host->max_id = 1; 3760 target_host->max_lun = -1LL; 3761 target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb; 3762 3763 if (ibdev->attrs.kernel_cap_flags & IBK_SG_GAPS_REG) 3764 target_host->max_segment_size = ib_dma_max_seg_size(ibdev); 3765 else 3766 target_host->virt_boundary_mask = ~srp_dev->mr_page_mask; 3767 3768 target = host_to_target(target_host); 3769 3770 target->net = to_net_ns(kobj_ns_grab_current(KOBJ_NS_TYPE_NET)); 3771 target->io_class = SRP_REV16A_IB_IO_CLASS; 3772 target->scsi_host = target_host; 3773 target->srp_host = host; 3774 target->lkey = host->srp_dev->pd->local_dma_lkey; 3775 target->global_rkey = host->srp_dev->global_rkey; 3776 target->cmd_sg_cnt = cmd_sg_entries; 3777 target->sg_tablesize = indirect_sg_entries ? : cmd_sg_entries; 3778 target->allow_ext_sg = allow_ext_sg; 3779 target->tl_retry_count = 7; 3780 target->queue_size = SRP_DEFAULT_QUEUE_SIZE; 3781 3782 /* 3783 * Avoid that the SCSI host can be removed by srp_remove_target() 3784 * before this function returns. 3785 */ 3786 scsi_host_get(target->scsi_host); 3787 3788 ret = mutex_lock_interruptible(&host->add_target_mutex); 3789 if (ret < 0) 3790 goto put; 3791 3792 ret = srp_parse_options(target->net, buf, target); 3793 if (ret) 3794 goto out; 3795 3796 if (!srp_conn_unique(target->srp_host, target)) { 3797 if (target->using_rdma_cm) { 3798 shost_printk(KERN_INFO, target->scsi_host, 3799 PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;dest=%pIS\n", 3800 be64_to_cpu(target->id_ext), 3801 be64_to_cpu(target->ioc_guid), 3802 &target->rdma_cm.dst); 3803 } else { 3804 shost_printk(KERN_INFO, target->scsi_host, 3805 PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;initiator_ext=%016llx\n", 3806 be64_to_cpu(target->id_ext), 3807 be64_to_cpu(target->ioc_guid), 3808 be64_to_cpu(target->initiator_ext)); 3809 } 3810 ret = -EEXIST; 3811 goto out; 3812 } 3813 3814 if (!srp_dev->has_fr && !target->allow_ext_sg && 3815 target->cmd_sg_cnt < target->sg_tablesize) { 3816 pr_warn("No MR pool and no external indirect descriptors, limiting sg_tablesize to cmd_sg_cnt\n"); 3817 target->sg_tablesize = target->cmd_sg_cnt; 3818 } 3819 3820 if (srp_dev->use_fast_reg) { 3821 bool gaps_reg = ibdev->attrs.kernel_cap_flags & 3822 IBK_SG_GAPS_REG; 3823 3824 max_sectors_per_mr = srp_dev->max_pages_per_mr << 3825 (ilog2(srp_dev->mr_page_size) - 9); 3826 if (!gaps_reg) { 3827 /* 3828 * FR can only map one HCA page per entry. If the start 3829 * address is not aligned on a HCA page boundary two 3830 * entries will be used for the head and the tail 3831 * although these two entries combined contain at most 3832 * one HCA page of data. Hence the "+ 1" in the 3833 * calculation below. 3834 * 3835 * The indirect data buffer descriptor is contiguous 3836 * so the memory for that buffer will only be 3837 * registered if register_always is true. Hence add 3838 * one to mr_per_cmd if register_always has been set. 3839 */ 3840 mr_per_cmd = register_always + 3841 (target->scsi_host->max_sectors + 1 + 3842 max_sectors_per_mr - 1) / max_sectors_per_mr; 3843 } else { 3844 mr_per_cmd = register_always + 3845 (target->sg_tablesize + 3846 srp_dev->max_pages_per_mr - 1) / 3847 srp_dev->max_pages_per_mr; 3848 } 3849 pr_debug("max_sectors = %u; max_pages_per_mr = %u; mr_page_size = %u; max_sectors_per_mr = %u; mr_per_cmd = %u\n", 3850 target->scsi_host->max_sectors, srp_dev->max_pages_per_mr, srp_dev->mr_page_size, 3851 max_sectors_per_mr, mr_per_cmd); 3852 } 3853 3854 target_host->sg_tablesize = target->sg_tablesize; 3855 target->mr_pool_size = target->scsi_host->can_queue * mr_per_cmd; 3856 target->mr_per_cmd = mr_per_cmd; 3857 target->indirect_size = target->sg_tablesize * 3858 sizeof (struct srp_direct_buf); 3859 max_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, 3860 srp_use_imm_data, 3861 target->max_it_iu_size); 3862 3863 INIT_WORK(&target->tl_err_work, srp_tl_err_work); 3864 INIT_WORK(&target->remove_work, srp_remove_work); 3865 spin_lock_init(&target->lock); 3866 ret = rdma_query_gid(ibdev, host->port, 0, &target->sgid); 3867 if (ret) 3868 goto out; 3869 3870 ret = -ENOMEM; 3871 if (target->ch_count == 0) { 3872 target->ch_count = 3873 min(ch_count ?: 3874 max(4 * num_online_nodes(), 3875 ibdev->num_comp_vectors), 3876 num_online_cpus()); 3877 } 3878 3879 target->ch = kzalloc_objs(*target->ch, target->ch_count); 3880 if (!target->ch) 3881 goto out; 3882 3883 for (ch_idx = 0; ch_idx < target->ch_count; ++ch_idx) { 3884 ch = &target->ch[ch_idx]; 3885 ch->target = target; 3886 ch->comp_vector = ch_idx % ibdev->num_comp_vectors; 3887 spin_lock_init(&ch->lock); 3888 INIT_LIST_HEAD(&ch->free_tx); 3889 ret = srp_new_cm_id(ch); 3890 if (ret) 3891 goto err_disconnect; 3892 3893 ret = srp_create_ch_ib(ch); 3894 if (ret) 3895 goto err_disconnect; 3896 3897 ret = srp_connect_ch(ch, max_iu_len, multich); 3898 if (ret) { 3899 char dst[64]; 3900 3901 if (target->using_rdma_cm) 3902 snprintf(dst, sizeof(dst), "%pIS", 3903 &target->rdma_cm.dst); 3904 else 3905 snprintf(dst, sizeof(dst), "%pI6", 3906 target->ib_cm.orig_dgid.raw); 3907 shost_printk(KERN_ERR, target->scsi_host, 3908 PFX "Connection %d/%d to %s failed\n", 3909 ch_idx, 3910 target->ch_count, dst); 3911 if (ch_idx == 0) { 3912 goto free_ch; 3913 } else { 3914 srp_free_ch_ib(target, ch); 3915 target->ch_count = ch - target->ch; 3916 goto connected; 3917 } 3918 } 3919 multich = true; 3920 } 3921 3922 connected: 3923 target->scsi_host->nr_hw_queues = target->ch_count; 3924 3925 ret = srp_add_target(host, target); 3926 if (ret) 3927 goto err_disconnect; 3928 3929 if (target->state != SRP_TARGET_REMOVED) { 3930 if (target->using_rdma_cm) { 3931 shost_printk(KERN_DEBUG, target->scsi_host, PFX 3932 "new target: id_ext %016llx ioc_guid %016llx sgid %pI6 dest %pIS\n", 3933 be64_to_cpu(target->id_ext), 3934 be64_to_cpu(target->ioc_guid), 3935 target->sgid.raw, &target->rdma_cm.dst); 3936 } else { 3937 shost_printk(KERN_DEBUG, target->scsi_host, PFX 3938 "new target: id_ext %016llx ioc_guid %016llx pkey %04x service_id %016llx sgid %pI6 dgid %pI6\n", 3939 be64_to_cpu(target->id_ext), 3940 be64_to_cpu(target->ioc_guid), 3941 be16_to_cpu(target->ib_cm.pkey), 3942 be64_to_cpu(target->ib_cm.service_id), 3943 target->sgid.raw, 3944 target->ib_cm.orig_dgid.raw); 3945 } 3946 } 3947 3948 ret = count; 3949 3950 out: 3951 mutex_unlock(&host->add_target_mutex); 3952 3953 put: 3954 scsi_host_put(target->scsi_host); 3955 if (ret < 0) { 3956 /* 3957 * If a call to srp_remove_target() has not been scheduled, 3958 * drop the network namespace reference now that was obtained 3959 * earlier in this function. 3960 */ 3961 if (target->state != SRP_TARGET_REMOVED) 3962 kobj_ns_drop(KOBJ_NS_TYPE_NET, to_ns_common(target->net)); 3963 scsi_host_put(target->scsi_host); 3964 } 3965 3966 return ret; 3967 3968 err_disconnect: 3969 srp_disconnect_target(target); 3970 3971 free_ch: 3972 for (i = 0; i < target->ch_count; i++) { 3973 ch = &target->ch[i]; 3974 srp_free_ch_ib(target, ch); 3975 } 3976 3977 kfree(target->ch); 3978 goto out; 3979 } 3980 3981 static DEVICE_ATTR_WO(add_target); 3982 3983 static ssize_t ibdev_show(struct device *dev, struct device_attribute *attr, 3984 char *buf) 3985 { 3986 struct srp_host *host = container_of(dev, struct srp_host, dev); 3987 3988 return sysfs_emit(buf, "%s\n", dev_name(&host->srp_dev->dev->dev)); 3989 } 3990 3991 static DEVICE_ATTR_RO(ibdev); 3992 3993 static ssize_t port_show(struct device *dev, struct device_attribute *attr, 3994 char *buf) 3995 { 3996 struct srp_host *host = container_of(dev, struct srp_host, dev); 3997 3998 return sysfs_emit(buf, "%u\n", host->port); 3999 } 4000 4001 static DEVICE_ATTR_RO(port); 4002 4003 static struct attribute *srp_class_attrs[] = { 4004 &dev_attr_add_target.attr, 4005 &dev_attr_ibdev.attr, 4006 &dev_attr_port.attr, 4007 NULL 4008 }; 4009 4010 static struct srp_host *srp_add_port(struct srp_device *device, u32 port) 4011 { 4012 struct srp_host *host; 4013 4014 host = kzalloc_obj(*host); 4015 if (!host) 4016 return NULL; 4017 4018 INIT_LIST_HEAD(&host->target_list); 4019 spin_lock_init(&host->target_lock); 4020 mutex_init(&host->add_target_mutex); 4021 host->srp_dev = device; 4022 host->port = port; 4023 4024 device_initialize(&host->dev); 4025 host->dev.class = &srp_class; 4026 host->dev.parent = device->dev->dev.parent; 4027 if (dev_set_name(&host->dev, "srp-%s-%u", dev_name(&device->dev->dev), 4028 port)) 4029 goto put_host; 4030 if (device_add(&host->dev)) 4031 goto put_host; 4032 4033 return host; 4034 4035 put_host: 4036 put_device(&host->dev); 4037 return NULL; 4038 } 4039 4040 static void srp_rename_dev(struct ib_device *device, void *client_data) 4041 { 4042 struct srp_device *srp_dev = client_data; 4043 struct srp_host *host, *tmp_host; 4044 4045 list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) { 4046 char name[IB_DEVICE_NAME_MAX + 8]; 4047 4048 snprintf(name, sizeof(name), "srp-%s-%u", 4049 dev_name(&device->dev), host->port); 4050 device_rename(&host->dev, name); 4051 } 4052 } 4053 4054 static int srp_add_one(struct ib_device *device) 4055 { 4056 struct srp_device *srp_dev; 4057 struct ib_device_attr *attr = &device->attrs; 4058 struct srp_host *host; 4059 int mr_page_shift; 4060 u32 p; 4061 u64 max_pages_per_mr; 4062 unsigned int flags = 0; 4063 4064 srp_dev = kzalloc_obj(*srp_dev); 4065 if (!srp_dev) 4066 return -ENOMEM; 4067 4068 /* 4069 * Use the smallest page size supported by the HCA, down to a 4070 * minimum of 4096 bytes. We're unlikely to build large sglists 4071 * out of smaller entries. 4072 */ 4073 mr_page_shift = max(12, ffs(attr->page_size_cap) - 1); 4074 srp_dev->mr_page_size = 1 << mr_page_shift; 4075 srp_dev->mr_page_mask = ~((u64) srp_dev->mr_page_size - 1); 4076 max_pages_per_mr = attr->max_mr_size; 4077 do_div(max_pages_per_mr, srp_dev->mr_page_size); 4078 pr_debug("%s: %llu / %u = %llu <> %u\n", __func__, 4079 attr->max_mr_size, srp_dev->mr_page_size, 4080 max_pages_per_mr, SRP_MAX_PAGES_PER_MR); 4081 srp_dev->max_pages_per_mr = min_t(u64, SRP_MAX_PAGES_PER_MR, 4082 max_pages_per_mr); 4083 4084 srp_dev->has_fr = (attr->device_cap_flags & 4085 IB_DEVICE_MEM_MGT_EXTENSIONS); 4086 if (!never_register && !srp_dev->has_fr) 4087 dev_warn(&device->dev, "FR is not supported\n"); 4088 else if (!never_register && 4089 attr->max_mr_size >= 2 * srp_dev->mr_page_size) 4090 srp_dev->use_fast_reg = srp_dev->has_fr; 4091 4092 if (never_register || !register_always || !srp_dev->has_fr) 4093 flags |= IB_PD_UNSAFE_GLOBAL_RKEY; 4094 4095 if (srp_dev->use_fast_reg) { 4096 srp_dev->max_pages_per_mr = 4097 min_t(u32, srp_dev->max_pages_per_mr, 4098 attr->max_fast_reg_page_list_len); 4099 } 4100 srp_dev->mr_max_size = srp_dev->mr_page_size * 4101 srp_dev->max_pages_per_mr; 4102 pr_debug("%s: mr_page_shift = %d, device->max_mr_size = %#llx, device->max_fast_reg_page_list_len = %u, max_pages_per_mr = %d, mr_max_size = %#x\n", 4103 dev_name(&device->dev), mr_page_shift, attr->max_mr_size, 4104 attr->max_fast_reg_page_list_len, 4105 srp_dev->max_pages_per_mr, srp_dev->mr_max_size); 4106 4107 INIT_LIST_HEAD(&srp_dev->dev_list); 4108 4109 srp_dev->dev = device; 4110 srp_dev->pd = ib_alloc_pd(device, flags); 4111 if (IS_ERR(srp_dev->pd)) { 4112 int ret = PTR_ERR(srp_dev->pd); 4113 4114 kfree(srp_dev); 4115 return ret; 4116 } 4117 4118 if (flags & IB_PD_UNSAFE_GLOBAL_RKEY) { 4119 srp_dev->global_rkey = srp_dev->pd->unsafe_global_rkey; 4120 WARN_ON_ONCE(srp_dev->global_rkey == 0); 4121 } 4122 4123 rdma_for_each_port (device, p) { 4124 host = srp_add_port(srp_dev, p); 4125 if (host) 4126 list_add_tail(&host->list, &srp_dev->dev_list); 4127 } 4128 4129 ib_set_client_data(device, &srp_client, srp_dev); 4130 return 0; 4131 } 4132 4133 static void srp_remove_one(struct ib_device *device, void *client_data) 4134 { 4135 struct srp_device *srp_dev; 4136 struct srp_host *host, *tmp_host; 4137 struct srp_target_port *target; 4138 4139 srp_dev = client_data; 4140 4141 list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) { 4142 /* 4143 * Remove the add_target sysfs entry so that no new target ports 4144 * can be created. 4145 */ 4146 device_del(&host->dev); 4147 4148 /* 4149 * Remove all target ports. 4150 */ 4151 spin_lock(&host->target_lock); 4152 list_for_each_entry(target, &host->target_list, list) 4153 srp_queue_remove_work(target); 4154 spin_unlock(&host->target_lock); 4155 4156 /* 4157 * srp_queue_remove_work() queues a call to 4158 * srp_remove_target(). The latter function cancels 4159 * target->tl_err_work so waiting for the remove works to 4160 * finish is sufficient. 4161 */ 4162 flush_workqueue(srp_remove_wq); 4163 4164 put_device(&host->dev); 4165 } 4166 4167 ib_dealloc_pd(srp_dev->pd); 4168 4169 kfree(srp_dev); 4170 } 4171 4172 static struct srp_function_template ib_srp_transport_functions = { 4173 .has_rport_state = true, 4174 .reset_timer_if_blocked = true, 4175 .reconnect_delay = &srp_reconnect_delay, 4176 .fast_io_fail_tmo = &srp_fast_io_fail_tmo, 4177 .dev_loss_tmo = &srp_dev_loss_tmo, 4178 .reconnect = srp_rport_reconnect, 4179 .rport_delete = srp_rport_delete, 4180 .terminate_rport_io = srp_terminate_io, 4181 }; 4182 4183 static int __init srp_init_module(void) 4184 { 4185 int ret; 4186 4187 BUILD_BUG_ON(sizeof(struct srp_aer_req) != 36); 4188 BUILD_BUG_ON(sizeof(struct srp_cmd) != 48); 4189 BUILD_BUG_ON(sizeof(struct srp_imm_buf) != 4); 4190 BUILD_BUG_ON(sizeof(struct srp_indirect_buf) != 20); 4191 BUILD_BUG_ON(sizeof(struct srp_login_req) != 64); 4192 BUILD_BUG_ON(sizeof(struct srp_login_req_rdma) != 56); 4193 BUILD_BUG_ON(sizeof(struct srp_rsp) != 36); 4194 4195 if (srp_sg_tablesize) { 4196 pr_warn("srp_sg_tablesize is deprecated, please use cmd_sg_entries\n"); 4197 if (!cmd_sg_entries) 4198 cmd_sg_entries = srp_sg_tablesize; 4199 } 4200 4201 if (!cmd_sg_entries) 4202 cmd_sg_entries = SRP_DEF_SG_TABLESIZE; 4203 4204 if (cmd_sg_entries > 255) { 4205 pr_warn("Clamping cmd_sg_entries to 255\n"); 4206 cmd_sg_entries = 255; 4207 } 4208 4209 if (!indirect_sg_entries) 4210 indirect_sg_entries = cmd_sg_entries; 4211 else if (indirect_sg_entries < cmd_sg_entries) { 4212 pr_warn("Bumping up indirect_sg_entries to match cmd_sg_entries (%u)\n", 4213 cmd_sg_entries); 4214 indirect_sg_entries = cmd_sg_entries; 4215 } 4216 4217 if (indirect_sg_entries > SG_MAX_SEGMENTS) { 4218 pr_warn("Clamping indirect_sg_entries to %u\n", 4219 SG_MAX_SEGMENTS); 4220 indirect_sg_entries = SG_MAX_SEGMENTS; 4221 } 4222 4223 srp_remove_wq = create_workqueue("srp_remove"); 4224 if (!srp_remove_wq) { 4225 ret = -ENOMEM; 4226 goto out; 4227 } 4228 4229 ret = -ENOMEM; 4230 ib_srp_transport_template = 4231 srp_attach_transport(&ib_srp_transport_functions); 4232 if (!ib_srp_transport_template) 4233 goto destroy_wq; 4234 4235 ret = class_register(&srp_class); 4236 if (ret) { 4237 pr_err("couldn't register class infiniband_srp\n"); 4238 goto release_tr; 4239 } 4240 4241 ib_sa_register_client(&srp_sa_client); 4242 4243 ret = ib_register_client(&srp_client); 4244 if (ret) { 4245 pr_err("couldn't register IB client\n"); 4246 goto unreg_sa; 4247 } 4248 4249 out: 4250 return ret; 4251 4252 unreg_sa: 4253 ib_sa_unregister_client(&srp_sa_client); 4254 class_unregister(&srp_class); 4255 4256 release_tr: 4257 srp_release_transport(ib_srp_transport_template); 4258 4259 destroy_wq: 4260 destroy_workqueue(srp_remove_wq); 4261 goto out; 4262 } 4263 4264 static void __exit srp_cleanup_module(void) 4265 { 4266 ib_unregister_client(&srp_client); 4267 ib_sa_unregister_client(&srp_sa_client); 4268 class_unregister(&srp_class); 4269 srp_release_transport(ib_srp_transport_template); 4270 destroy_workqueue(srp_remove_wq); 4271 } 4272 4273 module_init(srp_init_module); 4274 module_exit(srp_cleanup_module); 4275