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