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