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/init.h>
37 #include <linux/slab.h>
38 #include <linux/err.h>
39 #include <linux/string.h>
40 #include <linux/parser.h>
41 #include <linux/random.h>
42 #include <linux/jiffies.h>
43 #include <rdma/ib_cache.h>
44 
45 #include <linux/atomic.h>
46 
47 #include <scsi/scsi.h>
48 #include <scsi/scsi_device.h>
49 #include <scsi/scsi_dbg.h>
50 #include <scsi/scsi_tcq.h>
51 #include <scsi/srp.h>
52 #include <scsi/scsi_transport_srp.h>
53 
54 #include "ib_srp.h"
55 
56 #define DRV_NAME	"ib_srp"
57 #define PFX		DRV_NAME ": "
58 #define DRV_VERSION	"2.0"
59 #define DRV_RELDATE	"July 26, 2015"
60 
61 MODULE_AUTHOR("Roland Dreier");
62 MODULE_DESCRIPTION("InfiniBand SCSI RDMA Protocol initiator");
63 MODULE_LICENSE("Dual BSD/GPL");
64 MODULE_VERSION(DRV_VERSION);
65 MODULE_INFO(release_date, DRV_RELDATE);
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 prefer_fr = true;
72 static bool register_always = true;
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(SCSI_MAX_SG_CHAIN_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(prefer_fr, bool, 0444);
95 MODULE_PARM_DESC(prefer_fr,
96 "Whether to use fast registration if both FMR and fast registration are supported");
97 
98 module_param(register_always, bool, 0444);
99 MODULE_PARM_DESC(register_always,
100 		 "Use memory registration even for contiguous memory regions");
101 
102 static const struct kernel_param_ops srp_tmo_ops;
103 
104 static int srp_reconnect_delay = 10;
105 module_param_cb(reconnect_delay, &srp_tmo_ops, &srp_reconnect_delay,
106 		S_IRUGO | S_IWUSR);
107 MODULE_PARM_DESC(reconnect_delay, "Time between successive reconnect attempts");
108 
109 static int srp_fast_io_fail_tmo = 15;
110 module_param_cb(fast_io_fail_tmo, &srp_tmo_ops, &srp_fast_io_fail_tmo,
111 		S_IRUGO | S_IWUSR);
112 MODULE_PARM_DESC(fast_io_fail_tmo,
113 		 "Number of seconds between the observation of a transport"
114 		 " layer error and failing all I/O. \"off\" means that this"
115 		 " functionality is disabled.");
116 
117 static int srp_dev_loss_tmo = 600;
118 module_param_cb(dev_loss_tmo, &srp_tmo_ops, &srp_dev_loss_tmo,
119 		S_IRUGO | S_IWUSR);
120 MODULE_PARM_DESC(dev_loss_tmo,
121 		 "Maximum number of seconds that the SRP transport should"
122 		 " insulate transport layer errors. After this time has been"
123 		 " exceeded the SCSI host is removed. Should be"
124 		 " between 1 and " __stringify(SCSI_DEVICE_BLOCK_MAX_TIMEOUT)
125 		 " if fast_io_fail_tmo has not been set. \"off\" means that"
126 		 " this functionality is disabled.");
127 
128 static unsigned ch_count;
129 module_param(ch_count, uint, 0444);
130 MODULE_PARM_DESC(ch_count,
131 		 "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.");
132 
133 static void srp_add_one(struct ib_device *device);
134 static void srp_remove_one(struct ib_device *device, void *client_data);
135 static void srp_recv_done(struct ib_cq *cq, struct ib_wc *wc);
136 static void srp_handle_qp_err(struct ib_cq *cq, struct ib_wc *wc,
137 		const char *opname);
138 static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event);
139 
140 static struct scsi_transport_template *ib_srp_transport_template;
141 static struct workqueue_struct *srp_remove_wq;
142 
143 static struct ib_client srp_client = {
144 	.name   = "srp",
145 	.add    = srp_add_one,
146 	.remove = srp_remove_one
147 };
148 
149 static struct ib_sa_client srp_sa_client;
150 
151 static int srp_tmo_get(char *buffer, const struct kernel_param *kp)
152 {
153 	int tmo = *(int *)kp->arg;
154 
155 	if (tmo >= 0)
156 		return sprintf(buffer, "%d", tmo);
157 	else
158 		return sprintf(buffer, "off");
159 }
160 
161 static int srp_tmo_set(const char *val, const struct kernel_param *kp)
162 {
163 	int tmo, res;
164 
165 	res = srp_parse_tmo(&tmo, val);
166 	if (res)
167 		goto out;
168 
169 	if (kp->arg == &srp_reconnect_delay)
170 		res = srp_tmo_valid(tmo, srp_fast_io_fail_tmo,
171 				    srp_dev_loss_tmo);
172 	else if (kp->arg == &srp_fast_io_fail_tmo)
173 		res = srp_tmo_valid(srp_reconnect_delay, tmo, srp_dev_loss_tmo);
174 	else
175 		res = srp_tmo_valid(srp_reconnect_delay, srp_fast_io_fail_tmo,
176 				    tmo);
177 	if (res)
178 		goto out;
179 	*(int *)kp->arg = tmo;
180 
181 out:
182 	return res;
183 }
184 
185 static const struct kernel_param_ops srp_tmo_ops = {
186 	.get = srp_tmo_get,
187 	.set = srp_tmo_set,
188 };
189 
190 static inline struct srp_target_port *host_to_target(struct Scsi_Host *host)
191 {
192 	return (struct srp_target_port *) host->hostdata;
193 }
194 
195 static const char *srp_target_info(struct Scsi_Host *host)
196 {
197 	return host_to_target(host)->target_name;
198 }
199 
200 static int srp_target_is_topspin(struct srp_target_port *target)
201 {
202 	static const u8 topspin_oui[3] = { 0x00, 0x05, 0xad };
203 	static const u8 cisco_oui[3]   = { 0x00, 0x1b, 0x0d };
204 
205 	return topspin_workarounds &&
206 		(!memcmp(&target->ioc_guid, topspin_oui, sizeof topspin_oui) ||
207 		 !memcmp(&target->ioc_guid, cisco_oui, sizeof cisco_oui));
208 }
209 
210 static struct srp_iu *srp_alloc_iu(struct srp_host *host, size_t size,
211 				   gfp_t gfp_mask,
212 				   enum dma_data_direction direction)
213 {
214 	struct srp_iu *iu;
215 
216 	iu = kmalloc(sizeof *iu, gfp_mask);
217 	if (!iu)
218 		goto out;
219 
220 	iu->buf = kzalloc(size, gfp_mask);
221 	if (!iu->buf)
222 		goto out_free_iu;
223 
224 	iu->dma = ib_dma_map_single(host->srp_dev->dev, iu->buf, size,
225 				    direction);
226 	if (ib_dma_mapping_error(host->srp_dev->dev, iu->dma))
227 		goto out_free_buf;
228 
229 	iu->size      = size;
230 	iu->direction = direction;
231 
232 	return iu;
233 
234 out_free_buf:
235 	kfree(iu->buf);
236 out_free_iu:
237 	kfree(iu);
238 out:
239 	return NULL;
240 }
241 
242 static void srp_free_iu(struct srp_host *host, struct srp_iu *iu)
243 {
244 	if (!iu)
245 		return;
246 
247 	ib_dma_unmap_single(host->srp_dev->dev, iu->dma, iu->size,
248 			    iu->direction);
249 	kfree(iu->buf);
250 	kfree(iu);
251 }
252 
253 static void srp_qp_event(struct ib_event *event, void *context)
254 {
255 	pr_debug("QP event %s (%d)\n",
256 		 ib_event_msg(event->event), event->event);
257 }
258 
259 static int srp_init_qp(struct srp_target_port *target,
260 		       struct ib_qp *qp)
261 {
262 	struct ib_qp_attr *attr;
263 	int ret;
264 
265 	attr = kmalloc(sizeof *attr, GFP_KERNEL);
266 	if (!attr)
267 		return -ENOMEM;
268 
269 	ret = ib_find_cached_pkey(target->srp_host->srp_dev->dev,
270 				  target->srp_host->port,
271 				  be16_to_cpu(target->pkey),
272 				  &attr->pkey_index);
273 	if (ret)
274 		goto out;
275 
276 	attr->qp_state        = IB_QPS_INIT;
277 	attr->qp_access_flags = (IB_ACCESS_REMOTE_READ |
278 				    IB_ACCESS_REMOTE_WRITE);
279 	attr->port_num        = target->srp_host->port;
280 
281 	ret = ib_modify_qp(qp, attr,
282 			   IB_QP_STATE		|
283 			   IB_QP_PKEY_INDEX	|
284 			   IB_QP_ACCESS_FLAGS	|
285 			   IB_QP_PORT);
286 
287 out:
288 	kfree(attr);
289 	return ret;
290 }
291 
292 static int srp_new_cm_id(struct srp_rdma_ch *ch)
293 {
294 	struct srp_target_port *target = ch->target;
295 	struct ib_cm_id *new_cm_id;
296 
297 	new_cm_id = ib_create_cm_id(target->srp_host->srp_dev->dev,
298 				    srp_cm_handler, ch);
299 	if (IS_ERR(new_cm_id))
300 		return PTR_ERR(new_cm_id);
301 
302 	if (ch->cm_id)
303 		ib_destroy_cm_id(ch->cm_id);
304 	ch->cm_id = new_cm_id;
305 	ch->path.sgid = target->sgid;
306 	ch->path.dgid = target->orig_dgid;
307 	ch->path.pkey = target->pkey;
308 	ch->path.service_id = target->service_id;
309 
310 	return 0;
311 }
312 
313 static struct ib_fmr_pool *srp_alloc_fmr_pool(struct srp_target_port *target)
314 {
315 	struct srp_device *dev = target->srp_host->srp_dev;
316 	struct ib_fmr_pool_param fmr_param;
317 
318 	memset(&fmr_param, 0, sizeof(fmr_param));
319 	fmr_param.pool_size	    = target->scsi_host->can_queue;
320 	fmr_param.dirty_watermark   = fmr_param.pool_size / 4;
321 	fmr_param.cache		    = 1;
322 	fmr_param.max_pages_per_fmr = dev->max_pages_per_mr;
323 	fmr_param.page_shift	    = ilog2(dev->mr_page_size);
324 	fmr_param.access	    = (IB_ACCESS_LOCAL_WRITE |
325 				       IB_ACCESS_REMOTE_WRITE |
326 				       IB_ACCESS_REMOTE_READ);
327 
328 	return ib_create_fmr_pool(dev->pd, &fmr_param);
329 }
330 
331 /**
332  * srp_destroy_fr_pool() - free the resources owned by a pool
333  * @pool: Fast registration pool to be destroyed.
334  */
335 static void srp_destroy_fr_pool(struct srp_fr_pool *pool)
336 {
337 	int i;
338 	struct srp_fr_desc *d;
339 
340 	if (!pool)
341 		return;
342 
343 	for (i = 0, d = &pool->desc[0]; i < pool->size; i++, d++) {
344 		if (d->mr)
345 			ib_dereg_mr(d->mr);
346 	}
347 	kfree(pool);
348 }
349 
350 /**
351  * srp_create_fr_pool() - allocate and initialize a pool for fast registration
352  * @device:            IB device to allocate fast registration descriptors for.
353  * @pd:                Protection domain associated with the FR descriptors.
354  * @pool_size:         Number of descriptors to allocate.
355  * @max_page_list_len: Maximum fast registration work request page list length.
356  */
357 static struct srp_fr_pool *srp_create_fr_pool(struct ib_device *device,
358 					      struct ib_pd *pd, int pool_size,
359 					      int max_page_list_len)
360 {
361 	struct srp_fr_pool *pool;
362 	struct srp_fr_desc *d;
363 	struct ib_mr *mr;
364 	int i, ret = -EINVAL;
365 
366 	if (pool_size <= 0)
367 		goto err;
368 	ret = -ENOMEM;
369 	pool = kzalloc(sizeof(struct srp_fr_pool) +
370 		       pool_size * sizeof(struct srp_fr_desc), GFP_KERNEL);
371 	if (!pool)
372 		goto err;
373 	pool->size = pool_size;
374 	pool->max_page_list_len = max_page_list_len;
375 	spin_lock_init(&pool->lock);
376 	INIT_LIST_HEAD(&pool->free_list);
377 
378 	for (i = 0, d = &pool->desc[0]; i < pool->size; i++, d++) {
379 		mr = ib_alloc_mr(pd, IB_MR_TYPE_MEM_REG,
380 				 max_page_list_len);
381 		if (IS_ERR(mr)) {
382 			ret = PTR_ERR(mr);
383 			goto destroy_pool;
384 		}
385 		d->mr = mr;
386 		list_add_tail(&d->entry, &pool->free_list);
387 	}
388 
389 out:
390 	return pool;
391 
392 destroy_pool:
393 	srp_destroy_fr_pool(pool);
394 
395 err:
396 	pool = ERR_PTR(ret);
397 	goto out;
398 }
399 
400 /**
401  * srp_fr_pool_get() - obtain a descriptor suitable for fast registration
402  * @pool: Pool to obtain descriptor from.
403  */
404 static struct srp_fr_desc *srp_fr_pool_get(struct srp_fr_pool *pool)
405 {
406 	struct srp_fr_desc *d = NULL;
407 	unsigned long flags;
408 
409 	spin_lock_irqsave(&pool->lock, flags);
410 	if (!list_empty(&pool->free_list)) {
411 		d = list_first_entry(&pool->free_list, typeof(*d), entry);
412 		list_del(&d->entry);
413 	}
414 	spin_unlock_irqrestore(&pool->lock, flags);
415 
416 	return d;
417 }
418 
419 /**
420  * srp_fr_pool_put() - put an FR descriptor back in the free list
421  * @pool: Pool the descriptor was allocated from.
422  * @desc: Pointer to an array of fast registration descriptor pointers.
423  * @n:    Number of descriptors to put back.
424  *
425  * Note: The caller must already have queued an invalidation request for
426  * desc->mr->rkey before calling this function.
427  */
428 static void srp_fr_pool_put(struct srp_fr_pool *pool, struct srp_fr_desc **desc,
429 			    int n)
430 {
431 	unsigned long flags;
432 	int i;
433 
434 	spin_lock_irqsave(&pool->lock, flags);
435 	for (i = 0; i < n; i++)
436 		list_add(&desc[i]->entry, &pool->free_list);
437 	spin_unlock_irqrestore(&pool->lock, flags);
438 }
439 
440 static struct srp_fr_pool *srp_alloc_fr_pool(struct srp_target_port *target)
441 {
442 	struct srp_device *dev = target->srp_host->srp_dev;
443 
444 	return srp_create_fr_pool(dev->dev, dev->pd,
445 				  target->scsi_host->can_queue,
446 				  dev->max_pages_per_mr);
447 }
448 
449 static void srp_drain_done(struct ib_cq *cq, struct ib_wc *wc)
450 {
451 	struct srp_rdma_ch *ch = cq->cq_context;
452 
453 	complete(&ch->done);
454 }
455 
456 static struct ib_cqe srp_drain_cqe = {
457 	.done		= srp_drain_done,
458 };
459 
460 /**
461  * srp_destroy_qp() - destroy an RDMA queue pair
462  * @ch: SRP RDMA channel.
463  *
464  * Change a queue pair into the error state and wait until all receive
465  * completions have been processed before destroying it. This avoids that
466  * the receive completion handler can access the queue pair while it is
467  * being destroyed.
468  */
469 static void srp_destroy_qp(struct srp_rdma_ch *ch)
470 {
471 	static struct ib_qp_attr attr = { .qp_state = IB_QPS_ERR };
472 	static struct ib_recv_wr wr = { 0 };
473 	struct ib_recv_wr *bad_wr;
474 	int ret;
475 
476 	wr.wr_cqe = &srp_drain_cqe;
477 	/* Destroying a QP and reusing ch->done is only safe if not connected */
478 	WARN_ON_ONCE(ch->connected);
479 
480 	ret = ib_modify_qp(ch->qp, &attr, IB_QP_STATE);
481 	WARN_ONCE(ret, "ib_cm_init_qp_attr() returned %d\n", ret);
482 	if (ret)
483 		goto out;
484 
485 	init_completion(&ch->done);
486 	ret = ib_post_recv(ch->qp, &wr, &bad_wr);
487 	WARN_ONCE(ret, "ib_post_recv() returned %d\n", ret);
488 	if (ret == 0)
489 		wait_for_completion(&ch->done);
490 
491 out:
492 	ib_destroy_qp(ch->qp);
493 }
494 
495 static int srp_create_ch_ib(struct srp_rdma_ch *ch)
496 {
497 	struct srp_target_port *target = ch->target;
498 	struct srp_device *dev = target->srp_host->srp_dev;
499 	struct ib_qp_init_attr *init_attr;
500 	struct ib_cq *recv_cq, *send_cq;
501 	struct ib_qp *qp;
502 	struct ib_fmr_pool *fmr_pool = NULL;
503 	struct srp_fr_pool *fr_pool = NULL;
504 	const int m = dev->use_fast_reg ? 3 : 1;
505 	int ret;
506 
507 	init_attr = kzalloc(sizeof *init_attr, GFP_KERNEL);
508 	if (!init_attr)
509 		return -ENOMEM;
510 
511 	/* queue_size + 1 for ib_drain_qp */
512 	recv_cq = ib_alloc_cq(dev->dev, ch, target->queue_size + 1,
513 				ch->comp_vector, IB_POLL_SOFTIRQ);
514 	if (IS_ERR(recv_cq)) {
515 		ret = PTR_ERR(recv_cq);
516 		goto err;
517 	}
518 
519 	send_cq = ib_alloc_cq(dev->dev, ch, m * target->queue_size,
520 				ch->comp_vector, IB_POLL_DIRECT);
521 	if (IS_ERR(send_cq)) {
522 		ret = PTR_ERR(send_cq);
523 		goto err_recv_cq;
524 	}
525 
526 	init_attr->event_handler       = srp_qp_event;
527 	init_attr->cap.max_send_wr     = m * target->queue_size;
528 	init_attr->cap.max_recv_wr     = target->queue_size + 1;
529 	init_attr->cap.max_recv_sge    = 1;
530 	init_attr->cap.max_send_sge    = 1;
531 	init_attr->sq_sig_type         = IB_SIGNAL_REQ_WR;
532 	init_attr->qp_type             = IB_QPT_RC;
533 	init_attr->send_cq             = send_cq;
534 	init_attr->recv_cq             = recv_cq;
535 
536 	qp = ib_create_qp(dev->pd, init_attr);
537 	if (IS_ERR(qp)) {
538 		ret = PTR_ERR(qp);
539 		goto err_send_cq;
540 	}
541 
542 	ret = srp_init_qp(target, qp);
543 	if (ret)
544 		goto err_qp;
545 
546 	if (dev->use_fast_reg) {
547 		fr_pool = srp_alloc_fr_pool(target);
548 		if (IS_ERR(fr_pool)) {
549 			ret = PTR_ERR(fr_pool);
550 			shost_printk(KERN_WARNING, target->scsi_host, PFX
551 				     "FR pool allocation failed (%d)\n", ret);
552 			goto err_qp;
553 		}
554 	} else if (dev->use_fmr) {
555 		fmr_pool = srp_alloc_fmr_pool(target);
556 		if (IS_ERR(fmr_pool)) {
557 			ret = PTR_ERR(fmr_pool);
558 			shost_printk(KERN_WARNING, target->scsi_host, PFX
559 				     "FMR pool allocation failed (%d)\n", ret);
560 			goto err_qp;
561 		}
562 	}
563 
564 	if (ch->qp)
565 		srp_destroy_qp(ch);
566 	if (ch->recv_cq)
567 		ib_free_cq(ch->recv_cq);
568 	if (ch->send_cq)
569 		ib_free_cq(ch->send_cq);
570 
571 	ch->qp = qp;
572 	ch->recv_cq = recv_cq;
573 	ch->send_cq = send_cq;
574 
575 	if (dev->use_fast_reg) {
576 		if (ch->fr_pool)
577 			srp_destroy_fr_pool(ch->fr_pool);
578 		ch->fr_pool = fr_pool;
579 	} else if (dev->use_fmr) {
580 		if (ch->fmr_pool)
581 			ib_destroy_fmr_pool(ch->fmr_pool);
582 		ch->fmr_pool = fmr_pool;
583 	}
584 
585 	kfree(init_attr);
586 	return 0;
587 
588 err_qp:
589 	srp_destroy_qp(ch);
590 
591 err_send_cq:
592 	ib_free_cq(send_cq);
593 
594 err_recv_cq:
595 	ib_free_cq(recv_cq);
596 
597 err:
598 	kfree(init_attr);
599 	return ret;
600 }
601 
602 /*
603  * Note: this function may be called without srp_alloc_iu_bufs() having been
604  * invoked. Hence the ch->[rt]x_ring checks.
605  */
606 static void srp_free_ch_ib(struct srp_target_port *target,
607 			   struct srp_rdma_ch *ch)
608 {
609 	struct srp_device *dev = target->srp_host->srp_dev;
610 	int i;
611 
612 	if (!ch->target)
613 		return;
614 
615 	if (ch->cm_id) {
616 		ib_destroy_cm_id(ch->cm_id);
617 		ch->cm_id = NULL;
618 	}
619 
620 	/* If srp_new_cm_id() succeeded but srp_create_ch_ib() not, return. */
621 	if (!ch->qp)
622 		return;
623 
624 	if (dev->use_fast_reg) {
625 		if (ch->fr_pool)
626 			srp_destroy_fr_pool(ch->fr_pool);
627 	} else if (dev->use_fmr) {
628 		if (ch->fmr_pool)
629 			ib_destroy_fmr_pool(ch->fmr_pool);
630 	}
631 
632 	srp_destroy_qp(ch);
633 	ib_free_cq(ch->send_cq);
634 	ib_free_cq(ch->recv_cq);
635 
636 	/*
637 	 * Avoid that the SCSI error handler tries to use this channel after
638 	 * it has been freed. The SCSI error handler can namely continue
639 	 * trying to perform recovery actions after scsi_remove_host()
640 	 * returned.
641 	 */
642 	ch->target = NULL;
643 
644 	ch->qp = NULL;
645 	ch->send_cq = ch->recv_cq = NULL;
646 
647 	if (ch->rx_ring) {
648 		for (i = 0; i < target->queue_size; ++i)
649 			srp_free_iu(target->srp_host, ch->rx_ring[i]);
650 		kfree(ch->rx_ring);
651 		ch->rx_ring = NULL;
652 	}
653 	if (ch->tx_ring) {
654 		for (i = 0; i < target->queue_size; ++i)
655 			srp_free_iu(target->srp_host, ch->tx_ring[i]);
656 		kfree(ch->tx_ring);
657 		ch->tx_ring = NULL;
658 	}
659 }
660 
661 static void srp_path_rec_completion(int status,
662 				    struct ib_sa_path_rec *pathrec,
663 				    void *ch_ptr)
664 {
665 	struct srp_rdma_ch *ch = ch_ptr;
666 	struct srp_target_port *target = ch->target;
667 
668 	ch->status = status;
669 	if (status)
670 		shost_printk(KERN_ERR, target->scsi_host,
671 			     PFX "Got failed path rec status %d\n", status);
672 	else
673 		ch->path = *pathrec;
674 	complete(&ch->done);
675 }
676 
677 static int srp_lookup_path(struct srp_rdma_ch *ch)
678 {
679 	struct srp_target_port *target = ch->target;
680 	int ret;
681 
682 	ch->path.numb_path = 1;
683 
684 	init_completion(&ch->done);
685 
686 	ch->path_query_id = ib_sa_path_rec_get(&srp_sa_client,
687 					       target->srp_host->srp_dev->dev,
688 					       target->srp_host->port,
689 					       &ch->path,
690 					       IB_SA_PATH_REC_SERVICE_ID |
691 					       IB_SA_PATH_REC_DGID	 |
692 					       IB_SA_PATH_REC_SGID	 |
693 					       IB_SA_PATH_REC_NUMB_PATH	 |
694 					       IB_SA_PATH_REC_PKEY,
695 					       SRP_PATH_REC_TIMEOUT_MS,
696 					       GFP_KERNEL,
697 					       srp_path_rec_completion,
698 					       ch, &ch->path_query);
699 	if (ch->path_query_id < 0)
700 		return ch->path_query_id;
701 
702 	ret = wait_for_completion_interruptible(&ch->done);
703 	if (ret < 0)
704 		return ret;
705 
706 	if (ch->status < 0)
707 		shost_printk(KERN_WARNING, target->scsi_host,
708 			     PFX "Path record query failed\n");
709 
710 	return ch->status;
711 }
712 
713 static int srp_send_req(struct srp_rdma_ch *ch, bool multich)
714 {
715 	struct srp_target_port *target = ch->target;
716 	struct {
717 		struct ib_cm_req_param param;
718 		struct srp_login_req   priv;
719 	} *req = NULL;
720 	int status;
721 
722 	req = kzalloc(sizeof *req, GFP_KERNEL);
723 	if (!req)
724 		return -ENOMEM;
725 
726 	req->param.primary_path		      = &ch->path;
727 	req->param.alternate_path 	      = NULL;
728 	req->param.service_id 		      = target->service_id;
729 	req->param.qp_num		      = ch->qp->qp_num;
730 	req->param.qp_type		      = ch->qp->qp_type;
731 	req->param.private_data 	      = &req->priv;
732 	req->param.private_data_len 	      = sizeof req->priv;
733 	req->param.flow_control 	      = 1;
734 
735 	get_random_bytes(&req->param.starting_psn, 4);
736 	req->param.starting_psn 	     &= 0xffffff;
737 
738 	/*
739 	 * Pick some arbitrary defaults here; we could make these
740 	 * module parameters if anyone cared about setting them.
741 	 */
742 	req->param.responder_resources	      = 4;
743 	req->param.remote_cm_response_timeout = 20;
744 	req->param.local_cm_response_timeout  = 20;
745 	req->param.retry_count                = target->tl_retry_count;
746 	req->param.rnr_retry_count 	      = 7;
747 	req->param.max_cm_retries 	      = 15;
748 
749 	req->priv.opcode     	= SRP_LOGIN_REQ;
750 	req->priv.tag        	= 0;
751 	req->priv.req_it_iu_len = cpu_to_be32(target->max_iu_len);
752 	req->priv.req_buf_fmt 	= cpu_to_be16(SRP_BUF_FORMAT_DIRECT |
753 					      SRP_BUF_FORMAT_INDIRECT);
754 	req->priv.req_flags	= (multich ? SRP_MULTICHAN_MULTI :
755 				   SRP_MULTICHAN_SINGLE);
756 	/*
757 	 * In the published SRP specification (draft rev. 16a), the
758 	 * port identifier format is 8 bytes of ID extension followed
759 	 * by 8 bytes of GUID.  Older drafts put the two halves in the
760 	 * opposite order, so that the GUID comes first.
761 	 *
762 	 * Targets conforming to these obsolete drafts can be
763 	 * recognized by the I/O Class they report.
764 	 */
765 	if (target->io_class == SRP_REV10_IB_IO_CLASS) {
766 		memcpy(req->priv.initiator_port_id,
767 		       &target->sgid.global.interface_id, 8);
768 		memcpy(req->priv.initiator_port_id + 8,
769 		       &target->initiator_ext, 8);
770 		memcpy(req->priv.target_port_id,     &target->ioc_guid, 8);
771 		memcpy(req->priv.target_port_id + 8, &target->id_ext, 8);
772 	} else {
773 		memcpy(req->priv.initiator_port_id,
774 		       &target->initiator_ext, 8);
775 		memcpy(req->priv.initiator_port_id + 8,
776 		       &target->sgid.global.interface_id, 8);
777 		memcpy(req->priv.target_port_id,     &target->id_ext, 8);
778 		memcpy(req->priv.target_port_id + 8, &target->ioc_guid, 8);
779 	}
780 
781 	/*
782 	 * Topspin/Cisco SRP targets will reject our login unless we
783 	 * zero out the first 8 bytes of our initiator port ID and set
784 	 * the second 8 bytes to the local node GUID.
785 	 */
786 	if (srp_target_is_topspin(target)) {
787 		shost_printk(KERN_DEBUG, target->scsi_host,
788 			     PFX "Topspin/Cisco initiator port ID workaround "
789 			     "activated for target GUID %016llx\n",
790 			     be64_to_cpu(target->ioc_guid));
791 		memset(req->priv.initiator_port_id, 0, 8);
792 		memcpy(req->priv.initiator_port_id + 8,
793 		       &target->srp_host->srp_dev->dev->node_guid, 8);
794 	}
795 
796 	status = ib_send_cm_req(ch->cm_id, &req->param);
797 
798 	kfree(req);
799 
800 	return status;
801 }
802 
803 static bool srp_queue_remove_work(struct srp_target_port *target)
804 {
805 	bool changed = false;
806 
807 	spin_lock_irq(&target->lock);
808 	if (target->state != SRP_TARGET_REMOVED) {
809 		target->state = SRP_TARGET_REMOVED;
810 		changed = true;
811 	}
812 	spin_unlock_irq(&target->lock);
813 
814 	if (changed)
815 		queue_work(srp_remove_wq, &target->remove_work);
816 
817 	return changed;
818 }
819 
820 static void srp_disconnect_target(struct srp_target_port *target)
821 {
822 	struct srp_rdma_ch *ch;
823 	int i;
824 
825 	/* XXX should send SRP_I_LOGOUT request */
826 
827 	for (i = 0; i < target->ch_count; i++) {
828 		ch = &target->ch[i];
829 		ch->connected = false;
830 		if (ch->cm_id && ib_send_cm_dreq(ch->cm_id, NULL, 0)) {
831 			shost_printk(KERN_DEBUG, target->scsi_host,
832 				     PFX "Sending CM DREQ failed\n");
833 		}
834 	}
835 }
836 
837 static void srp_free_req_data(struct srp_target_port *target,
838 			      struct srp_rdma_ch *ch)
839 {
840 	struct srp_device *dev = target->srp_host->srp_dev;
841 	struct ib_device *ibdev = dev->dev;
842 	struct srp_request *req;
843 	int i;
844 
845 	if (!ch->req_ring)
846 		return;
847 
848 	for (i = 0; i < target->req_ring_size; ++i) {
849 		req = &ch->req_ring[i];
850 		if (dev->use_fast_reg) {
851 			kfree(req->fr_list);
852 		} else {
853 			kfree(req->fmr_list);
854 			kfree(req->map_page);
855 		}
856 		if (req->indirect_dma_addr) {
857 			ib_dma_unmap_single(ibdev, req->indirect_dma_addr,
858 					    target->indirect_size,
859 					    DMA_TO_DEVICE);
860 		}
861 		kfree(req->indirect_desc);
862 	}
863 
864 	kfree(ch->req_ring);
865 	ch->req_ring = NULL;
866 }
867 
868 static int srp_alloc_req_data(struct srp_rdma_ch *ch)
869 {
870 	struct srp_target_port *target = ch->target;
871 	struct srp_device *srp_dev = target->srp_host->srp_dev;
872 	struct ib_device *ibdev = srp_dev->dev;
873 	struct srp_request *req;
874 	void *mr_list;
875 	dma_addr_t dma_addr;
876 	int i, ret = -ENOMEM;
877 
878 	ch->req_ring = kcalloc(target->req_ring_size, sizeof(*ch->req_ring),
879 			       GFP_KERNEL);
880 	if (!ch->req_ring)
881 		goto out;
882 
883 	for (i = 0; i < target->req_ring_size; ++i) {
884 		req = &ch->req_ring[i];
885 		mr_list = kmalloc(target->cmd_sg_cnt * sizeof(void *),
886 				  GFP_KERNEL);
887 		if (!mr_list)
888 			goto out;
889 		if (srp_dev->use_fast_reg) {
890 			req->fr_list = mr_list;
891 		} else {
892 			req->fmr_list = mr_list;
893 			req->map_page = kmalloc(srp_dev->max_pages_per_mr *
894 						sizeof(void *), GFP_KERNEL);
895 			if (!req->map_page)
896 				goto out;
897 		}
898 		req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL);
899 		if (!req->indirect_desc)
900 			goto out;
901 
902 		dma_addr = ib_dma_map_single(ibdev, req->indirect_desc,
903 					     target->indirect_size,
904 					     DMA_TO_DEVICE);
905 		if (ib_dma_mapping_error(ibdev, dma_addr))
906 			goto out;
907 
908 		req->indirect_dma_addr = dma_addr;
909 	}
910 	ret = 0;
911 
912 out:
913 	return ret;
914 }
915 
916 /**
917  * srp_del_scsi_host_attr() - Remove attributes defined in the host template.
918  * @shost: SCSI host whose attributes to remove from sysfs.
919  *
920  * Note: Any attributes defined in the host template and that did not exist
921  * before invocation of this function will be ignored.
922  */
923 static void srp_del_scsi_host_attr(struct Scsi_Host *shost)
924 {
925 	struct device_attribute **attr;
926 
927 	for (attr = shost->hostt->shost_attrs; attr && *attr; ++attr)
928 		device_remove_file(&shost->shost_dev, *attr);
929 }
930 
931 static void srp_remove_target(struct srp_target_port *target)
932 {
933 	struct srp_rdma_ch *ch;
934 	int i;
935 
936 	WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED);
937 
938 	srp_del_scsi_host_attr(target->scsi_host);
939 	srp_rport_get(target->rport);
940 	srp_remove_host(target->scsi_host);
941 	scsi_remove_host(target->scsi_host);
942 	srp_stop_rport_timers(target->rport);
943 	srp_disconnect_target(target);
944 	for (i = 0; i < target->ch_count; i++) {
945 		ch = &target->ch[i];
946 		srp_free_ch_ib(target, ch);
947 	}
948 	cancel_work_sync(&target->tl_err_work);
949 	srp_rport_put(target->rport);
950 	for (i = 0; i < target->ch_count; i++) {
951 		ch = &target->ch[i];
952 		srp_free_req_data(target, ch);
953 	}
954 	kfree(target->ch);
955 	target->ch = NULL;
956 
957 	spin_lock(&target->srp_host->target_lock);
958 	list_del(&target->list);
959 	spin_unlock(&target->srp_host->target_lock);
960 
961 	scsi_host_put(target->scsi_host);
962 }
963 
964 static void srp_remove_work(struct work_struct *work)
965 {
966 	struct srp_target_port *target =
967 		container_of(work, struct srp_target_port, remove_work);
968 
969 	WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED);
970 
971 	srp_remove_target(target);
972 }
973 
974 static void srp_rport_delete(struct srp_rport *rport)
975 {
976 	struct srp_target_port *target = rport->lld_data;
977 
978 	srp_queue_remove_work(target);
979 }
980 
981 /**
982  * srp_connected_ch() - number of connected channels
983  * @target: SRP target port.
984  */
985 static int srp_connected_ch(struct srp_target_port *target)
986 {
987 	int i, c = 0;
988 
989 	for (i = 0; i < target->ch_count; i++)
990 		c += target->ch[i].connected;
991 
992 	return c;
993 }
994 
995 static int srp_connect_ch(struct srp_rdma_ch *ch, bool multich)
996 {
997 	struct srp_target_port *target = ch->target;
998 	int ret;
999 
1000 	WARN_ON_ONCE(!multich && srp_connected_ch(target) > 0);
1001 
1002 	ret = srp_lookup_path(ch);
1003 	if (ret)
1004 		goto out;
1005 
1006 	while (1) {
1007 		init_completion(&ch->done);
1008 		ret = srp_send_req(ch, multich);
1009 		if (ret)
1010 			goto out;
1011 		ret = wait_for_completion_interruptible(&ch->done);
1012 		if (ret < 0)
1013 			goto out;
1014 
1015 		/*
1016 		 * The CM event handling code will set status to
1017 		 * SRP_PORT_REDIRECT if we get a port redirect REJ
1018 		 * back, or SRP_DLID_REDIRECT if we get a lid/qp
1019 		 * redirect REJ back.
1020 		 */
1021 		ret = ch->status;
1022 		switch (ret) {
1023 		case 0:
1024 			ch->connected = true;
1025 			goto out;
1026 
1027 		case SRP_PORT_REDIRECT:
1028 			ret = srp_lookup_path(ch);
1029 			if (ret)
1030 				goto out;
1031 			break;
1032 
1033 		case SRP_DLID_REDIRECT:
1034 			break;
1035 
1036 		case SRP_STALE_CONN:
1037 			shost_printk(KERN_ERR, target->scsi_host, PFX
1038 				     "giving up on stale connection\n");
1039 			ret = -ECONNRESET;
1040 			goto out;
1041 
1042 		default:
1043 			goto out;
1044 		}
1045 	}
1046 
1047 out:
1048 	return ret <= 0 ? ret : -ENODEV;
1049 }
1050 
1051 static void srp_inv_rkey_err_done(struct ib_cq *cq, struct ib_wc *wc)
1052 {
1053 	srp_handle_qp_err(cq, wc, "INV RKEY");
1054 }
1055 
1056 static int srp_inv_rkey(struct srp_request *req, struct srp_rdma_ch *ch,
1057 		u32 rkey)
1058 {
1059 	struct ib_send_wr *bad_wr;
1060 	struct ib_send_wr wr = {
1061 		.opcode		    = IB_WR_LOCAL_INV,
1062 		.next		    = NULL,
1063 		.num_sge	    = 0,
1064 		.send_flags	    = 0,
1065 		.ex.invalidate_rkey = rkey,
1066 	};
1067 
1068 	wr.wr_cqe = &req->reg_cqe;
1069 	req->reg_cqe.done = srp_inv_rkey_err_done;
1070 	return ib_post_send(ch->qp, &wr, &bad_wr);
1071 }
1072 
1073 static void srp_unmap_data(struct scsi_cmnd *scmnd,
1074 			   struct srp_rdma_ch *ch,
1075 			   struct srp_request *req)
1076 {
1077 	struct srp_target_port *target = ch->target;
1078 	struct srp_device *dev = target->srp_host->srp_dev;
1079 	struct ib_device *ibdev = dev->dev;
1080 	int i, res;
1081 
1082 	if (!scsi_sglist(scmnd) ||
1083 	    (scmnd->sc_data_direction != DMA_TO_DEVICE &&
1084 	     scmnd->sc_data_direction != DMA_FROM_DEVICE))
1085 		return;
1086 
1087 	if (dev->use_fast_reg) {
1088 		struct srp_fr_desc **pfr;
1089 
1090 		for (i = req->nmdesc, pfr = req->fr_list; i > 0; i--, pfr++) {
1091 			res = srp_inv_rkey(req, ch, (*pfr)->mr->rkey);
1092 			if (res < 0) {
1093 				shost_printk(KERN_ERR, target->scsi_host, PFX
1094 				  "Queueing INV WR for rkey %#x failed (%d)\n",
1095 				  (*pfr)->mr->rkey, res);
1096 				queue_work(system_long_wq,
1097 					   &target->tl_err_work);
1098 			}
1099 		}
1100 		if (req->nmdesc)
1101 			srp_fr_pool_put(ch->fr_pool, req->fr_list,
1102 					req->nmdesc);
1103 	} else if (dev->use_fmr) {
1104 		struct ib_pool_fmr **pfmr;
1105 
1106 		for (i = req->nmdesc, pfmr = req->fmr_list; i > 0; i--, pfmr++)
1107 			ib_fmr_pool_unmap(*pfmr);
1108 	}
1109 
1110 	ib_dma_unmap_sg(ibdev, scsi_sglist(scmnd), scsi_sg_count(scmnd),
1111 			scmnd->sc_data_direction);
1112 }
1113 
1114 /**
1115  * srp_claim_req - Take ownership of the scmnd associated with a request.
1116  * @ch: SRP RDMA channel.
1117  * @req: SRP request.
1118  * @sdev: If not NULL, only take ownership for this SCSI device.
1119  * @scmnd: If NULL, take ownership of @req->scmnd. If not NULL, only take
1120  *         ownership of @req->scmnd if it equals @scmnd.
1121  *
1122  * Return value:
1123  * Either NULL or a pointer to the SCSI command the caller became owner of.
1124  */
1125 static struct scsi_cmnd *srp_claim_req(struct srp_rdma_ch *ch,
1126 				       struct srp_request *req,
1127 				       struct scsi_device *sdev,
1128 				       struct scsi_cmnd *scmnd)
1129 {
1130 	unsigned long flags;
1131 
1132 	spin_lock_irqsave(&ch->lock, flags);
1133 	if (req->scmnd &&
1134 	    (!sdev || req->scmnd->device == sdev) &&
1135 	    (!scmnd || req->scmnd == scmnd)) {
1136 		scmnd = req->scmnd;
1137 		req->scmnd = NULL;
1138 	} else {
1139 		scmnd = NULL;
1140 	}
1141 	spin_unlock_irqrestore(&ch->lock, flags);
1142 
1143 	return scmnd;
1144 }
1145 
1146 /**
1147  * srp_free_req() - Unmap data and add request to the free request list.
1148  * @ch:     SRP RDMA channel.
1149  * @req:    Request to be freed.
1150  * @scmnd:  SCSI command associated with @req.
1151  * @req_lim_delta: Amount to be added to @target->req_lim.
1152  */
1153 static void srp_free_req(struct srp_rdma_ch *ch, struct srp_request *req,
1154 			 struct scsi_cmnd *scmnd, s32 req_lim_delta)
1155 {
1156 	unsigned long flags;
1157 
1158 	srp_unmap_data(scmnd, ch, req);
1159 
1160 	spin_lock_irqsave(&ch->lock, flags);
1161 	ch->req_lim += req_lim_delta;
1162 	spin_unlock_irqrestore(&ch->lock, flags);
1163 }
1164 
1165 static void srp_finish_req(struct srp_rdma_ch *ch, struct srp_request *req,
1166 			   struct scsi_device *sdev, int result)
1167 {
1168 	struct scsi_cmnd *scmnd = srp_claim_req(ch, req, sdev, NULL);
1169 
1170 	if (scmnd) {
1171 		srp_free_req(ch, req, scmnd, 0);
1172 		scmnd->result = result;
1173 		scmnd->scsi_done(scmnd);
1174 	}
1175 }
1176 
1177 static void srp_terminate_io(struct srp_rport *rport)
1178 {
1179 	struct srp_target_port *target = rport->lld_data;
1180 	struct srp_rdma_ch *ch;
1181 	struct Scsi_Host *shost = target->scsi_host;
1182 	struct scsi_device *sdev;
1183 	int i, j;
1184 
1185 	/*
1186 	 * Invoking srp_terminate_io() while srp_queuecommand() is running
1187 	 * is not safe. Hence the warning statement below.
1188 	 */
1189 	shost_for_each_device(sdev, shost)
1190 		WARN_ON_ONCE(sdev->request_queue->request_fn_active);
1191 
1192 	for (i = 0; i < target->ch_count; i++) {
1193 		ch = &target->ch[i];
1194 
1195 		for (j = 0; j < target->req_ring_size; ++j) {
1196 			struct srp_request *req = &ch->req_ring[j];
1197 
1198 			srp_finish_req(ch, req, NULL,
1199 				       DID_TRANSPORT_FAILFAST << 16);
1200 		}
1201 	}
1202 }
1203 
1204 /*
1205  * It is up to the caller to ensure that srp_rport_reconnect() calls are
1206  * serialized and that no concurrent srp_queuecommand(), srp_abort(),
1207  * srp_reset_device() or srp_reset_host() calls will occur while this function
1208  * is in progress. One way to realize that is not to call this function
1209  * directly but to call srp_reconnect_rport() instead since that last function
1210  * serializes calls of this function via rport->mutex and also blocks
1211  * srp_queuecommand() calls before invoking this function.
1212  */
1213 static int srp_rport_reconnect(struct srp_rport *rport)
1214 {
1215 	struct srp_target_port *target = rport->lld_data;
1216 	struct srp_rdma_ch *ch;
1217 	int i, j, ret = 0;
1218 	bool multich = false;
1219 
1220 	srp_disconnect_target(target);
1221 
1222 	if (target->state == SRP_TARGET_SCANNING)
1223 		return -ENODEV;
1224 
1225 	/*
1226 	 * Now get a new local CM ID so that we avoid confusing the target in
1227 	 * case things are really fouled up. Doing so also ensures that all CM
1228 	 * callbacks will have finished before a new QP is allocated.
1229 	 */
1230 	for (i = 0; i < target->ch_count; i++) {
1231 		ch = &target->ch[i];
1232 		ret += srp_new_cm_id(ch);
1233 	}
1234 	for (i = 0; i < target->ch_count; i++) {
1235 		ch = &target->ch[i];
1236 		for (j = 0; j < target->req_ring_size; ++j) {
1237 			struct srp_request *req = &ch->req_ring[j];
1238 
1239 			srp_finish_req(ch, req, NULL, DID_RESET << 16);
1240 		}
1241 	}
1242 	for (i = 0; i < target->ch_count; i++) {
1243 		ch = &target->ch[i];
1244 		/*
1245 		 * Whether or not creating a new CM ID succeeded, create a new
1246 		 * QP. This guarantees that all completion callback function
1247 		 * invocations have finished before request resetting starts.
1248 		 */
1249 		ret += srp_create_ch_ib(ch);
1250 
1251 		INIT_LIST_HEAD(&ch->free_tx);
1252 		for (j = 0; j < target->queue_size; ++j)
1253 			list_add(&ch->tx_ring[j]->list, &ch->free_tx);
1254 	}
1255 
1256 	target->qp_in_error = false;
1257 
1258 	for (i = 0; i < target->ch_count; i++) {
1259 		ch = &target->ch[i];
1260 		if (ret)
1261 			break;
1262 		ret = srp_connect_ch(ch, multich);
1263 		multich = true;
1264 	}
1265 
1266 	if (ret == 0)
1267 		shost_printk(KERN_INFO, target->scsi_host,
1268 			     PFX "reconnect succeeded\n");
1269 
1270 	return ret;
1271 }
1272 
1273 static void srp_map_desc(struct srp_map_state *state, dma_addr_t dma_addr,
1274 			 unsigned int dma_len, u32 rkey)
1275 {
1276 	struct srp_direct_buf *desc = state->desc;
1277 
1278 	WARN_ON_ONCE(!dma_len);
1279 
1280 	desc->va = cpu_to_be64(dma_addr);
1281 	desc->key = cpu_to_be32(rkey);
1282 	desc->len = cpu_to_be32(dma_len);
1283 
1284 	state->total_len += dma_len;
1285 	state->desc++;
1286 	state->ndesc++;
1287 }
1288 
1289 static int srp_map_finish_fmr(struct srp_map_state *state,
1290 			      struct srp_rdma_ch *ch)
1291 {
1292 	struct srp_target_port *target = ch->target;
1293 	struct srp_device *dev = target->srp_host->srp_dev;
1294 	struct ib_pool_fmr *fmr;
1295 	u64 io_addr = 0;
1296 
1297 	if (state->fmr.next >= state->fmr.end)
1298 		return -ENOMEM;
1299 
1300 	WARN_ON_ONCE(!dev->use_fmr);
1301 
1302 	if (state->npages == 0)
1303 		return 0;
1304 
1305 	if (state->npages == 1 && target->global_mr) {
1306 		srp_map_desc(state, state->base_dma_addr, state->dma_len,
1307 			     target->global_mr->rkey);
1308 		goto reset_state;
1309 	}
1310 
1311 	fmr = ib_fmr_pool_map_phys(ch->fmr_pool, state->pages,
1312 				   state->npages, io_addr);
1313 	if (IS_ERR(fmr))
1314 		return PTR_ERR(fmr);
1315 
1316 	*state->fmr.next++ = fmr;
1317 	state->nmdesc++;
1318 
1319 	srp_map_desc(state, state->base_dma_addr & ~dev->mr_page_mask,
1320 		     state->dma_len, fmr->fmr->rkey);
1321 
1322 reset_state:
1323 	state->npages = 0;
1324 	state->dma_len = 0;
1325 
1326 	return 0;
1327 }
1328 
1329 static void srp_reg_mr_err_done(struct ib_cq *cq, struct ib_wc *wc)
1330 {
1331 	srp_handle_qp_err(cq, wc, "FAST REG");
1332 }
1333 
1334 static int srp_map_finish_fr(struct srp_map_state *state,
1335 			     struct srp_request *req,
1336 			     struct srp_rdma_ch *ch, int sg_nents)
1337 {
1338 	struct srp_target_port *target = ch->target;
1339 	struct srp_device *dev = target->srp_host->srp_dev;
1340 	struct ib_send_wr *bad_wr;
1341 	struct ib_reg_wr wr;
1342 	struct srp_fr_desc *desc;
1343 	u32 rkey;
1344 	int n, err;
1345 
1346 	if (state->fr.next >= state->fr.end)
1347 		return -ENOMEM;
1348 
1349 	WARN_ON_ONCE(!dev->use_fast_reg);
1350 
1351 	if (sg_nents == 0)
1352 		return 0;
1353 
1354 	if (sg_nents == 1 && target->global_mr) {
1355 		srp_map_desc(state, sg_dma_address(state->sg),
1356 			     sg_dma_len(state->sg),
1357 			     target->global_mr->rkey);
1358 		return 1;
1359 	}
1360 
1361 	desc = srp_fr_pool_get(ch->fr_pool);
1362 	if (!desc)
1363 		return -ENOMEM;
1364 
1365 	rkey = ib_inc_rkey(desc->mr->rkey);
1366 	ib_update_fast_reg_key(desc->mr, rkey);
1367 
1368 	n = ib_map_mr_sg(desc->mr, state->sg, sg_nents, dev->mr_page_size);
1369 	if (unlikely(n < 0))
1370 		return n;
1371 
1372 	req->reg_cqe.done = srp_reg_mr_err_done;
1373 
1374 	wr.wr.next = NULL;
1375 	wr.wr.opcode = IB_WR_REG_MR;
1376 	wr.wr.wr_cqe = &req->reg_cqe;
1377 	wr.wr.num_sge = 0;
1378 	wr.wr.send_flags = 0;
1379 	wr.mr = desc->mr;
1380 	wr.key = desc->mr->rkey;
1381 	wr.access = (IB_ACCESS_LOCAL_WRITE |
1382 		     IB_ACCESS_REMOTE_READ |
1383 		     IB_ACCESS_REMOTE_WRITE);
1384 
1385 	*state->fr.next++ = desc;
1386 	state->nmdesc++;
1387 
1388 	srp_map_desc(state, desc->mr->iova,
1389 		     desc->mr->length, desc->mr->rkey);
1390 
1391 	err = ib_post_send(ch->qp, &wr.wr, &bad_wr);
1392 	if (unlikely(err))
1393 		return err;
1394 
1395 	return n;
1396 }
1397 
1398 static int srp_map_sg_entry(struct srp_map_state *state,
1399 			    struct srp_rdma_ch *ch,
1400 			    struct scatterlist *sg, int sg_index)
1401 {
1402 	struct srp_target_port *target = ch->target;
1403 	struct srp_device *dev = target->srp_host->srp_dev;
1404 	struct ib_device *ibdev = dev->dev;
1405 	dma_addr_t dma_addr = ib_sg_dma_address(ibdev, sg);
1406 	unsigned int dma_len = ib_sg_dma_len(ibdev, sg);
1407 	unsigned int len = 0;
1408 	int ret;
1409 
1410 	WARN_ON_ONCE(!dma_len);
1411 
1412 	while (dma_len) {
1413 		unsigned offset = dma_addr & ~dev->mr_page_mask;
1414 		if (state->npages == dev->max_pages_per_mr || offset != 0) {
1415 			ret = srp_map_finish_fmr(state, ch);
1416 			if (ret)
1417 				return ret;
1418 		}
1419 
1420 		len = min_t(unsigned int, dma_len, dev->mr_page_size - offset);
1421 
1422 		if (!state->npages)
1423 			state->base_dma_addr = dma_addr;
1424 		state->pages[state->npages++] = dma_addr & dev->mr_page_mask;
1425 		state->dma_len += len;
1426 		dma_addr += len;
1427 		dma_len -= len;
1428 	}
1429 
1430 	/*
1431 	 * If the last entry of the MR wasn't a full page, then we need to
1432 	 * close it out and start a new one -- we can only merge at page
1433 	 * boundries.
1434 	 */
1435 	ret = 0;
1436 	if (len != dev->mr_page_size)
1437 		ret = srp_map_finish_fmr(state, ch);
1438 	return ret;
1439 }
1440 
1441 static int srp_map_sg_fmr(struct srp_map_state *state, struct srp_rdma_ch *ch,
1442 			  struct srp_request *req, struct scatterlist *scat,
1443 			  int count)
1444 {
1445 	struct scatterlist *sg;
1446 	int i, ret;
1447 
1448 	state->desc = req->indirect_desc;
1449 	state->pages = req->map_page;
1450 	state->fmr.next = req->fmr_list;
1451 	state->fmr.end = req->fmr_list + ch->target->cmd_sg_cnt;
1452 
1453 	for_each_sg(scat, sg, count, i) {
1454 		ret = srp_map_sg_entry(state, ch, sg, i);
1455 		if (ret)
1456 			return ret;
1457 	}
1458 
1459 	ret = srp_map_finish_fmr(state, ch);
1460 	if (ret)
1461 		return ret;
1462 
1463 	req->nmdesc = state->nmdesc;
1464 
1465 	return 0;
1466 }
1467 
1468 static int srp_map_sg_fr(struct srp_map_state *state, struct srp_rdma_ch *ch,
1469 			 struct srp_request *req, struct scatterlist *scat,
1470 			 int count)
1471 {
1472 	state->desc = req->indirect_desc;
1473 	state->fr.next = req->fr_list;
1474 	state->fr.end = req->fr_list + ch->target->cmd_sg_cnt;
1475 	state->sg = scat;
1476 
1477 	while (count) {
1478 		int i, n;
1479 
1480 		n = srp_map_finish_fr(state, req, ch, count);
1481 		if (unlikely(n < 0))
1482 			return n;
1483 
1484 		count -= n;
1485 		for (i = 0; i < n; i++)
1486 			state->sg = sg_next(state->sg);
1487 	}
1488 
1489 	req->nmdesc = state->nmdesc;
1490 
1491 	return 0;
1492 }
1493 
1494 static int srp_map_sg_dma(struct srp_map_state *state, struct srp_rdma_ch *ch,
1495 			  struct srp_request *req, struct scatterlist *scat,
1496 			  int count)
1497 {
1498 	struct srp_target_port *target = ch->target;
1499 	struct srp_device *dev = target->srp_host->srp_dev;
1500 	struct scatterlist *sg;
1501 	int i;
1502 
1503 	state->desc = req->indirect_desc;
1504 	for_each_sg(scat, sg, count, i) {
1505 		srp_map_desc(state, ib_sg_dma_address(dev->dev, sg),
1506 			     ib_sg_dma_len(dev->dev, sg),
1507 			     target->global_mr->rkey);
1508 	}
1509 
1510 	req->nmdesc = state->nmdesc;
1511 
1512 	return 0;
1513 }
1514 
1515 /*
1516  * Register the indirect data buffer descriptor with the HCA.
1517  *
1518  * Note: since the indirect data buffer descriptor has been allocated with
1519  * kmalloc() it is guaranteed that this buffer is a physically contiguous
1520  * memory buffer.
1521  */
1522 static int srp_map_idb(struct srp_rdma_ch *ch, struct srp_request *req,
1523 		       void **next_mr, void **end_mr, u32 idb_len,
1524 		       __be32 *idb_rkey)
1525 {
1526 	struct srp_target_port *target = ch->target;
1527 	struct srp_device *dev = target->srp_host->srp_dev;
1528 	struct srp_map_state state;
1529 	struct srp_direct_buf idb_desc;
1530 	u64 idb_pages[1];
1531 	struct scatterlist idb_sg[1];
1532 	int ret;
1533 
1534 	memset(&state, 0, sizeof(state));
1535 	memset(&idb_desc, 0, sizeof(idb_desc));
1536 	state.gen.next = next_mr;
1537 	state.gen.end = end_mr;
1538 	state.desc = &idb_desc;
1539 	state.base_dma_addr = req->indirect_dma_addr;
1540 	state.dma_len = idb_len;
1541 
1542 	if (dev->use_fast_reg) {
1543 		state.sg = idb_sg;
1544 		sg_set_buf(idb_sg, req->indirect_desc, idb_len);
1545 		idb_sg->dma_address = req->indirect_dma_addr; /* hack! */
1546 #ifdef CONFIG_NEED_SG_DMA_LENGTH
1547 		idb_sg->dma_length = idb_sg->length;	      /* hack^2 */
1548 #endif
1549 		ret = srp_map_finish_fr(&state, req, ch, 1);
1550 		if (ret < 0)
1551 			return ret;
1552 	} else if (dev->use_fmr) {
1553 		state.pages = idb_pages;
1554 		state.pages[0] = (req->indirect_dma_addr &
1555 				  dev->mr_page_mask);
1556 		state.npages = 1;
1557 		ret = srp_map_finish_fmr(&state, ch);
1558 		if (ret < 0)
1559 			return ret;
1560 	} else {
1561 		return -EINVAL;
1562 	}
1563 
1564 	*idb_rkey = idb_desc.key;
1565 
1566 	return 0;
1567 }
1568 
1569 static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_rdma_ch *ch,
1570 			struct srp_request *req)
1571 {
1572 	struct srp_target_port *target = ch->target;
1573 	struct scatterlist *scat;
1574 	struct srp_cmd *cmd = req->cmd->buf;
1575 	int len, nents, count, ret;
1576 	struct srp_device *dev;
1577 	struct ib_device *ibdev;
1578 	struct srp_map_state state;
1579 	struct srp_indirect_buf *indirect_hdr;
1580 	u32 idb_len, table_len;
1581 	__be32 idb_rkey;
1582 	u8 fmt;
1583 
1584 	if (!scsi_sglist(scmnd) || scmnd->sc_data_direction == DMA_NONE)
1585 		return sizeof (struct srp_cmd);
1586 
1587 	if (scmnd->sc_data_direction != DMA_FROM_DEVICE &&
1588 	    scmnd->sc_data_direction != DMA_TO_DEVICE) {
1589 		shost_printk(KERN_WARNING, target->scsi_host,
1590 			     PFX "Unhandled data direction %d\n",
1591 			     scmnd->sc_data_direction);
1592 		return -EINVAL;
1593 	}
1594 
1595 	nents = scsi_sg_count(scmnd);
1596 	scat  = scsi_sglist(scmnd);
1597 
1598 	dev = target->srp_host->srp_dev;
1599 	ibdev = dev->dev;
1600 
1601 	count = ib_dma_map_sg(ibdev, scat, nents, scmnd->sc_data_direction);
1602 	if (unlikely(count == 0))
1603 		return -EIO;
1604 
1605 	fmt = SRP_DATA_DESC_DIRECT;
1606 	len = sizeof (struct srp_cmd) +	sizeof (struct srp_direct_buf);
1607 
1608 	if (count == 1 && target->global_mr) {
1609 		/*
1610 		 * The midlayer only generated a single gather/scatter
1611 		 * entry, or DMA mapping coalesced everything to a
1612 		 * single entry.  So a direct descriptor along with
1613 		 * the DMA MR suffices.
1614 		 */
1615 		struct srp_direct_buf *buf = (void *) cmd->add_data;
1616 
1617 		buf->va  = cpu_to_be64(ib_sg_dma_address(ibdev, scat));
1618 		buf->key = cpu_to_be32(target->global_mr->rkey);
1619 		buf->len = cpu_to_be32(ib_sg_dma_len(ibdev, scat));
1620 
1621 		req->nmdesc = 0;
1622 		goto map_complete;
1623 	}
1624 
1625 	/*
1626 	 * We have more than one scatter/gather entry, so build our indirect
1627 	 * descriptor table, trying to merge as many entries as we can.
1628 	 */
1629 	indirect_hdr = (void *) cmd->add_data;
1630 
1631 	ib_dma_sync_single_for_cpu(ibdev, req->indirect_dma_addr,
1632 				   target->indirect_size, DMA_TO_DEVICE);
1633 
1634 	memset(&state, 0, sizeof(state));
1635 	if (dev->use_fast_reg)
1636 		srp_map_sg_fr(&state, ch, req, scat, count);
1637 	else if (dev->use_fmr)
1638 		srp_map_sg_fmr(&state, ch, req, scat, count);
1639 	else
1640 		srp_map_sg_dma(&state, ch, req, scat, count);
1641 
1642 	/* We've mapped the request, now pull as much of the indirect
1643 	 * descriptor table as we can into the command buffer. If this
1644 	 * target is not using an external indirect table, we are
1645 	 * guaranteed to fit into the command, as the SCSI layer won't
1646 	 * give us more S/G entries than we allow.
1647 	 */
1648 	if (state.ndesc == 1) {
1649 		/*
1650 		 * Memory registration collapsed the sg-list into one entry,
1651 		 * so use a direct descriptor.
1652 		 */
1653 		struct srp_direct_buf *buf = (void *) cmd->add_data;
1654 
1655 		*buf = req->indirect_desc[0];
1656 		goto map_complete;
1657 	}
1658 
1659 	if (unlikely(target->cmd_sg_cnt < state.ndesc &&
1660 						!target->allow_ext_sg)) {
1661 		shost_printk(KERN_ERR, target->scsi_host,
1662 			     "Could not fit S/G list into SRP_CMD\n");
1663 		return -EIO;
1664 	}
1665 
1666 	count = min(state.ndesc, target->cmd_sg_cnt);
1667 	table_len = state.ndesc * sizeof (struct srp_direct_buf);
1668 	idb_len = sizeof(struct srp_indirect_buf) + table_len;
1669 
1670 	fmt = SRP_DATA_DESC_INDIRECT;
1671 	len = sizeof(struct srp_cmd) + sizeof (struct srp_indirect_buf);
1672 	len += count * sizeof (struct srp_direct_buf);
1673 
1674 	memcpy(indirect_hdr->desc_list, req->indirect_desc,
1675 	       count * sizeof (struct srp_direct_buf));
1676 
1677 	if (!target->global_mr) {
1678 		ret = srp_map_idb(ch, req, state.gen.next, state.gen.end,
1679 				  idb_len, &idb_rkey);
1680 		if (ret < 0)
1681 			return ret;
1682 		req->nmdesc++;
1683 	} else {
1684 		idb_rkey = cpu_to_be32(target->global_mr->rkey);
1685 	}
1686 
1687 	indirect_hdr->table_desc.va = cpu_to_be64(req->indirect_dma_addr);
1688 	indirect_hdr->table_desc.key = idb_rkey;
1689 	indirect_hdr->table_desc.len = cpu_to_be32(table_len);
1690 	indirect_hdr->len = cpu_to_be32(state.total_len);
1691 
1692 	if (scmnd->sc_data_direction == DMA_TO_DEVICE)
1693 		cmd->data_out_desc_cnt = count;
1694 	else
1695 		cmd->data_in_desc_cnt = count;
1696 
1697 	ib_dma_sync_single_for_device(ibdev, req->indirect_dma_addr, table_len,
1698 				      DMA_TO_DEVICE);
1699 
1700 map_complete:
1701 	if (scmnd->sc_data_direction == DMA_TO_DEVICE)
1702 		cmd->buf_fmt = fmt << 4;
1703 	else
1704 		cmd->buf_fmt = fmt;
1705 
1706 	return len;
1707 }
1708 
1709 /*
1710  * Return an IU and possible credit to the free pool
1711  */
1712 static void srp_put_tx_iu(struct srp_rdma_ch *ch, struct srp_iu *iu,
1713 			  enum srp_iu_type iu_type)
1714 {
1715 	unsigned long flags;
1716 
1717 	spin_lock_irqsave(&ch->lock, flags);
1718 	list_add(&iu->list, &ch->free_tx);
1719 	if (iu_type != SRP_IU_RSP)
1720 		++ch->req_lim;
1721 	spin_unlock_irqrestore(&ch->lock, flags);
1722 }
1723 
1724 /*
1725  * Must be called with ch->lock held to protect req_lim and free_tx.
1726  * If IU is not sent, it must be returned using srp_put_tx_iu().
1727  *
1728  * Note:
1729  * An upper limit for the number of allocated information units for each
1730  * request type is:
1731  * - SRP_IU_CMD: SRP_CMD_SQ_SIZE, since the SCSI mid-layer never queues
1732  *   more than Scsi_Host.can_queue requests.
1733  * - SRP_IU_TSK_MGMT: SRP_TSK_MGMT_SQ_SIZE.
1734  * - SRP_IU_RSP: 1, since a conforming SRP target never sends more than
1735  *   one unanswered SRP request to an initiator.
1736  */
1737 static struct srp_iu *__srp_get_tx_iu(struct srp_rdma_ch *ch,
1738 				      enum srp_iu_type iu_type)
1739 {
1740 	struct srp_target_port *target = ch->target;
1741 	s32 rsv = (iu_type == SRP_IU_TSK_MGMT) ? 0 : SRP_TSK_MGMT_SQ_SIZE;
1742 	struct srp_iu *iu;
1743 
1744 	ib_process_cq_direct(ch->send_cq, -1);
1745 
1746 	if (list_empty(&ch->free_tx))
1747 		return NULL;
1748 
1749 	/* Initiator responses to target requests do not consume credits */
1750 	if (iu_type != SRP_IU_RSP) {
1751 		if (ch->req_lim <= rsv) {
1752 			++target->zero_req_lim;
1753 			return NULL;
1754 		}
1755 
1756 		--ch->req_lim;
1757 	}
1758 
1759 	iu = list_first_entry(&ch->free_tx, struct srp_iu, list);
1760 	list_del(&iu->list);
1761 	return iu;
1762 }
1763 
1764 static void srp_send_done(struct ib_cq *cq, struct ib_wc *wc)
1765 {
1766 	struct srp_iu *iu = container_of(wc->wr_cqe, struct srp_iu, cqe);
1767 	struct srp_rdma_ch *ch = cq->cq_context;
1768 
1769 	if (unlikely(wc->status != IB_WC_SUCCESS)) {
1770 		srp_handle_qp_err(cq, wc, "SEND");
1771 		return;
1772 	}
1773 
1774 	list_add(&iu->list, &ch->free_tx);
1775 }
1776 
1777 static int srp_post_send(struct srp_rdma_ch *ch, struct srp_iu *iu, int len)
1778 {
1779 	struct srp_target_port *target = ch->target;
1780 	struct ib_sge list;
1781 	struct ib_send_wr wr, *bad_wr;
1782 
1783 	list.addr   = iu->dma;
1784 	list.length = len;
1785 	list.lkey   = target->lkey;
1786 
1787 	iu->cqe.done = srp_send_done;
1788 
1789 	wr.next       = NULL;
1790 	wr.wr_cqe     = &iu->cqe;
1791 	wr.sg_list    = &list;
1792 	wr.num_sge    = 1;
1793 	wr.opcode     = IB_WR_SEND;
1794 	wr.send_flags = IB_SEND_SIGNALED;
1795 
1796 	return ib_post_send(ch->qp, &wr, &bad_wr);
1797 }
1798 
1799 static int srp_post_recv(struct srp_rdma_ch *ch, struct srp_iu *iu)
1800 {
1801 	struct srp_target_port *target = ch->target;
1802 	struct ib_recv_wr wr, *bad_wr;
1803 	struct ib_sge list;
1804 
1805 	list.addr   = iu->dma;
1806 	list.length = iu->size;
1807 	list.lkey   = target->lkey;
1808 
1809 	iu->cqe.done = srp_recv_done;
1810 
1811 	wr.next     = NULL;
1812 	wr.wr_cqe   = &iu->cqe;
1813 	wr.sg_list  = &list;
1814 	wr.num_sge  = 1;
1815 
1816 	return ib_post_recv(ch->qp, &wr, &bad_wr);
1817 }
1818 
1819 static void srp_process_rsp(struct srp_rdma_ch *ch, struct srp_rsp *rsp)
1820 {
1821 	struct srp_target_port *target = ch->target;
1822 	struct srp_request *req;
1823 	struct scsi_cmnd *scmnd;
1824 	unsigned long flags;
1825 
1826 	if (unlikely(rsp->tag & SRP_TAG_TSK_MGMT)) {
1827 		spin_lock_irqsave(&ch->lock, flags);
1828 		ch->req_lim += be32_to_cpu(rsp->req_lim_delta);
1829 		spin_unlock_irqrestore(&ch->lock, flags);
1830 
1831 		ch->tsk_mgmt_status = -1;
1832 		if (be32_to_cpu(rsp->resp_data_len) >= 4)
1833 			ch->tsk_mgmt_status = rsp->data[3];
1834 		complete(&ch->tsk_mgmt_done);
1835 	} else {
1836 		scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag);
1837 		if (scmnd) {
1838 			req = (void *)scmnd->host_scribble;
1839 			scmnd = srp_claim_req(ch, req, NULL, scmnd);
1840 		}
1841 		if (!scmnd) {
1842 			shost_printk(KERN_ERR, target->scsi_host,
1843 				     "Null scmnd for RSP w/tag %#016llx received on ch %td / QP %#x\n",
1844 				     rsp->tag, ch - target->ch, ch->qp->qp_num);
1845 
1846 			spin_lock_irqsave(&ch->lock, flags);
1847 			ch->req_lim += be32_to_cpu(rsp->req_lim_delta);
1848 			spin_unlock_irqrestore(&ch->lock, flags);
1849 
1850 			return;
1851 		}
1852 		scmnd->result = rsp->status;
1853 
1854 		if (rsp->flags & SRP_RSP_FLAG_SNSVALID) {
1855 			memcpy(scmnd->sense_buffer, rsp->data +
1856 			       be32_to_cpu(rsp->resp_data_len),
1857 			       min_t(int, be32_to_cpu(rsp->sense_data_len),
1858 				     SCSI_SENSE_BUFFERSIZE));
1859 		}
1860 
1861 		if (unlikely(rsp->flags & SRP_RSP_FLAG_DIUNDER))
1862 			scsi_set_resid(scmnd, be32_to_cpu(rsp->data_in_res_cnt));
1863 		else if (unlikely(rsp->flags & SRP_RSP_FLAG_DIOVER))
1864 			scsi_set_resid(scmnd, -be32_to_cpu(rsp->data_in_res_cnt));
1865 		else if (unlikely(rsp->flags & SRP_RSP_FLAG_DOUNDER))
1866 			scsi_set_resid(scmnd, be32_to_cpu(rsp->data_out_res_cnt));
1867 		else if (unlikely(rsp->flags & SRP_RSP_FLAG_DOOVER))
1868 			scsi_set_resid(scmnd, -be32_to_cpu(rsp->data_out_res_cnt));
1869 
1870 		srp_free_req(ch, req, scmnd,
1871 			     be32_to_cpu(rsp->req_lim_delta));
1872 
1873 		scmnd->host_scribble = NULL;
1874 		scmnd->scsi_done(scmnd);
1875 	}
1876 }
1877 
1878 static int srp_response_common(struct srp_rdma_ch *ch, s32 req_delta,
1879 			       void *rsp, int len)
1880 {
1881 	struct srp_target_port *target = ch->target;
1882 	struct ib_device *dev = target->srp_host->srp_dev->dev;
1883 	unsigned long flags;
1884 	struct srp_iu *iu;
1885 	int err;
1886 
1887 	spin_lock_irqsave(&ch->lock, flags);
1888 	ch->req_lim += req_delta;
1889 	iu = __srp_get_tx_iu(ch, SRP_IU_RSP);
1890 	spin_unlock_irqrestore(&ch->lock, flags);
1891 
1892 	if (!iu) {
1893 		shost_printk(KERN_ERR, target->scsi_host, PFX
1894 			     "no IU available to send response\n");
1895 		return 1;
1896 	}
1897 
1898 	ib_dma_sync_single_for_cpu(dev, iu->dma, len, DMA_TO_DEVICE);
1899 	memcpy(iu->buf, rsp, len);
1900 	ib_dma_sync_single_for_device(dev, iu->dma, len, DMA_TO_DEVICE);
1901 
1902 	err = srp_post_send(ch, iu, len);
1903 	if (err) {
1904 		shost_printk(KERN_ERR, target->scsi_host, PFX
1905 			     "unable to post response: %d\n", err);
1906 		srp_put_tx_iu(ch, iu, SRP_IU_RSP);
1907 	}
1908 
1909 	return err;
1910 }
1911 
1912 static void srp_process_cred_req(struct srp_rdma_ch *ch,
1913 				 struct srp_cred_req *req)
1914 {
1915 	struct srp_cred_rsp rsp = {
1916 		.opcode = SRP_CRED_RSP,
1917 		.tag = req->tag,
1918 	};
1919 	s32 delta = be32_to_cpu(req->req_lim_delta);
1920 
1921 	if (srp_response_common(ch, delta, &rsp, sizeof(rsp)))
1922 		shost_printk(KERN_ERR, ch->target->scsi_host, PFX
1923 			     "problems processing SRP_CRED_REQ\n");
1924 }
1925 
1926 static void srp_process_aer_req(struct srp_rdma_ch *ch,
1927 				struct srp_aer_req *req)
1928 {
1929 	struct srp_target_port *target = ch->target;
1930 	struct srp_aer_rsp rsp = {
1931 		.opcode = SRP_AER_RSP,
1932 		.tag = req->tag,
1933 	};
1934 	s32 delta = be32_to_cpu(req->req_lim_delta);
1935 
1936 	shost_printk(KERN_ERR, target->scsi_host, PFX
1937 		     "ignoring AER for LUN %llu\n", scsilun_to_int(&req->lun));
1938 
1939 	if (srp_response_common(ch, delta, &rsp, sizeof(rsp)))
1940 		shost_printk(KERN_ERR, target->scsi_host, PFX
1941 			     "problems processing SRP_AER_REQ\n");
1942 }
1943 
1944 static void srp_recv_done(struct ib_cq *cq, struct ib_wc *wc)
1945 {
1946 	struct srp_iu *iu = container_of(wc->wr_cqe, struct srp_iu, cqe);
1947 	struct srp_rdma_ch *ch = cq->cq_context;
1948 	struct srp_target_port *target = ch->target;
1949 	struct ib_device *dev = target->srp_host->srp_dev->dev;
1950 	int res;
1951 	u8 opcode;
1952 
1953 	if (unlikely(wc->status != IB_WC_SUCCESS)) {
1954 		srp_handle_qp_err(cq, wc, "RECV");
1955 		return;
1956 	}
1957 
1958 	ib_dma_sync_single_for_cpu(dev, iu->dma, ch->max_ti_iu_len,
1959 				   DMA_FROM_DEVICE);
1960 
1961 	opcode = *(u8 *) iu->buf;
1962 
1963 	if (0) {
1964 		shost_printk(KERN_ERR, target->scsi_host,
1965 			     PFX "recv completion, opcode 0x%02x\n", opcode);
1966 		print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 8, 1,
1967 			       iu->buf, wc->byte_len, true);
1968 	}
1969 
1970 	switch (opcode) {
1971 	case SRP_RSP:
1972 		srp_process_rsp(ch, iu->buf);
1973 		break;
1974 
1975 	case SRP_CRED_REQ:
1976 		srp_process_cred_req(ch, iu->buf);
1977 		break;
1978 
1979 	case SRP_AER_REQ:
1980 		srp_process_aer_req(ch, iu->buf);
1981 		break;
1982 
1983 	case SRP_T_LOGOUT:
1984 		/* XXX Handle target logout */
1985 		shost_printk(KERN_WARNING, target->scsi_host,
1986 			     PFX "Got target logout request\n");
1987 		break;
1988 
1989 	default:
1990 		shost_printk(KERN_WARNING, target->scsi_host,
1991 			     PFX "Unhandled SRP opcode 0x%02x\n", opcode);
1992 		break;
1993 	}
1994 
1995 	ib_dma_sync_single_for_device(dev, iu->dma, ch->max_ti_iu_len,
1996 				      DMA_FROM_DEVICE);
1997 
1998 	res = srp_post_recv(ch, iu);
1999 	if (res != 0)
2000 		shost_printk(KERN_ERR, target->scsi_host,
2001 			     PFX "Recv failed with error code %d\n", res);
2002 }
2003 
2004 /**
2005  * srp_tl_err_work() - handle a transport layer error
2006  * @work: Work structure embedded in an SRP target port.
2007  *
2008  * Note: This function may get invoked before the rport has been created,
2009  * hence the target->rport test.
2010  */
2011 static void srp_tl_err_work(struct work_struct *work)
2012 {
2013 	struct srp_target_port *target;
2014 
2015 	target = container_of(work, struct srp_target_port, tl_err_work);
2016 	if (target->rport)
2017 		srp_start_tl_fail_timers(target->rport);
2018 }
2019 
2020 static void srp_handle_qp_err(struct ib_cq *cq, struct ib_wc *wc,
2021 		const char *opname)
2022 {
2023 	struct srp_rdma_ch *ch = cq->cq_context;
2024 	struct srp_target_port *target = ch->target;
2025 
2026 	if (ch->connected && !target->qp_in_error) {
2027 		shost_printk(KERN_ERR, target->scsi_host,
2028 			     PFX "failed %s status %s (%d) for CQE %p\n",
2029 			     opname, ib_wc_status_msg(wc->status), wc->status,
2030 			     wc->wr_cqe);
2031 		queue_work(system_long_wq, &target->tl_err_work);
2032 	}
2033 	target->qp_in_error = true;
2034 }
2035 
2036 static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
2037 {
2038 	struct srp_target_port *target = host_to_target(shost);
2039 	struct srp_rport *rport = target->rport;
2040 	struct srp_rdma_ch *ch;
2041 	struct srp_request *req;
2042 	struct srp_iu *iu;
2043 	struct srp_cmd *cmd;
2044 	struct ib_device *dev;
2045 	unsigned long flags;
2046 	u32 tag;
2047 	u16 idx;
2048 	int len, ret;
2049 	const bool in_scsi_eh = !in_interrupt() && current == shost->ehandler;
2050 
2051 	/*
2052 	 * The SCSI EH thread is the only context from which srp_queuecommand()
2053 	 * can get invoked for blocked devices (SDEV_BLOCK /
2054 	 * SDEV_CREATED_BLOCK). Avoid racing with srp_reconnect_rport() by
2055 	 * locking the rport mutex if invoked from inside the SCSI EH.
2056 	 */
2057 	if (in_scsi_eh)
2058 		mutex_lock(&rport->mutex);
2059 
2060 	scmnd->result = srp_chkready(target->rport);
2061 	if (unlikely(scmnd->result))
2062 		goto err;
2063 
2064 	WARN_ON_ONCE(scmnd->request->tag < 0);
2065 	tag = blk_mq_unique_tag(scmnd->request);
2066 	ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)];
2067 	idx = blk_mq_unique_tag_to_tag(tag);
2068 	WARN_ONCE(idx >= target->req_ring_size, "%s: tag %#x: idx %d >= %d\n",
2069 		  dev_name(&shost->shost_gendev), tag, idx,
2070 		  target->req_ring_size);
2071 
2072 	spin_lock_irqsave(&ch->lock, flags);
2073 	iu = __srp_get_tx_iu(ch, SRP_IU_CMD);
2074 	spin_unlock_irqrestore(&ch->lock, flags);
2075 
2076 	if (!iu)
2077 		goto err;
2078 
2079 	req = &ch->req_ring[idx];
2080 	dev = target->srp_host->srp_dev->dev;
2081 	ib_dma_sync_single_for_cpu(dev, iu->dma, target->max_iu_len,
2082 				   DMA_TO_DEVICE);
2083 
2084 	scmnd->host_scribble = (void *) req;
2085 
2086 	cmd = iu->buf;
2087 	memset(cmd, 0, sizeof *cmd);
2088 
2089 	cmd->opcode = SRP_CMD;
2090 	int_to_scsilun(scmnd->device->lun, &cmd->lun);
2091 	cmd->tag    = tag;
2092 	memcpy(cmd->cdb, scmnd->cmnd, scmnd->cmd_len);
2093 
2094 	req->scmnd    = scmnd;
2095 	req->cmd      = iu;
2096 
2097 	len = srp_map_data(scmnd, ch, req);
2098 	if (len < 0) {
2099 		shost_printk(KERN_ERR, target->scsi_host,
2100 			     PFX "Failed to map data (%d)\n", len);
2101 		/*
2102 		 * If we ran out of memory descriptors (-ENOMEM) because an
2103 		 * application is queuing many requests with more than
2104 		 * max_pages_per_mr sg-list elements, tell the SCSI mid-layer
2105 		 * to reduce queue depth temporarily.
2106 		 */
2107 		scmnd->result = len == -ENOMEM ?
2108 			DID_OK << 16 | QUEUE_FULL << 1 : DID_ERROR << 16;
2109 		goto err_iu;
2110 	}
2111 
2112 	ib_dma_sync_single_for_device(dev, iu->dma, target->max_iu_len,
2113 				      DMA_TO_DEVICE);
2114 
2115 	if (srp_post_send(ch, iu, len)) {
2116 		shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n");
2117 		goto err_unmap;
2118 	}
2119 
2120 	ret = 0;
2121 
2122 unlock_rport:
2123 	if (in_scsi_eh)
2124 		mutex_unlock(&rport->mutex);
2125 
2126 	return ret;
2127 
2128 err_unmap:
2129 	srp_unmap_data(scmnd, ch, req);
2130 
2131 err_iu:
2132 	srp_put_tx_iu(ch, iu, SRP_IU_CMD);
2133 
2134 	/*
2135 	 * Avoid that the loops that iterate over the request ring can
2136 	 * encounter a dangling SCSI command pointer.
2137 	 */
2138 	req->scmnd = NULL;
2139 
2140 err:
2141 	if (scmnd->result) {
2142 		scmnd->scsi_done(scmnd);
2143 		ret = 0;
2144 	} else {
2145 		ret = SCSI_MLQUEUE_HOST_BUSY;
2146 	}
2147 
2148 	goto unlock_rport;
2149 }
2150 
2151 /*
2152  * Note: the resources allocated in this function are freed in
2153  * srp_free_ch_ib().
2154  */
2155 static int srp_alloc_iu_bufs(struct srp_rdma_ch *ch)
2156 {
2157 	struct srp_target_port *target = ch->target;
2158 	int i;
2159 
2160 	ch->rx_ring = kcalloc(target->queue_size, sizeof(*ch->rx_ring),
2161 			      GFP_KERNEL);
2162 	if (!ch->rx_ring)
2163 		goto err_no_ring;
2164 	ch->tx_ring = kcalloc(target->queue_size, sizeof(*ch->tx_ring),
2165 			      GFP_KERNEL);
2166 	if (!ch->tx_ring)
2167 		goto err_no_ring;
2168 
2169 	for (i = 0; i < target->queue_size; ++i) {
2170 		ch->rx_ring[i] = srp_alloc_iu(target->srp_host,
2171 					      ch->max_ti_iu_len,
2172 					      GFP_KERNEL, DMA_FROM_DEVICE);
2173 		if (!ch->rx_ring[i])
2174 			goto err;
2175 	}
2176 
2177 	for (i = 0; i < target->queue_size; ++i) {
2178 		ch->tx_ring[i] = srp_alloc_iu(target->srp_host,
2179 					      target->max_iu_len,
2180 					      GFP_KERNEL, DMA_TO_DEVICE);
2181 		if (!ch->tx_ring[i])
2182 			goto err;
2183 
2184 		list_add(&ch->tx_ring[i]->list, &ch->free_tx);
2185 	}
2186 
2187 	return 0;
2188 
2189 err:
2190 	for (i = 0; i < target->queue_size; ++i) {
2191 		srp_free_iu(target->srp_host, ch->rx_ring[i]);
2192 		srp_free_iu(target->srp_host, ch->tx_ring[i]);
2193 	}
2194 
2195 
2196 err_no_ring:
2197 	kfree(ch->tx_ring);
2198 	ch->tx_ring = NULL;
2199 	kfree(ch->rx_ring);
2200 	ch->rx_ring = NULL;
2201 
2202 	return -ENOMEM;
2203 }
2204 
2205 static uint32_t srp_compute_rq_tmo(struct ib_qp_attr *qp_attr, int attr_mask)
2206 {
2207 	uint64_t T_tr_ns, max_compl_time_ms;
2208 	uint32_t rq_tmo_jiffies;
2209 
2210 	/*
2211 	 * According to section 11.2.4.2 in the IBTA spec (Modify Queue Pair,
2212 	 * table 91), both the QP timeout and the retry count have to be set
2213 	 * for RC QP's during the RTR to RTS transition.
2214 	 */
2215 	WARN_ON_ONCE((attr_mask & (IB_QP_TIMEOUT | IB_QP_RETRY_CNT)) !=
2216 		     (IB_QP_TIMEOUT | IB_QP_RETRY_CNT));
2217 
2218 	/*
2219 	 * Set target->rq_tmo_jiffies to one second more than the largest time
2220 	 * it can take before an error completion is generated. See also
2221 	 * C9-140..142 in the IBTA spec for more information about how to
2222 	 * convert the QP Local ACK Timeout value to nanoseconds.
2223 	 */
2224 	T_tr_ns = 4096 * (1ULL << qp_attr->timeout);
2225 	max_compl_time_ms = qp_attr->retry_cnt * 4 * T_tr_ns;
2226 	do_div(max_compl_time_ms, NSEC_PER_MSEC);
2227 	rq_tmo_jiffies = msecs_to_jiffies(max_compl_time_ms + 1000);
2228 
2229 	return rq_tmo_jiffies;
2230 }
2231 
2232 static void srp_cm_rep_handler(struct ib_cm_id *cm_id,
2233 			       const struct srp_login_rsp *lrsp,
2234 			       struct srp_rdma_ch *ch)
2235 {
2236 	struct srp_target_port *target = ch->target;
2237 	struct ib_qp_attr *qp_attr = NULL;
2238 	int attr_mask = 0;
2239 	int ret;
2240 	int i;
2241 
2242 	if (lrsp->opcode == SRP_LOGIN_RSP) {
2243 		ch->max_ti_iu_len = be32_to_cpu(lrsp->max_ti_iu_len);
2244 		ch->req_lim       = be32_to_cpu(lrsp->req_lim_delta);
2245 
2246 		/*
2247 		 * Reserve credits for task management so we don't
2248 		 * bounce requests back to the SCSI mid-layer.
2249 		 */
2250 		target->scsi_host->can_queue
2251 			= min(ch->req_lim - SRP_TSK_MGMT_SQ_SIZE,
2252 			      target->scsi_host->can_queue);
2253 		target->scsi_host->cmd_per_lun
2254 			= min_t(int, target->scsi_host->can_queue,
2255 				target->scsi_host->cmd_per_lun);
2256 	} else {
2257 		shost_printk(KERN_WARNING, target->scsi_host,
2258 			     PFX "Unhandled RSP opcode %#x\n", lrsp->opcode);
2259 		ret = -ECONNRESET;
2260 		goto error;
2261 	}
2262 
2263 	if (!ch->rx_ring) {
2264 		ret = srp_alloc_iu_bufs(ch);
2265 		if (ret)
2266 			goto error;
2267 	}
2268 
2269 	ret = -ENOMEM;
2270 	qp_attr = kmalloc(sizeof *qp_attr, GFP_KERNEL);
2271 	if (!qp_attr)
2272 		goto error;
2273 
2274 	qp_attr->qp_state = IB_QPS_RTR;
2275 	ret = ib_cm_init_qp_attr(cm_id, qp_attr, &attr_mask);
2276 	if (ret)
2277 		goto error_free;
2278 
2279 	ret = ib_modify_qp(ch->qp, qp_attr, attr_mask);
2280 	if (ret)
2281 		goto error_free;
2282 
2283 	for (i = 0; i < target->queue_size; i++) {
2284 		struct srp_iu *iu = ch->rx_ring[i];
2285 
2286 		ret = srp_post_recv(ch, iu);
2287 		if (ret)
2288 			goto error_free;
2289 	}
2290 
2291 	qp_attr->qp_state = IB_QPS_RTS;
2292 	ret = ib_cm_init_qp_attr(cm_id, qp_attr, &attr_mask);
2293 	if (ret)
2294 		goto error_free;
2295 
2296 	target->rq_tmo_jiffies = srp_compute_rq_tmo(qp_attr, attr_mask);
2297 
2298 	ret = ib_modify_qp(ch->qp, qp_attr, attr_mask);
2299 	if (ret)
2300 		goto error_free;
2301 
2302 	ret = ib_send_cm_rtu(cm_id, NULL, 0);
2303 
2304 error_free:
2305 	kfree(qp_attr);
2306 
2307 error:
2308 	ch->status = ret;
2309 }
2310 
2311 static void srp_cm_rej_handler(struct ib_cm_id *cm_id,
2312 			       struct ib_cm_event *event,
2313 			       struct srp_rdma_ch *ch)
2314 {
2315 	struct srp_target_port *target = ch->target;
2316 	struct Scsi_Host *shost = target->scsi_host;
2317 	struct ib_class_port_info *cpi;
2318 	int opcode;
2319 
2320 	switch (event->param.rej_rcvd.reason) {
2321 	case IB_CM_REJ_PORT_CM_REDIRECT:
2322 		cpi = event->param.rej_rcvd.ari;
2323 		ch->path.dlid = cpi->redirect_lid;
2324 		ch->path.pkey = cpi->redirect_pkey;
2325 		cm_id->remote_cm_qpn = be32_to_cpu(cpi->redirect_qp) & 0x00ffffff;
2326 		memcpy(ch->path.dgid.raw, cpi->redirect_gid, 16);
2327 
2328 		ch->status = ch->path.dlid ?
2329 			SRP_DLID_REDIRECT : SRP_PORT_REDIRECT;
2330 		break;
2331 
2332 	case IB_CM_REJ_PORT_REDIRECT:
2333 		if (srp_target_is_topspin(target)) {
2334 			/*
2335 			 * Topspin/Cisco SRP gateways incorrectly send
2336 			 * reject reason code 25 when they mean 24
2337 			 * (port redirect).
2338 			 */
2339 			memcpy(ch->path.dgid.raw,
2340 			       event->param.rej_rcvd.ari, 16);
2341 
2342 			shost_printk(KERN_DEBUG, shost,
2343 				     PFX "Topspin/Cisco redirect to target port GID %016llx%016llx\n",
2344 				     be64_to_cpu(ch->path.dgid.global.subnet_prefix),
2345 				     be64_to_cpu(ch->path.dgid.global.interface_id));
2346 
2347 			ch->status = SRP_PORT_REDIRECT;
2348 		} else {
2349 			shost_printk(KERN_WARNING, shost,
2350 				     "  REJ reason: IB_CM_REJ_PORT_REDIRECT\n");
2351 			ch->status = -ECONNRESET;
2352 		}
2353 		break;
2354 
2355 	case IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID:
2356 		shost_printk(KERN_WARNING, shost,
2357 			    "  REJ reason: IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID\n");
2358 		ch->status = -ECONNRESET;
2359 		break;
2360 
2361 	case IB_CM_REJ_CONSUMER_DEFINED:
2362 		opcode = *(u8 *) event->private_data;
2363 		if (opcode == SRP_LOGIN_REJ) {
2364 			struct srp_login_rej *rej = event->private_data;
2365 			u32 reason = be32_to_cpu(rej->reason);
2366 
2367 			if (reason == SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE)
2368 				shost_printk(KERN_WARNING, shost,
2369 					     PFX "SRP_LOGIN_REJ: requested max_it_iu_len too large\n");
2370 			else
2371 				shost_printk(KERN_WARNING, shost, PFX
2372 					     "SRP LOGIN from %pI6 to %pI6 REJECTED, reason 0x%08x\n",
2373 					     target->sgid.raw,
2374 					     target->orig_dgid.raw, reason);
2375 		} else
2376 			shost_printk(KERN_WARNING, shost,
2377 				     "  REJ reason: IB_CM_REJ_CONSUMER_DEFINED,"
2378 				     " opcode 0x%02x\n", opcode);
2379 		ch->status = -ECONNRESET;
2380 		break;
2381 
2382 	case IB_CM_REJ_STALE_CONN:
2383 		shost_printk(KERN_WARNING, shost, "  REJ reason: stale connection\n");
2384 		ch->status = SRP_STALE_CONN;
2385 		break;
2386 
2387 	default:
2388 		shost_printk(KERN_WARNING, shost, "  REJ reason 0x%x\n",
2389 			     event->param.rej_rcvd.reason);
2390 		ch->status = -ECONNRESET;
2391 	}
2392 }
2393 
2394 static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event)
2395 {
2396 	struct srp_rdma_ch *ch = cm_id->context;
2397 	struct srp_target_port *target = ch->target;
2398 	int comp = 0;
2399 
2400 	switch (event->event) {
2401 	case IB_CM_REQ_ERROR:
2402 		shost_printk(KERN_DEBUG, target->scsi_host,
2403 			     PFX "Sending CM REQ failed\n");
2404 		comp = 1;
2405 		ch->status = -ECONNRESET;
2406 		break;
2407 
2408 	case IB_CM_REP_RECEIVED:
2409 		comp = 1;
2410 		srp_cm_rep_handler(cm_id, event->private_data, ch);
2411 		break;
2412 
2413 	case IB_CM_REJ_RECEIVED:
2414 		shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n");
2415 		comp = 1;
2416 
2417 		srp_cm_rej_handler(cm_id, event, ch);
2418 		break;
2419 
2420 	case IB_CM_DREQ_RECEIVED:
2421 		shost_printk(KERN_WARNING, target->scsi_host,
2422 			     PFX "DREQ received - connection closed\n");
2423 		ch->connected = false;
2424 		if (ib_send_cm_drep(cm_id, NULL, 0))
2425 			shost_printk(KERN_ERR, target->scsi_host,
2426 				     PFX "Sending CM DREP failed\n");
2427 		queue_work(system_long_wq, &target->tl_err_work);
2428 		break;
2429 
2430 	case IB_CM_TIMEWAIT_EXIT:
2431 		shost_printk(KERN_ERR, target->scsi_host,
2432 			     PFX "connection closed\n");
2433 		comp = 1;
2434 
2435 		ch->status = 0;
2436 		break;
2437 
2438 	case IB_CM_MRA_RECEIVED:
2439 	case IB_CM_DREQ_ERROR:
2440 	case IB_CM_DREP_RECEIVED:
2441 		break;
2442 
2443 	default:
2444 		shost_printk(KERN_WARNING, target->scsi_host,
2445 			     PFX "Unhandled CM event %d\n", event->event);
2446 		break;
2447 	}
2448 
2449 	if (comp)
2450 		complete(&ch->done);
2451 
2452 	return 0;
2453 }
2454 
2455 /**
2456  * srp_change_queue_depth - setting device queue depth
2457  * @sdev: scsi device struct
2458  * @qdepth: requested queue depth
2459  *
2460  * Returns queue depth.
2461  */
2462 static int
2463 srp_change_queue_depth(struct scsi_device *sdev, int qdepth)
2464 {
2465 	if (!sdev->tagged_supported)
2466 		qdepth = 1;
2467 	return scsi_change_queue_depth(sdev, qdepth);
2468 }
2469 
2470 static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, u64 lun,
2471 			     u8 func)
2472 {
2473 	struct srp_target_port *target = ch->target;
2474 	struct srp_rport *rport = target->rport;
2475 	struct ib_device *dev = target->srp_host->srp_dev->dev;
2476 	struct srp_iu *iu;
2477 	struct srp_tsk_mgmt *tsk_mgmt;
2478 
2479 	if (!ch->connected || target->qp_in_error)
2480 		return -1;
2481 
2482 	init_completion(&ch->tsk_mgmt_done);
2483 
2484 	/*
2485 	 * Lock the rport mutex to avoid that srp_create_ch_ib() is
2486 	 * invoked while a task management function is being sent.
2487 	 */
2488 	mutex_lock(&rport->mutex);
2489 	spin_lock_irq(&ch->lock);
2490 	iu = __srp_get_tx_iu(ch, SRP_IU_TSK_MGMT);
2491 	spin_unlock_irq(&ch->lock);
2492 
2493 	if (!iu) {
2494 		mutex_unlock(&rport->mutex);
2495 
2496 		return -1;
2497 	}
2498 
2499 	ib_dma_sync_single_for_cpu(dev, iu->dma, sizeof *tsk_mgmt,
2500 				   DMA_TO_DEVICE);
2501 	tsk_mgmt = iu->buf;
2502 	memset(tsk_mgmt, 0, sizeof *tsk_mgmt);
2503 
2504 	tsk_mgmt->opcode 	= SRP_TSK_MGMT;
2505 	int_to_scsilun(lun, &tsk_mgmt->lun);
2506 	tsk_mgmt->tag		= req_tag | SRP_TAG_TSK_MGMT;
2507 	tsk_mgmt->tsk_mgmt_func = func;
2508 	tsk_mgmt->task_tag	= req_tag;
2509 
2510 	ib_dma_sync_single_for_device(dev, iu->dma, sizeof *tsk_mgmt,
2511 				      DMA_TO_DEVICE);
2512 	if (srp_post_send(ch, iu, sizeof(*tsk_mgmt))) {
2513 		srp_put_tx_iu(ch, iu, SRP_IU_TSK_MGMT);
2514 		mutex_unlock(&rport->mutex);
2515 
2516 		return -1;
2517 	}
2518 	mutex_unlock(&rport->mutex);
2519 
2520 	if (!wait_for_completion_timeout(&ch->tsk_mgmt_done,
2521 					 msecs_to_jiffies(SRP_ABORT_TIMEOUT_MS)))
2522 		return -1;
2523 
2524 	return 0;
2525 }
2526 
2527 static int srp_abort(struct scsi_cmnd *scmnd)
2528 {
2529 	struct srp_target_port *target = host_to_target(scmnd->device->host);
2530 	struct srp_request *req = (struct srp_request *) scmnd->host_scribble;
2531 	u32 tag;
2532 	u16 ch_idx;
2533 	struct srp_rdma_ch *ch;
2534 	int ret;
2535 
2536 	shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n");
2537 
2538 	if (!req)
2539 		return SUCCESS;
2540 	tag = blk_mq_unique_tag(scmnd->request);
2541 	ch_idx = blk_mq_unique_tag_to_hwq(tag);
2542 	if (WARN_ON_ONCE(ch_idx >= target->ch_count))
2543 		return SUCCESS;
2544 	ch = &target->ch[ch_idx];
2545 	if (!srp_claim_req(ch, req, NULL, scmnd))
2546 		return SUCCESS;
2547 	shost_printk(KERN_ERR, target->scsi_host,
2548 		     "Sending SRP abort for tag %#x\n", tag);
2549 	if (srp_send_tsk_mgmt(ch, tag, scmnd->device->lun,
2550 			      SRP_TSK_ABORT_TASK) == 0)
2551 		ret = SUCCESS;
2552 	else if (target->rport->state == SRP_RPORT_LOST)
2553 		ret = FAST_IO_FAIL;
2554 	else
2555 		ret = FAILED;
2556 	srp_free_req(ch, req, scmnd, 0);
2557 	scmnd->result = DID_ABORT << 16;
2558 	scmnd->scsi_done(scmnd);
2559 
2560 	return ret;
2561 }
2562 
2563 static int srp_reset_device(struct scsi_cmnd *scmnd)
2564 {
2565 	struct srp_target_port *target = host_to_target(scmnd->device->host);
2566 	struct srp_rdma_ch *ch;
2567 	int i;
2568 
2569 	shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
2570 
2571 	ch = &target->ch[0];
2572 	if (srp_send_tsk_mgmt(ch, SRP_TAG_NO_REQ, scmnd->device->lun,
2573 			      SRP_TSK_LUN_RESET))
2574 		return FAILED;
2575 	if (ch->tsk_mgmt_status)
2576 		return FAILED;
2577 
2578 	for (i = 0; i < target->ch_count; i++) {
2579 		ch = &target->ch[i];
2580 		for (i = 0; i < target->req_ring_size; ++i) {
2581 			struct srp_request *req = &ch->req_ring[i];
2582 
2583 			srp_finish_req(ch, req, scmnd->device, DID_RESET << 16);
2584 		}
2585 	}
2586 
2587 	return SUCCESS;
2588 }
2589 
2590 static int srp_reset_host(struct scsi_cmnd *scmnd)
2591 {
2592 	struct srp_target_port *target = host_to_target(scmnd->device->host);
2593 
2594 	shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host called\n");
2595 
2596 	return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED;
2597 }
2598 
2599 static int srp_slave_configure(struct scsi_device *sdev)
2600 {
2601 	struct Scsi_Host *shost = sdev->host;
2602 	struct srp_target_port *target = host_to_target(shost);
2603 	struct request_queue *q = sdev->request_queue;
2604 	unsigned long timeout;
2605 
2606 	if (sdev->type == TYPE_DISK) {
2607 		timeout = max_t(unsigned, 30 * HZ, target->rq_tmo_jiffies);
2608 		blk_queue_rq_timeout(q, timeout);
2609 	}
2610 
2611 	return 0;
2612 }
2613 
2614 static ssize_t show_id_ext(struct device *dev, struct device_attribute *attr,
2615 			   char *buf)
2616 {
2617 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2618 
2619 	return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->id_ext));
2620 }
2621 
2622 static ssize_t show_ioc_guid(struct device *dev, struct device_attribute *attr,
2623 			     char *buf)
2624 {
2625 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2626 
2627 	return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->ioc_guid));
2628 }
2629 
2630 static ssize_t show_service_id(struct device *dev,
2631 			       struct device_attribute *attr, char *buf)
2632 {
2633 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2634 
2635 	return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->service_id));
2636 }
2637 
2638 static ssize_t show_pkey(struct device *dev, struct device_attribute *attr,
2639 			 char *buf)
2640 {
2641 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2642 
2643 	return sprintf(buf, "0x%04x\n", be16_to_cpu(target->pkey));
2644 }
2645 
2646 static ssize_t show_sgid(struct device *dev, struct device_attribute *attr,
2647 			 char *buf)
2648 {
2649 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2650 
2651 	return sprintf(buf, "%pI6\n", target->sgid.raw);
2652 }
2653 
2654 static ssize_t show_dgid(struct device *dev, struct device_attribute *attr,
2655 			 char *buf)
2656 {
2657 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2658 	struct srp_rdma_ch *ch = &target->ch[0];
2659 
2660 	return sprintf(buf, "%pI6\n", ch->path.dgid.raw);
2661 }
2662 
2663 static ssize_t show_orig_dgid(struct device *dev,
2664 			      struct device_attribute *attr, char *buf)
2665 {
2666 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2667 
2668 	return sprintf(buf, "%pI6\n", target->orig_dgid.raw);
2669 }
2670 
2671 static ssize_t show_req_lim(struct device *dev,
2672 			    struct device_attribute *attr, char *buf)
2673 {
2674 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2675 	struct srp_rdma_ch *ch;
2676 	int i, req_lim = INT_MAX;
2677 
2678 	for (i = 0; i < target->ch_count; i++) {
2679 		ch = &target->ch[i];
2680 		req_lim = min(req_lim, ch->req_lim);
2681 	}
2682 	return sprintf(buf, "%d\n", req_lim);
2683 }
2684 
2685 static ssize_t show_zero_req_lim(struct device *dev,
2686 				 struct device_attribute *attr, char *buf)
2687 {
2688 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2689 
2690 	return sprintf(buf, "%d\n", target->zero_req_lim);
2691 }
2692 
2693 static ssize_t show_local_ib_port(struct device *dev,
2694 				  struct device_attribute *attr, char *buf)
2695 {
2696 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2697 
2698 	return sprintf(buf, "%d\n", target->srp_host->port);
2699 }
2700 
2701 static ssize_t show_local_ib_device(struct device *dev,
2702 				    struct device_attribute *attr, char *buf)
2703 {
2704 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2705 
2706 	return sprintf(buf, "%s\n", target->srp_host->srp_dev->dev->name);
2707 }
2708 
2709 static ssize_t show_ch_count(struct device *dev, struct device_attribute *attr,
2710 			     char *buf)
2711 {
2712 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2713 
2714 	return sprintf(buf, "%d\n", target->ch_count);
2715 }
2716 
2717 static ssize_t show_comp_vector(struct device *dev,
2718 				struct device_attribute *attr, char *buf)
2719 {
2720 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2721 
2722 	return sprintf(buf, "%d\n", target->comp_vector);
2723 }
2724 
2725 static ssize_t show_tl_retry_count(struct device *dev,
2726 				   struct device_attribute *attr, char *buf)
2727 {
2728 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2729 
2730 	return sprintf(buf, "%d\n", target->tl_retry_count);
2731 }
2732 
2733 static ssize_t show_cmd_sg_entries(struct device *dev,
2734 				   struct device_attribute *attr, char *buf)
2735 {
2736 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2737 
2738 	return sprintf(buf, "%u\n", target->cmd_sg_cnt);
2739 }
2740 
2741 static ssize_t show_allow_ext_sg(struct device *dev,
2742 				 struct device_attribute *attr, char *buf)
2743 {
2744 	struct srp_target_port *target = host_to_target(class_to_shost(dev));
2745 
2746 	return sprintf(buf, "%s\n", target->allow_ext_sg ? "true" : "false");
2747 }
2748 
2749 static DEVICE_ATTR(id_ext,	    S_IRUGO, show_id_ext,	   NULL);
2750 static DEVICE_ATTR(ioc_guid,	    S_IRUGO, show_ioc_guid,	   NULL);
2751 static DEVICE_ATTR(service_id,	    S_IRUGO, show_service_id,	   NULL);
2752 static DEVICE_ATTR(pkey,	    S_IRUGO, show_pkey,		   NULL);
2753 static DEVICE_ATTR(sgid,	    S_IRUGO, show_sgid,		   NULL);
2754 static DEVICE_ATTR(dgid,	    S_IRUGO, show_dgid,		   NULL);
2755 static DEVICE_ATTR(orig_dgid,	    S_IRUGO, show_orig_dgid,	   NULL);
2756 static DEVICE_ATTR(req_lim,         S_IRUGO, show_req_lim,         NULL);
2757 static DEVICE_ATTR(zero_req_lim,    S_IRUGO, show_zero_req_lim,	   NULL);
2758 static DEVICE_ATTR(local_ib_port,   S_IRUGO, show_local_ib_port,   NULL);
2759 static DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL);
2760 static DEVICE_ATTR(ch_count,        S_IRUGO, show_ch_count,        NULL);
2761 static DEVICE_ATTR(comp_vector,     S_IRUGO, show_comp_vector,     NULL);
2762 static DEVICE_ATTR(tl_retry_count,  S_IRUGO, show_tl_retry_count,  NULL);
2763 static DEVICE_ATTR(cmd_sg_entries,  S_IRUGO, show_cmd_sg_entries,  NULL);
2764 static DEVICE_ATTR(allow_ext_sg,    S_IRUGO, show_allow_ext_sg,    NULL);
2765 
2766 static struct device_attribute *srp_host_attrs[] = {
2767 	&dev_attr_id_ext,
2768 	&dev_attr_ioc_guid,
2769 	&dev_attr_service_id,
2770 	&dev_attr_pkey,
2771 	&dev_attr_sgid,
2772 	&dev_attr_dgid,
2773 	&dev_attr_orig_dgid,
2774 	&dev_attr_req_lim,
2775 	&dev_attr_zero_req_lim,
2776 	&dev_attr_local_ib_port,
2777 	&dev_attr_local_ib_device,
2778 	&dev_attr_ch_count,
2779 	&dev_attr_comp_vector,
2780 	&dev_attr_tl_retry_count,
2781 	&dev_attr_cmd_sg_entries,
2782 	&dev_attr_allow_ext_sg,
2783 	NULL
2784 };
2785 
2786 static struct scsi_host_template srp_template = {
2787 	.module				= THIS_MODULE,
2788 	.name				= "InfiniBand SRP initiator",
2789 	.proc_name			= DRV_NAME,
2790 	.slave_configure		= srp_slave_configure,
2791 	.info				= srp_target_info,
2792 	.queuecommand			= srp_queuecommand,
2793 	.change_queue_depth             = srp_change_queue_depth,
2794 	.eh_abort_handler		= srp_abort,
2795 	.eh_device_reset_handler	= srp_reset_device,
2796 	.eh_host_reset_handler		= srp_reset_host,
2797 	.skip_settle_delay		= true,
2798 	.sg_tablesize			= SRP_DEF_SG_TABLESIZE,
2799 	.can_queue			= SRP_DEFAULT_CMD_SQ_SIZE,
2800 	.this_id			= -1,
2801 	.cmd_per_lun			= SRP_DEFAULT_CMD_SQ_SIZE,
2802 	.use_clustering			= ENABLE_CLUSTERING,
2803 	.shost_attrs			= srp_host_attrs,
2804 	.track_queue_depth		= 1,
2805 };
2806 
2807 static int srp_sdev_count(struct Scsi_Host *host)
2808 {
2809 	struct scsi_device *sdev;
2810 	int c = 0;
2811 
2812 	shost_for_each_device(sdev, host)
2813 		c++;
2814 
2815 	return c;
2816 }
2817 
2818 /*
2819  * Return values:
2820  * < 0 upon failure. Caller is responsible for SRP target port cleanup.
2821  * 0 and target->state == SRP_TARGET_REMOVED if asynchronous target port
2822  *    removal has been scheduled.
2823  * 0 and target->state != SRP_TARGET_REMOVED upon success.
2824  */
2825 static int srp_add_target(struct srp_host *host, struct srp_target_port *target)
2826 {
2827 	struct srp_rport_identifiers ids;
2828 	struct srp_rport *rport;
2829 
2830 	target->state = SRP_TARGET_SCANNING;
2831 	sprintf(target->target_name, "SRP.T10:%016llX",
2832 		be64_to_cpu(target->id_ext));
2833 
2834 	if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dma_device))
2835 		return -ENODEV;
2836 
2837 	memcpy(ids.port_id, &target->id_ext, 8);
2838 	memcpy(ids.port_id + 8, &target->ioc_guid, 8);
2839 	ids.roles = SRP_RPORT_ROLE_TARGET;
2840 	rport = srp_rport_add(target->scsi_host, &ids);
2841 	if (IS_ERR(rport)) {
2842 		scsi_remove_host(target->scsi_host);
2843 		return PTR_ERR(rport);
2844 	}
2845 
2846 	rport->lld_data = target;
2847 	target->rport = rport;
2848 
2849 	spin_lock(&host->target_lock);
2850 	list_add_tail(&target->list, &host->target_list);
2851 	spin_unlock(&host->target_lock);
2852 
2853 	scsi_scan_target(&target->scsi_host->shost_gendev,
2854 			 0, target->scsi_id, SCAN_WILD_CARD, 0);
2855 
2856 	if (srp_connected_ch(target) < target->ch_count ||
2857 	    target->qp_in_error) {
2858 		shost_printk(KERN_INFO, target->scsi_host,
2859 			     PFX "SCSI scan failed - removing SCSI host\n");
2860 		srp_queue_remove_work(target);
2861 		goto out;
2862 	}
2863 
2864 	pr_debug(PFX "%s: SCSI scan succeeded - detected %d LUNs\n",
2865 		 dev_name(&target->scsi_host->shost_gendev),
2866 		 srp_sdev_count(target->scsi_host));
2867 
2868 	spin_lock_irq(&target->lock);
2869 	if (target->state == SRP_TARGET_SCANNING)
2870 		target->state = SRP_TARGET_LIVE;
2871 	spin_unlock_irq(&target->lock);
2872 
2873 out:
2874 	return 0;
2875 }
2876 
2877 static void srp_release_dev(struct device *dev)
2878 {
2879 	struct srp_host *host =
2880 		container_of(dev, struct srp_host, dev);
2881 
2882 	complete(&host->released);
2883 }
2884 
2885 static struct class srp_class = {
2886 	.name    = "infiniband_srp",
2887 	.dev_release = srp_release_dev
2888 };
2889 
2890 /**
2891  * srp_conn_unique() - check whether the connection to a target is unique
2892  * @host:   SRP host.
2893  * @target: SRP target port.
2894  */
2895 static bool srp_conn_unique(struct srp_host *host,
2896 			    struct srp_target_port *target)
2897 {
2898 	struct srp_target_port *t;
2899 	bool ret = false;
2900 
2901 	if (target->state == SRP_TARGET_REMOVED)
2902 		goto out;
2903 
2904 	ret = true;
2905 
2906 	spin_lock(&host->target_lock);
2907 	list_for_each_entry(t, &host->target_list, list) {
2908 		if (t != target &&
2909 		    target->id_ext == t->id_ext &&
2910 		    target->ioc_guid == t->ioc_guid &&
2911 		    target->initiator_ext == t->initiator_ext) {
2912 			ret = false;
2913 			break;
2914 		}
2915 	}
2916 	spin_unlock(&host->target_lock);
2917 
2918 out:
2919 	return ret;
2920 }
2921 
2922 /*
2923  * Target ports are added by writing
2924  *
2925  *     id_ext=<SRP ID ext>,ioc_guid=<SRP IOC GUID>,dgid=<dest GID>,
2926  *     pkey=<P_Key>,service_id=<service ID>
2927  *
2928  * to the add_target sysfs attribute.
2929  */
2930 enum {
2931 	SRP_OPT_ERR		= 0,
2932 	SRP_OPT_ID_EXT		= 1 << 0,
2933 	SRP_OPT_IOC_GUID	= 1 << 1,
2934 	SRP_OPT_DGID		= 1 << 2,
2935 	SRP_OPT_PKEY		= 1 << 3,
2936 	SRP_OPT_SERVICE_ID	= 1 << 4,
2937 	SRP_OPT_MAX_SECT	= 1 << 5,
2938 	SRP_OPT_MAX_CMD_PER_LUN	= 1 << 6,
2939 	SRP_OPT_IO_CLASS	= 1 << 7,
2940 	SRP_OPT_INITIATOR_EXT	= 1 << 8,
2941 	SRP_OPT_CMD_SG_ENTRIES	= 1 << 9,
2942 	SRP_OPT_ALLOW_EXT_SG	= 1 << 10,
2943 	SRP_OPT_SG_TABLESIZE	= 1 << 11,
2944 	SRP_OPT_COMP_VECTOR	= 1 << 12,
2945 	SRP_OPT_TL_RETRY_COUNT	= 1 << 13,
2946 	SRP_OPT_QUEUE_SIZE	= 1 << 14,
2947 	SRP_OPT_ALL		= (SRP_OPT_ID_EXT	|
2948 				   SRP_OPT_IOC_GUID	|
2949 				   SRP_OPT_DGID		|
2950 				   SRP_OPT_PKEY		|
2951 				   SRP_OPT_SERVICE_ID),
2952 };
2953 
2954 static const match_table_t srp_opt_tokens = {
2955 	{ SRP_OPT_ID_EXT,		"id_ext=%s" 		},
2956 	{ SRP_OPT_IOC_GUID,		"ioc_guid=%s" 		},
2957 	{ SRP_OPT_DGID,			"dgid=%s" 		},
2958 	{ SRP_OPT_PKEY,			"pkey=%x" 		},
2959 	{ SRP_OPT_SERVICE_ID,		"service_id=%s"		},
2960 	{ SRP_OPT_MAX_SECT,		"max_sect=%d" 		},
2961 	{ SRP_OPT_MAX_CMD_PER_LUN,	"max_cmd_per_lun=%d" 	},
2962 	{ SRP_OPT_IO_CLASS,		"io_class=%x"		},
2963 	{ SRP_OPT_INITIATOR_EXT,	"initiator_ext=%s"	},
2964 	{ SRP_OPT_CMD_SG_ENTRIES,	"cmd_sg_entries=%u"	},
2965 	{ SRP_OPT_ALLOW_EXT_SG,		"allow_ext_sg=%u"	},
2966 	{ SRP_OPT_SG_TABLESIZE,		"sg_tablesize=%u"	},
2967 	{ SRP_OPT_COMP_VECTOR,		"comp_vector=%u"	},
2968 	{ SRP_OPT_TL_RETRY_COUNT,	"tl_retry_count=%u"	},
2969 	{ SRP_OPT_QUEUE_SIZE,		"queue_size=%d"		},
2970 	{ SRP_OPT_ERR,			NULL 			}
2971 };
2972 
2973 static int srp_parse_options(const char *buf, struct srp_target_port *target)
2974 {
2975 	char *options, *sep_opt;
2976 	char *p;
2977 	char dgid[3];
2978 	substring_t args[MAX_OPT_ARGS];
2979 	int opt_mask = 0;
2980 	int token;
2981 	int ret = -EINVAL;
2982 	int i;
2983 
2984 	options = kstrdup(buf, GFP_KERNEL);
2985 	if (!options)
2986 		return -ENOMEM;
2987 
2988 	sep_opt = options;
2989 	while ((p = strsep(&sep_opt, ",\n")) != NULL) {
2990 		if (!*p)
2991 			continue;
2992 
2993 		token = match_token(p, srp_opt_tokens, args);
2994 		opt_mask |= token;
2995 
2996 		switch (token) {
2997 		case SRP_OPT_ID_EXT:
2998 			p = match_strdup(args);
2999 			if (!p) {
3000 				ret = -ENOMEM;
3001 				goto out;
3002 			}
3003 			target->id_ext = cpu_to_be64(simple_strtoull(p, NULL, 16));
3004 			kfree(p);
3005 			break;
3006 
3007 		case SRP_OPT_IOC_GUID:
3008 			p = match_strdup(args);
3009 			if (!p) {
3010 				ret = -ENOMEM;
3011 				goto out;
3012 			}
3013 			target->ioc_guid = cpu_to_be64(simple_strtoull(p, NULL, 16));
3014 			kfree(p);
3015 			break;
3016 
3017 		case SRP_OPT_DGID:
3018 			p = match_strdup(args);
3019 			if (!p) {
3020 				ret = -ENOMEM;
3021 				goto out;
3022 			}
3023 			if (strlen(p) != 32) {
3024 				pr_warn("bad dest GID parameter '%s'\n", p);
3025 				kfree(p);
3026 				goto out;
3027 			}
3028 
3029 			for (i = 0; i < 16; ++i) {
3030 				strlcpy(dgid, p + i * 2, sizeof(dgid));
3031 				if (sscanf(dgid, "%hhx",
3032 					   &target->orig_dgid.raw[i]) < 1) {
3033 					ret = -EINVAL;
3034 					kfree(p);
3035 					goto out;
3036 				}
3037 			}
3038 			kfree(p);
3039 			break;
3040 
3041 		case SRP_OPT_PKEY:
3042 			if (match_hex(args, &token)) {
3043 				pr_warn("bad P_Key parameter '%s'\n", p);
3044 				goto out;
3045 			}
3046 			target->pkey = cpu_to_be16(token);
3047 			break;
3048 
3049 		case SRP_OPT_SERVICE_ID:
3050 			p = match_strdup(args);
3051 			if (!p) {
3052 				ret = -ENOMEM;
3053 				goto out;
3054 			}
3055 			target->service_id = cpu_to_be64(simple_strtoull(p, NULL, 16));
3056 			kfree(p);
3057 			break;
3058 
3059 		case SRP_OPT_MAX_SECT:
3060 			if (match_int(args, &token)) {
3061 				pr_warn("bad max sect parameter '%s'\n", p);
3062 				goto out;
3063 			}
3064 			target->scsi_host->max_sectors = token;
3065 			break;
3066 
3067 		case SRP_OPT_QUEUE_SIZE:
3068 			if (match_int(args, &token) || token < 1) {
3069 				pr_warn("bad queue_size parameter '%s'\n", p);
3070 				goto out;
3071 			}
3072 			target->scsi_host->can_queue = token;
3073 			target->queue_size = token + SRP_RSP_SQ_SIZE +
3074 					     SRP_TSK_MGMT_SQ_SIZE;
3075 			if (!(opt_mask & SRP_OPT_MAX_CMD_PER_LUN))
3076 				target->scsi_host->cmd_per_lun = token;
3077 			break;
3078 
3079 		case SRP_OPT_MAX_CMD_PER_LUN:
3080 			if (match_int(args, &token) || token < 1) {
3081 				pr_warn("bad max cmd_per_lun parameter '%s'\n",
3082 					p);
3083 				goto out;
3084 			}
3085 			target->scsi_host->cmd_per_lun = token;
3086 			break;
3087 
3088 		case SRP_OPT_IO_CLASS:
3089 			if (match_hex(args, &token)) {
3090 				pr_warn("bad IO class parameter '%s'\n", p);
3091 				goto out;
3092 			}
3093 			if (token != SRP_REV10_IB_IO_CLASS &&
3094 			    token != SRP_REV16A_IB_IO_CLASS) {
3095 				pr_warn("unknown IO class parameter value %x specified (use %x or %x).\n",
3096 					token, SRP_REV10_IB_IO_CLASS,
3097 					SRP_REV16A_IB_IO_CLASS);
3098 				goto out;
3099 			}
3100 			target->io_class = token;
3101 			break;
3102 
3103 		case SRP_OPT_INITIATOR_EXT:
3104 			p = match_strdup(args);
3105 			if (!p) {
3106 				ret = -ENOMEM;
3107 				goto out;
3108 			}
3109 			target->initiator_ext = cpu_to_be64(simple_strtoull(p, NULL, 16));
3110 			kfree(p);
3111 			break;
3112 
3113 		case SRP_OPT_CMD_SG_ENTRIES:
3114 			if (match_int(args, &token) || token < 1 || token > 255) {
3115 				pr_warn("bad max cmd_sg_entries parameter '%s'\n",
3116 					p);
3117 				goto out;
3118 			}
3119 			target->cmd_sg_cnt = token;
3120 			break;
3121 
3122 		case SRP_OPT_ALLOW_EXT_SG:
3123 			if (match_int(args, &token)) {
3124 				pr_warn("bad allow_ext_sg parameter '%s'\n", p);
3125 				goto out;
3126 			}
3127 			target->allow_ext_sg = !!token;
3128 			break;
3129 
3130 		case SRP_OPT_SG_TABLESIZE:
3131 			if (match_int(args, &token) || token < 1 ||
3132 					token > SCSI_MAX_SG_CHAIN_SEGMENTS) {
3133 				pr_warn("bad max sg_tablesize parameter '%s'\n",
3134 					p);
3135 				goto out;
3136 			}
3137 			target->sg_tablesize = token;
3138 			break;
3139 
3140 		case SRP_OPT_COMP_VECTOR:
3141 			if (match_int(args, &token) || token < 0) {
3142 				pr_warn("bad comp_vector parameter '%s'\n", p);
3143 				goto out;
3144 			}
3145 			target->comp_vector = token;
3146 			break;
3147 
3148 		case SRP_OPT_TL_RETRY_COUNT:
3149 			if (match_int(args, &token) || token < 2 || token > 7) {
3150 				pr_warn("bad tl_retry_count parameter '%s' (must be a number between 2 and 7)\n",
3151 					p);
3152 				goto out;
3153 			}
3154 			target->tl_retry_count = token;
3155 			break;
3156 
3157 		default:
3158 			pr_warn("unknown parameter or missing value '%s' in target creation request\n",
3159 				p);
3160 			goto out;
3161 		}
3162 	}
3163 
3164 	if ((opt_mask & SRP_OPT_ALL) == SRP_OPT_ALL)
3165 		ret = 0;
3166 	else
3167 		for (i = 0; i < ARRAY_SIZE(srp_opt_tokens); ++i)
3168 			if ((srp_opt_tokens[i].token & SRP_OPT_ALL) &&
3169 			    !(srp_opt_tokens[i].token & opt_mask))
3170 				pr_warn("target creation request is missing parameter '%s'\n",
3171 					srp_opt_tokens[i].pattern);
3172 
3173 	if (target->scsi_host->cmd_per_lun > target->scsi_host->can_queue
3174 	    && (opt_mask & SRP_OPT_MAX_CMD_PER_LUN))
3175 		pr_warn("cmd_per_lun = %d > queue_size = %d\n",
3176 			target->scsi_host->cmd_per_lun,
3177 			target->scsi_host->can_queue);
3178 
3179 out:
3180 	kfree(options);
3181 	return ret;
3182 }
3183 
3184 static ssize_t srp_create_target(struct device *dev,
3185 				 struct device_attribute *attr,
3186 				 const char *buf, size_t count)
3187 {
3188 	struct srp_host *host =
3189 		container_of(dev, struct srp_host, dev);
3190 	struct Scsi_Host *target_host;
3191 	struct srp_target_port *target;
3192 	struct srp_rdma_ch *ch;
3193 	struct srp_device *srp_dev = host->srp_dev;
3194 	struct ib_device *ibdev = srp_dev->dev;
3195 	int ret, node_idx, node, cpu, i;
3196 	bool multich = false;
3197 
3198 	target_host = scsi_host_alloc(&srp_template,
3199 				      sizeof (struct srp_target_port));
3200 	if (!target_host)
3201 		return -ENOMEM;
3202 
3203 	target_host->transportt  = ib_srp_transport_template;
3204 	target_host->max_channel = 0;
3205 	target_host->max_id      = 1;
3206 	target_host->max_lun     = -1LL;
3207 	target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb;
3208 
3209 	target = host_to_target(target_host);
3210 
3211 	target->io_class	= SRP_REV16A_IB_IO_CLASS;
3212 	target->scsi_host	= target_host;
3213 	target->srp_host	= host;
3214 	target->lkey		= host->srp_dev->pd->local_dma_lkey;
3215 	target->global_mr	= host->srp_dev->global_mr;
3216 	target->cmd_sg_cnt	= cmd_sg_entries;
3217 	target->sg_tablesize	= indirect_sg_entries ? : cmd_sg_entries;
3218 	target->allow_ext_sg	= allow_ext_sg;
3219 	target->tl_retry_count	= 7;
3220 	target->queue_size	= SRP_DEFAULT_QUEUE_SIZE;
3221 
3222 	/*
3223 	 * Avoid that the SCSI host can be removed by srp_remove_target()
3224 	 * before this function returns.
3225 	 */
3226 	scsi_host_get(target->scsi_host);
3227 
3228 	mutex_lock(&host->add_target_mutex);
3229 
3230 	ret = srp_parse_options(buf, target);
3231 	if (ret)
3232 		goto out;
3233 
3234 	target->req_ring_size = target->queue_size - SRP_TSK_MGMT_SQ_SIZE;
3235 
3236 	if (!srp_conn_unique(target->srp_host, target)) {
3237 		shost_printk(KERN_INFO, target->scsi_host,
3238 			     PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;initiator_ext=%016llx\n",
3239 			     be64_to_cpu(target->id_ext),
3240 			     be64_to_cpu(target->ioc_guid),
3241 			     be64_to_cpu(target->initiator_ext));
3242 		ret = -EEXIST;
3243 		goto out;
3244 	}
3245 
3246 	if (!srp_dev->has_fmr && !srp_dev->has_fr && !target->allow_ext_sg &&
3247 	    target->cmd_sg_cnt < target->sg_tablesize) {
3248 		pr_warn("No MR pool and no external indirect descriptors, limiting sg_tablesize to cmd_sg_cnt\n");
3249 		target->sg_tablesize = target->cmd_sg_cnt;
3250 	}
3251 
3252 	target_host->sg_tablesize = target->sg_tablesize;
3253 	target->indirect_size = target->sg_tablesize *
3254 				sizeof (struct srp_direct_buf);
3255 	target->max_iu_len = sizeof (struct srp_cmd) +
3256 			     sizeof (struct srp_indirect_buf) +
3257 			     target->cmd_sg_cnt * sizeof (struct srp_direct_buf);
3258 
3259 	INIT_WORK(&target->tl_err_work, srp_tl_err_work);
3260 	INIT_WORK(&target->remove_work, srp_remove_work);
3261 	spin_lock_init(&target->lock);
3262 	ret = ib_query_gid(ibdev, host->port, 0, &target->sgid, NULL);
3263 	if (ret)
3264 		goto out;
3265 
3266 	ret = -ENOMEM;
3267 	target->ch_count = max_t(unsigned, num_online_nodes(),
3268 				 min(ch_count ? :
3269 				     min(4 * num_online_nodes(),
3270 					 ibdev->num_comp_vectors),
3271 				     num_online_cpus()));
3272 	target->ch = kcalloc(target->ch_count, sizeof(*target->ch),
3273 			     GFP_KERNEL);
3274 	if (!target->ch)
3275 		goto out;
3276 
3277 	node_idx = 0;
3278 	for_each_online_node(node) {
3279 		const int ch_start = (node_idx * target->ch_count /
3280 				      num_online_nodes());
3281 		const int ch_end = ((node_idx + 1) * target->ch_count /
3282 				    num_online_nodes());
3283 		const int cv_start = (node_idx * ibdev->num_comp_vectors /
3284 				      num_online_nodes() + target->comp_vector)
3285 				     % ibdev->num_comp_vectors;
3286 		const int cv_end = ((node_idx + 1) * ibdev->num_comp_vectors /
3287 				    num_online_nodes() + target->comp_vector)
3288 				   % ibdev->num_comp_vectors;
3289 		int cpu_idx = 0;
3290 
3291 		for_each_online_cpu(cpu) {
3292 			if (cpu_to_node(cpu) != node)
3293 				continue;
3294 			if (ch_start + cpu_idx >= ch_end)
3295 				continue;
3296 			ch = &target->ch[ch_start + cpu_idx];
3297 			ch->target = target;
3298 			ch->comp_vector = cv_start == cv_end ? cv_start :
3299 				cv_start + cpu_idx % (cv_end - cv_start);
3300 			spin_lock_init(&ch->lock);
3301 			INIT_LIST_HEAD(&ch->free_tx);
3302 			ret = srp_new_cm_id(ch);
3303 			if (ret)
3304 				goto err_disconnect;
3305 
3306 			ret = srp_create_ch_ib(ch);
3307 			if (ret)
3308 				goto err_disconnect;
3309 
3310 			ret = srp_alloc_req_data(ch);
3311 			if (ret)
3312 				goto err_disconnect;
3313 
3314 			ret = srp_connect_ch(ch, multich);
3315 			if (ret) {
3316 				shost_printk(KERN_ERR, target->scsi_host,
3317 					     PFX "Connection %d/%d failed\n",
3318 					     ch_start + cpu_idx,
3319 					     target->ch_count);
3320 				if (node_idx == 0 && cpu_idx == 0) {
3321 					goto err_disconnect;
3322 				} else {
3323 					srp_free_ch_ib(target, ch);
3324 					srp_free_req_data(target, ch);
3325 					target->ch_count = ch - target->ch;
3326 					goto connected;
3327 				}
3328 			}
3329 
3330 			multich = true;
3331 			cpu_idx++;
3332 		}
3333 		node_idx++;
3334 	}
3335 
3336 connected:
3337 	target->scsi_host->nr_hw_queues = target->ch_count;
3338 
3339 	ret = srp_add_target(host, target);
3340 	if (ret)
3341 		goto err_disconnect;
3342 
3343 	if (target->state != SRP_TARGET_REMOVED) {
3344 		shost_printk(KERN_DEBUG, target->scsi_host, PFX
3345 			     "new target: id_ext %016llx ioc_guid %016llx pkey %04x service_id %016llx sgid %pI6 dgid %pI6\n",
3346 			     be64_to_cpu(target->id_ext),
3347 			     be64_to_cpu(target->ioc_guid),
3348 			     be16_to_cpu(target->pkey),
3349 			     be64_to_cpu(target->service_id),
3350 			     target->sgid.raw, target->orig_dgid.raw);
3351 	}
3352 
3353 	ret = count;
3354 
3355 out:
3356 	mutex_unlock(&host->add_target_mutex);
3357 
3358 	scsi_host_put(target->scsi_host);
3359 	if (ret < 0)
3360 		scsi_host_put(target->scsi_host);
3361 
3362 	return ret;
3363 
3364 err_disconnect:
3365 	srp_disconnect_target(target);
3366 
3367 	for (i = 0; i < target->ch_count; i++) {
3368 		ch = &target->ch[i];
3369 		srp_free_ch_ib(target, ch);
3370 		srp_free_req_data(target, ch);
3371 	}
3372 
3373 	kfree(target->ch);
3374 	goto out;
3375 }
3376 
3377 static DEVICE_ATTR(add_target, S_IWUSR, NULL, srp_create_target);
3378 
3379 static ssize_t show_ibdev(struct device *dev, struct device_attribute *attr,
3380 			  char *buf)
3381 {
3382 	struct srp_host *host = container_of(dev, struct srp_host, dev);
3383 
3384 	return sprintf(buf, "%s\n", host->srp_dev->dev->name);
3385 }
3386 
3387 static DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL);
3388 
3389 static ssize_t show_port(struct device *dev, struct device_attribute *attr,
3390 			 char *buf)
3391 {
3392 	struct srp_host *host = container_of(dev, struct srp_host, dev);
3393 
3394 	return sprintf(buf, "%d\n", host->port);
3395 }
3396 
3397 static DEVICE_ATTR(port, S_IRUGO, show_port, NULL);
3398 
3399 static struct srp_host *srp_add_port(struct srp_device *device, u8 port)
3400 {
3401 	struct srp_host *host;
3402 
3403 	host = kzalloc(sizeof *host, GFP_KERNEL);
3404 	if (!host)
3405 		return NULL;
3406 
3407 	INIT_LIST_HEAD(&host->target_list);
3408 	spin_lock_init(&host->target_lock);
3409 	init_completion(&host->released);
3410 	mutex_init(&host->add_target_mutex);
3411 	host->srp_dev = device;
3412 	host->port = port;
3413 
3414 	host->dev.class = &srp_class;
3415 	host->dev.parent = device->dev->dma_device;
3416 	dev_set_name(&host->dev, "srp-%s-%d", device->dev->name, port);
3417 
3418 	if (device_register(&host->dev))
3419 		goto free_host;
3420 	if (device_create_file(&host->dev, &dev_attr_add_target))
3421 		goto err_class;
3422 	if (device_create_file(&host->dev, &dev_attr_ibdev))
3423 		goto err_class;
3424 	if (device_create_file(&host->dev, &dev_attr_port))
3425 		goto err_class;
3426 
3427 	return host;
3428 
3429 err_class:
3430 	device_unregister(&host->dev);
3431 
3432 free_host:
3433 	kfree(host);
3434 
3435 	return NULL;
3436 }
3437 
3438 static void srp_add_one(struct ib_device *device)
3439 {
3440 	struct srp_device *srp_dev;
3441 	struct srp_host *host;
3442 	int mr_page_shift, p;
3443 	u64 max_pages_per_mr;
3444 
3445 	srp_dev = kmalloc(sizeof *srp_dev, GFP_KERNEL);
3446 	if (!srp_dev)
3447 		return;
3448 
3449 	srp_dev->has_fmr = (device->alloc_fmr && device->dealloc_fmr &&
3450 			    device->map_phys_fmr && device->unmap_fmr);
3451 	srp_dev->has_fr = (device->attrs.device_cap_flags &
3452 			   IB_DEVICE_MEM_MGT_EXTENSIONS);
3453 	if (!srp_dev->has_fmr && !srp_dev->has_fr)
3454 		dev_warn(&device->dev, "neither FMR nor FR is supported\n");
3455 
3456 	srp_dev->use_fast_reg = (srp_dev->has_fr &&
3457 				 (!srp_dev->has_fmr || prefer_fr));
3458 	srp_dev->use_fmr = !srp_dev->use_fast_reg && srp_dev->has_fmr;
3459 
3460 	/*
3461 	 * Use the smallest page size supported by the HCA, down to a
3462 	 * minimum of 4096 bytes. We're unlikely to build large sglists
3463 	 * out of smaller entries.
3464 	 */
3465 	mr_page_shift		= max(12, ffs(device->attrs.page_size_cap) - 1);
3466 	srp_dev->mr_page_size	= 1 << mr_page_shift;
3467 	srp_dev->mr_page_mask	= ~((u64) srp_dev->mr_page_size - 1);
3468 	max_pages_per_mr	= device->attrs.max_mr_size;
3469 	do_div(max_pages_per_mr, srp_dev->mr_page_size);
3470 	srp_dev->max_pages_per_mr = min_t(u64, SRP_MAX_PAGES_PER_MR,
3471 					  max_pages_per_mr);
3472 	if (srp_dev->use_fast_reg) {
3473 		srp_dev->max_pages_per_mr =
3474 			min_t(u32, srp_dev->max_pages_per_mr,
3475 			      device->attrs.max_fast_reg_page_list_len);
3476 	}
3477 	srp_dev->mr_max_size	= srp_dev->mr_page_size *
3478 				   srp_dev->max_pages_per_mr;
3479 	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",
3480 		 device->name, mr_page_shift, device->attrs.max_mr_size,
3481 		 device->attrs.max_fast_reg_page_list_len,
3482 		 srp_dev->max_pages_per_mr, srp_dev->mr_max_size);
3483 
3484 	INIT_LIST_HEAD(&srp_dev->dev_list);
3485 
3486 	srp_dev->dev = device;
3487 	srp_dev->pd  = ib_alloc_pd(device);
3488 	if (IS_ERR(srp_dev->pd))
3489 		goto free_dev;
3490 
3491 	if (!register_always || (!srp_dev->has_fmr && !srp_dev->has_fr)) {
3492 		srp_dev->global_mr = ib_get_dma_mr(srp_dev->pd,
3493 						   IB_ACCESS_LOCAL_WRITE |
3494 						   IB_ACCESS_REMOTE_READ |
3495 						   IB_ACCESS_REMOTE_WRITE);
3496 		if (IS_ERR(srp_dev->global_mr))
3497 			goto err_pd;
3498 	} else {
3499 		srp_dev->global_mr = NULL;
3500 	}
3501 
3502 	for (p = rdma_start_port(device); p <= rdma_end_port(device); ++p) {
3503 		host = srp_add_port(srp_dev, p);
3504 		if (host)
3505 			list_add_tail(&host->list, &srp_dev->dev_list);
3506 	}
3507 
3508 	ib_set_client_data(device, &srp_client, srp_dev);
3509 	return;
3510 
3511 err_pd:
3512 	ib_dealloc_pd(srp_dev->pd);
3513 
3514 free_dev:
3515 	kfree(srp_dev);
3516 }
3517 
3518 static void srp_remove_one(struct ib_device *device, void *client_data)
3519 {
3520 	struct srp_device *srp_dev;
3521 	struct srp_host *host, *tmp_host;
3522 	struct srp_target_port *target;
3523 
3524 	srp_dev = client_data;
3525 	if (!srp_dev)
3526 		return;
3527 
3528 	list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) {
3529 		device_unregister(&host->dev);
3530 		/*
3531 		 * Wait for the sysfs entry to go away, so that no new
3532 		 * target ports can be created.
3533 		 */
3534 		wait_for_completion(&host->released);
3535 
3536 		/*
3537 		 * Remove all target ports.
3538 		 */
3539 		spin_lock(&host->target_lock);
3540 		list_for_each_entry(target, &host->target_list, list)
3541 			srp_queue_remove_work(target);
3542 		spin_unlock(&host->target_lock);
3543 
3544 		/*
3545 		 * Wait for tl_err and target port removal tasks.
3546 		 */
3547 		flush_workqueue(system_long_wq);
3548 		flush_workqueue(srp_remove_wq);
3549 
3550 		kfree(host);
3551 	}
3552 
3553 	if (srp_dev->global_mr)
3554 		ib_dereg_mr(srp_dev->global_mr);
3555 	ib_dealloc_pd(srp_dev->pd);
3556 
3557 	kfree(srp_dev);
3558 }
3559 
3560 static struct srp_function_template ib_srp_transport_functions = {
3561 	.has_rport_state	 = true,
3562 	.reset_timer_if_blocked	 = true,
3563 	.reconnect_delay	 = &srp_reconnect_delay,
3564 	.fast_io_fail_tmo	 = &srp_fast_io_fail_tmo,
3565 	.dev_loss_tmo		 = &srp_dev_loss_tmo,
3566 	.reconnect		 = srp_rport_reconnect,
3567 	.rport_delete		 = srp_rport_delete,
3568 	.terminate_rport_io	 = srp_terminate_io,
3569 };
3570 
3571 static int __init srp_init_module(void)
3572 {
3573 	int ret;
3574 
3575 	if (srp_sg_tablesize) {
3576 		pr_warn("srp_sg_tablesize is deprecated, please use cmd_sg_entries\n");
3577 		if (!cmd_sg_entries)
3578 			cmd_sg_entries = srp_sg_tablesize;
3579 	}
3580 
3581 	if (!cmd_sg_entries)
3582 		cmd_sg_entries = SRP_DEF_SG_TABLESIZE;
3583 
3584 	if (cmd_sg_entries > 255) {
3585 		pr_warn("Clamping cmd_sg_entries to 255\n");
3586 		cmd_sg_entries = 255;
3587 	}
3588 
3589 	if (!indirect_sg_entries)
3590 		indirect_sg_entries = cmd_sg_entries;
3591 	else if (indirect_sg_entries < cmd_sg_entries) {
3592 		pr_warn("Bumping up indirect_sg_entries to match cmd_sg_entries (%u)\n",
3593 			cmd_sg_entries);
3594 		indirect_sg_entries = cmd_sg_entries;
3595 	}
3596 
3597 	srp_remove_wq = create_workqueue("srp_remove");
3598 	if (!srp_remove_wq) {
3599 		ret = -ENOMEM;
3600 		goto out;
3601 	}
3602 
3603 	ret = -ENOMEM;
3604 	ib_srp_transport_template =
3605 		srp_attach_transport(&ib_srp_transport_functions);
3606 	if (!ib_srp_transport_template)
3607 		goto destroy_wq;
3608 
3609 	ret = class_register(&srp_class);
3610 	if (ret) {
3611 		pr_err("couldn't register class infiniband_srp\n");
3612 		goto release_tr;
3613 	}
3614 
3615 	ib_sa_register_client(&srp_sa_client);
3616 
3617 	ret = ib_register_client(&srp_client);
3618 	if (ret) {
3619 		pr_err("couldn't register IB client\n");
3620 		goto unreg_sa;
3621 	}
3622 
3623 out:
3624 	return ret;
3625 
3626 unreg_sa:
3627 	ib_sa_unregister_client(&srp_sa_client);
3628 	class_unregister(&srp_class);
3629 
3630 release_tr:
3631 	srp_release_transport(ib_srp_transport_template);
3632 
3633 destroy_wq:
3634 	destroy_workqueue(srp_remove_wq);
3635 	goto out;
3636 }
3637 
3638 static void __exit srp_cleanup_module(void)
3639 {
3640 	ib_unregister_client(&srp_client);
3641 	ib_sa_unregister_client(&srp_sa_client);
3642 	class_unregister(&srp_class);
3643 	srp_release_transport(ib_srp_transport_template);
3644 	destroy_workqueue(srp_remove_wq);
3645 }
3646 
3647 module_init(srp_init_module);
3648 module_exit(srp_cleanup_module);
3649