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