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
srp_tmo_get(char * buffer,const struct kernel_param * kp)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
srp_tmo_set(const char * val,const struct kernel_param * kp)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
host_to_target(struct Scsi_Host * host)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
srp_target_info(struct Scsi_Host * host)208 static const char *srp_target_info(struct Scsi_Host *host)
209 {
210 return host_to_target(host)->target_name;
211 }
212
srp_target_is_topspin(struct srp_target_port * target)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
srp_alloc_iu(struct srp_host * host,size_t size,gfp_t gfp_mask,enum dma_data_direction direction)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
srp_free_iu(struct srp_host * host,struct srp_iu * iu)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
srp_qp_event(struct ib_event * event,void * context)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
srp_init_ib_qp(struct srp_target_port * target,struct ib_qp * qp)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
srp_new_ib_cm_id(struct srp_rdma_ch * ch)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
srp_new_rdma_cm_id(struct srp_rdma_ch * ch)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
srp_new_cm_id(struct srp_rdma_ch * ch)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 */
srp_destroy_fr_pool(struct srp_fr_pool * pool)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 */
srp_create_fr_pool(struct ib_device * device,struct ib_pd * pd,int pool_size,int max_page_list_len)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 */
srp_fr_pool_get(struct srp_fr_pool * pool)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 */
srp_fr_pool_put(struct srp_fr_pool * pool,struct srp_fr_desc ** desc,int n)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
srp_alloc_fr_pool(struct srp_target_port * target)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 */
srp_destroy_qp(struct srp_rdma_ch * ch)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
srp_create_ch_ib(struct srp_rdma_ch * ch)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 */
srp_free_ch_ib(struct srp_target_port * target,struct srp_rdma_ch * ch)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
srp_path_rec_completion(int status,struct sa_path_rec * pathrec,unsigned int num_paths,void * ch_ptr)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
srp_ib_lookup_path(struct srp_rdma_ch * ch)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
srp_rdma_lookup_path(struct srp_rdma_ch * ch)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
srp_lookup_path(struct srp_rdma_ch * ch)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
srp_get_subnet_timeout(struct srp_host * host)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
srp_send_req(struct srp_rdma_ch * ch,uint32_t max_iu_len,bool multich)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
srp_queue_remove_work(struct srp_target_port * target)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
srp_disconnect_target(struct srp_target_port * target)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
srp_exit_cmd_priv(struct Scsi_Host * shost,struct scsi_cmnd * cmd)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
srp_init_cmd_priv(struct Scsi_Host * shost,struct scsi_cmnd * cmd)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 */
srp_del_scsi_host_attr(struct Scsi_Host * shost)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
srp_remove_target(struct srp_target_port * target)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
srp_remove_work(struct work_struct * work)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
srp_rport_delete(struct srp_rport * rport)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 */
srp_connected_ch(struct srp_target_port * target)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
srp_connect_ch(struct srp_rdma_ch * ch,uint32_t max_iu_len,bool multich)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
srp_inv_rkey_err_done(struct ib_cq * cq,struct ib_wc * wc)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
srp_inv_rkey(struct srp_request * req,struct srp_rdma_ch * ch,u32 rkey)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
srp_unmap_data(struct scsi_cmnd * scmnd,struct srp_rdma_ch * ch,struct srp_request * req)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 */
srp_claim_req(struct srp_rdma_ch * ch,struct srp_request * req,struct scsi_device * sdev,struct scsi_cmnd * scmnd)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 */
srp_free_req(struct srp_rdma_ch * ch,struct srp_request * req,struct scsi_cmnd * scmnd,s32 req_lim_delta)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
srp_finish_req(struct srp_rdma_ch * ch,struct srp_request * req,struct scsi_device * sdev,int result)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
srp_terminate_cmd(struct scsi_cmnd * scmnd,void * context_ptr)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
srp_terminate_io(struct srp_rport * rport)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. */
srp_max_it_iu_len(int cmd_sg_cnt,bool use_imm_data,uint32_t max_it_iu_size)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 */
srp_rport_reconnect(struct srp_rport * rport)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
srp_map_desc(struct srp_map_state * state,dma_addr_t dma_addr,unsigned int dma_len,u32 rkey)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
srp_reg_mr_err_done(struct ib_cq * cq,struct ib_wc * wc)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 */
srp_map_finish_fr(struct srp_map_state * state,struct srp_request * req,struct srp_rdma_ch * ch,int sg_nents,unsigned int * sg_offset_p)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
srp_map_sg_fr(struct srp_map_state * state,struct srp_rdma_ch * ch,struct srp_request * req,struct scatterlist * scat,int count)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
srp_map_sg_dma(struct srp_map_state * state,struct srp_rdma_ch * ch,struct srp_request * req,struct scatterlist * scat,int count)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 */
srp_map_idb(struct srp_rdma_ch * ch,struct srp_request * req,void ** next_mr,void ** end_mr,u32 idb_len,__be32 * idb_rkey)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
srp_check_mapping(struct srp_map_state * state,struct srp_rdma_ch * ch,struct srp_request * req,struct scatterlist * scat,int count)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 */
srp_map_data(struct scsi_cmnd * scmnd,struct srp_rdma_ch * ch,struct srp_request * req)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 */
srp_put_tx_iu(struct srp_rdma_ch * ch,struct srp_iu * iu,enum srp_iu_type iu_type)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 */
__srp_get_tx_iu(struct srp_rdma_ch * ch,enum srp_iu_type iu_type)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 */
srp_send_done(struct ib_cq * cq,struct ib_wc * wc)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 */
srp_post_send(struct srp_rdma_ch * ch,struct srp_iu * iu,int len)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
srp_post_recv(struct srp_rdma_ch * ch,struct srp_iu * iu)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
srp_process_rsp(struct srp_rdma_ch * ch,struct srp_rsp * rsp,u32 byte_len)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
srp_response_common(struct srp_rdma_ch * ch,s32 req_delta,void * rsp,int len)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
srp_process_cred_req(struct srp_rdma_ch * ch,struct srp_cred_req * req,u32 byte_len)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
srp_process_aer_req(struct srp_rdma_ch * ch,struct srp_aer_req * req,u32 byte_len)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
srp_recv_done(struct ib_cq * cq,struct ib_wc * wc)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 */
srp_tl_err_work(struct work_struct * work)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
srp_handle_qp_err(struct ib_cq * cq,struct ib_wc * wc,const char * opname)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
srp_queuecommand(struct Scsi_Host * shost,struct scsi_cmnd * scmnd)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 */
srp_alloc_iu_bufs(struct srp_rdma_ch * ch)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
srp_compute_rq_tmo(struct ib_qp_attr * qp_attr,int attr_mask)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
srp_cm_rep_handler(struct ib_cm_id * cm_id,const struct srp_login_rsp * lrsp,struct srp_rdma_ch * ch)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
srp_ib_cm_rej_handler(struct ib_cm_id * cm_id,const struct ib_cm_event * event,struct srp_rdma_ch * ch)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
srp_ib_cm_handler(struct ib_cm_id * cm_id,const struct ib_cm_event * event)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
srp_rdma_cm_rej_handler(struct srp_rdma_ch * ch,struct rdma_cm_event * event)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
srp_rdma_cm_handler(struct rdma_cm_id * cm_id,struct rdma_cm_event * event)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
srp_change_queue_depth(struct scsi_device * sdev,int qdepth)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
srp_send_tsk_mgmt(struct srp_rdma_ch * ch,u64 req_tag,u64 lun,u8 func,u8 * status)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
srp_abort(struct scsi_cmnd * scmnd)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
srp_reset_device(struct scsi_cmnd * scmnd)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
srp_reset_host(struct scsi_cmnd * scmnd)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
srp_target_alloc(struct scsi_target * starget)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
srp_sdev_configure(struct scsi_device * sdev,struct queue_limits * lim)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
id_ext_show(struct device * dev,struct device_attribute * attr,char * buf)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
ioc_guid_show(struct device * dev,struct device_attribute * attr,char * buf)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
service_id_show(struct device * dev,struct device_attribute * attr,char * buf)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
pkey_show(struct device * dev,struct device_attribute * attr,char * buf)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
sgid_show(struct device * dev,struct device_attribute * attr,char * buf)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
dgid_show(struct device * dev,struct device_attribute * attr,char * buf)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
orig_dgid_show(struct device * dev,struct device_attribute * attr,char * buf)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
req_lim_show(struct device * dev,struct device_attribute * attr,char * buf)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
zero_req_lim_show(struct device * dev,struct device_attribute * attr,char * buf)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
local_ib_port_show(struct device * dev,struct device_attribute * attr,char * buf)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
local_ib_device_show(struct device * dev,struct device_attribute * attr,char * buf)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
ch_count_show(struct device * dev,struct device_attribute * attr,char * buf)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
comp_vector_show(struct device * dev,struct device_attribute * attr,char * buf)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
tl_retry_count_show(struct device * dev,struct device_attribute * attr,char * buf)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
cmd_sg_entries_show(struct device * dev,struct device_attribute * attr,char * buf)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
allow_ext_sg_show(struct device * dev,struct device_attribute * attr,char * buf)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
srp_sdev_count(struct Scsi_Host * host)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 */
srp_add_target(struct srp_host * host,struct srp_target_port * target)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
srp_release_dev(struct device * dev)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 */
srp_net_namespace(const struct device * dev)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 */
srp_conn_unique(struct srp_host * host,struct srp_target_port * target)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 */
srp_parse_in(struct net * net,struct sockaddr_storage * sa,const char * addr_port_str,bool * has_port)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
srp_parse_options(struct net * net,const char * buf,struct srp_target_port * target)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 (!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
add_target_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)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
ibdev_show(struct device * dev,struct device_attribute * attr,char * buf)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
port_show(struct device * dev,struct device_attribute * attr,char * buf)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
srp_add_port(struct srp_device * device,u32 port)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
srp_rename_dev(struct ib_device * device,void * client_data)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
srp_add_one(struct ib_device * device)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
srp_remove_one(struct ib_device * device,void * client_data)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
srp_init_module(void)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
srp_cleanup_module(void)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