Merge tag 's390-5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
[sfrench/cifs-2.6.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_rport *rport = target->rport;
2344         struct srp_rdma_ch *ch;
2345         struct srp_request *req;
2346         struct srp_iu *iu;
2347         struct srp_cmd *cmd;
2348         struct ib_device *dev;
2349         unsigned long flags;
2350         u32 tag;
2351         u16 idx;
2352         int len, ret;
2353         const bool in_scsi_eh = !in_interrupt() && current == shost->ehandler;
2354
2355         /*
2356          * The SCSI EH thread is the only context from which srp_queuecommand()
2357          * can get invoked for blocked devices (SDEV_BLOCK /
2358          * SDEV_CREATED_BLOCK). Avoid racing with srp_reconnect_rport() by
2359          * locking the rport mutex if invoked from inside the SCSI EH.
2360          */
2361         if (in_scsi_eh)
2362                 mutex_lock(&rport->mutex);
2363
2364         scmnd->result = srp_chkready(target->rport);
2365         if (unlikely(scmnd->result))
2366                 goto err;
2367
2368         WARN_ON_ONCE(scmnd->request->tag < 0);
2369         tag = blk_mq_unique_tag(scmnd->request);
2370         ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)];
2371         idx = blk_mq_unique_tag_to_tag(tag);
2372         WARN_ONCE(idx >= target->req_ring_size, "%s: tag %#x: idx %d >= %d\n",
2373                   dev_name(&shost->shost_gendev), tag, idx,
2374                   target->req_ring_size);
2375
2376         spin_lock_irqsave(&ch->lock, flags);
2377         iu = __srp_get_tx_iu(ch, SRP_IU_CMD);
2378         spin_unlock_irqrestore(&ch->lock, flags);
2379
2380         if (!iu)
2381                 goto err;
2382
2383         req = &ch->req_ring[idx];
2384         dev = target->srp_host->srp_dev->dev;
2385         ib_dma_sync_single_for_cpu(dev, iu->dma, ch->max_it_iu_len,
2386                                    DMA_TO_DEVICE);
2387
2388         scmnd->host_scribble = (void *) req;
2389
2390         cmd = iu->buf;
2391         memset(cmd, 0, sizeof *cmd);
2392
2393         cmd->opcode = SRP_CMD;
2394         int_to_scsilun(scmnd->device->lun, &cmd->lun);
2395         cmd->tag    = tag;
2396         memcpy(cmd->cdb, scmnd->cmnd, scmnd->cmd_len);
2397         if (unlikely(scmnd->cmd_len > sizeof(cmd->cdb))) {
2398                 cmd->add_cdb_len = round_up(scmnd->cmd_len - sizeof(cmd->cdb),
2399                                             4);
2400                 if (WARN_ON_ONCE(cmd->add_cdb_len > SRP_MAX_ADD_CDB_LEN))
2401                         goto err_iu;
2402         }
2403
2404         req->scmnd    = scmnd;
2405         req->cmd      = iu;
2406
2407         len = srp_map_data(scmnd, ch, req);
2408         if (len < 0) {
2409                 shost_printk(KERN_ERR, target->scsi_host,
2410                              PFX "Failed to map data (%d)\n", len);
2411                 /*
2412                  * If we ran out of memory descriptors (-ENOMEM) because an
2413                  * application is queuing many requests with more than
2414                  * max_pages_per_mr sg-list elements, tell the SCSI mid-layer
2415                  * to reduce queue depth temporarily.
2416                  */
2417                 scmnd->result = len == -ENOMEM ?
2418                         DID_OK << 16 | QUEUE_FULL << 1 : DID_ERROR << 16;
2419                 goto err_iu;
2420         }
2421
2422         ib_dma_sync_single_for_device(dev, iu->dma, ch->max_it_iu_len,
2423                                       DMA_TO_DEVICE);
2424
2425         if (srp_post_send(ch, iu, len)) {
2426                 shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n");
2427                 scmnd->result = DID_ERROR << 16;
2428                 goto err_unmap;
2429         }
2430
2431         ret = 0;
2432
2433 unlock_rport:
2434         if (in_scsi_eh)
2435                 mutex_unlock(&rport->mutex);
2436
2437         return ret;
2438
2439 err_unmap:
2440         srp_unmap_data(scmnd, ch, req);
2441
2442 err_iu:
2443         srp_put_tx_iu(ch, iu, SRP_IU_CMD);
2444
2445         /*
2446          * Avoid that the loops that iterate over the request ring can
2447          * encounter a dangling SCSI command pointer.
2448          */
2449         req->scmnd = NULL;
2450
2451 err:
2452         if (scmnd->result) {
2453                 scmnd->scsi_done(scmnd);
2454                 ret = 0;
2455         } else {
2456                 ret = SCSI_MLQUEUE_HOST_BUSY;
2457         }
2458
2459         goto unlock_rport;
2460 }
2461
2462 /*
2463  * Note: the resources allocated in this function are freed in
2464  * srp_free_ch_ib().
2465  */
2466 static int srp_alloc_iu_bufs(struct srp_rdma_ch *ch)
2467 {
2468         struct srp_target_port *target = ch->target;
2469         int i;
2470
2471         ch->rx_ring = kcalloc(target->queue_size, sizeof(*ch->rx_ring),
2472                               GFP_KERNEL);
2473         if (!ch->rx_ring)
2474                 goto err_no_ring;
2475         ch->tx_ring = kcalloc(target->queue_size, sizeof(*ch->tx_ring),
2476                               GFP_KERNEL);
2477         if (!ch->tx_ring)
2478                 goto err_no_ring;
2479
2480         for (i = 0; i < target->queue_size; ++i) {
2481                 ch->rx_ring[i] = srp_alloc_iu(target->srp_host,
2482                                               ch->max_ti_iu_len,
2483                                               GFP_KERNEL, DMA_FROM_DEVICE);
2484                 if (!ch->rx_ring[i])
2485                         goto err;
2486         }
2487
2488         for (i = 0; i < target->queue_size; ++i) {
2489                 ch->tx_ring[i] = srp_alloc_iu(target->srp_host,
2490                                               ch->max_it_iu_len,
2491                                               GFP_KERNEL, DMA_TO_DEVICE);
2492                 if (!ch->tx_ring[i])
2493                         goto err;
2494
2495                 list_add(&ch->tx_ring[i]->list, &ch->free_tx);
2496         }
2497
2498         return 0;
2499
2500 err:
2501         for (i = 0; i < target->queue_size; ++i) {
2502                 srp_free_iu(target->srp_host, ch->rx_ring[i]);
2503                 srp_free_iu(target->srp_host, ch->tx_ring[i]);
2504         }
2505
2506
2507 err_no_ring:
2508         kfree(ch->tx_ring);
2509         ch->tx_ring = NULL;
2510         kfree(ch->rx_ring);
2511         ch->rx_ring = NULL;
2512
2513         return -ENOMEM;
2514 }
2515
2516 static uint32_t srp_compute_rq_tmo(struct ib_qp_attr *qp_attr, int attr_mask)
2517 {
2518         uint64_t T_tr_ns, max_compl_time_ms;
2519         uint32_t rq_tmo_jiffies;
2520
2521         /*
2522          * According to section 11.2.4.2 in the IBTA spec (Modify Queue Pair,
2523          * table 91), both the QP timeout and the retry count have to be set
2524          * for RC QP's during the RTR to RTS transition.
2525          */
2526         WARN_ON_ONCE((attr_mask & (IB_QP_TIMEOUT | IB_QP_RETRY_CNT)) !=
2527                      (IB_QP_TIMEOUT | IB_QP_RETRY_CNT));
2528
2529         /*
2530          * Set target->rq_tmo_jiffies to one second more than the largest time
2531          * it can take before an error completion is generated. See also
2532          * C9-140..142 in the IBTA spec for more information about how to
2533          * convert the QP Local ACK Timeout value to nanoseconds.
2534          */
2535         T_tr_ns = 4096 * (1ULL << qp_attr->timeout);
2536         max_compl_time_ms = qp_attr->retry_cnt * 4 * T_tr_ns;
2537         do_div(max_compl_time_ms, NSEC_PER_MSEC);
2538         rq_tmo_jiffies = msecs_to_jiffies(max_compl_time_ms + 1000);
2539
2540         return rq_tmo_jiffies;
2541 }
2542
2543 static void srp_cm_rep_handler(struct ib_cm_id *cm_id,
2544                                const struct srp_login_rsp *lrsp,
2545                                struct srp_rdma_ch *ch)
2546 {
2547         struct srp_target_port *target = ch->target;
2548         struct ib_qp_attr *qp_attr = NULL;
2549         int attr_mask = 0;
2550         int ret = 0;
2551         int i;
2552
2553         if (lrsp->opcode == SRP_LOGIN_RSP) {
2554                 ch->max_ti_iu_len = be32_to_cpu(lrsp->max_ti_iu_len);
2555                 ch->req_lim       = be32_to_cpu(lrsp->req_lim_delta);
2556                 ch->use_imm_data  = lrsp->rsp_flags & SRP_LOGIN_RSP_IMMED_SUPP;
2557                 ch->max_it_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt,
2558                                                       ch->use_imm_data);
2559                 WARN_ON_ONCE(ch->max_it_iu_len >
2560                              be32_to_cpu(lrsp->max_it_iu_len));
2561
2562                 if (ch->use_imm_data)
2563                         shost_printk(KERN_DEBUG, target->scsi_host,
2564                                      PFX "using immediate data\n");
2565
2566                 /*
2567                  * Reserve credits for task management so we don't
2568                  * bounce requests back to the SCSI mid-layer.
2569                  */
2570                 target->scsi_host->can_queue
2571                         = min(ch->req_lim - SRP_TSK_MGMT_SQ_SIZE,
2572                               target->scsi_host->can_queue);
2573                 target->scsi_host->cmd_per_lun
2574                         = min_t(int, target->scsi_host->can_queue,
2575                                 target->scsi_host->cmd_per_lun);
2576         } else {
2577                 shost_printk(KERN_WARNING, target->scsi_host,
2578                              PFX "Unhandled RSP opcode %#x\n", lrsp->opcode);
2579                 ret = -ECONNRESET;
2580                 goto error;
2581         }
2582
2583         if (!ch->rx_ring) {
2584                 ret = srp_alloc_iu_bufs(ch);
2585                 if (ret)
2586                         goto error;
2587         }
2588
2589         for (i = 0; i < target->queue_size; i++) {
2590                 struct srp_iu *iu = ch->rx_ring[i];
2591
2592                 ret = srp_post_recv(ch, iu);
2593                 if (ret)
2594                         goto error;
2595         }
2596
2597         if (!target->using_rdma_cm) {
2598                 ret = -ENOMEM;
2599                 qp_attr = kmalloc(sizeof(*qp_attr), GFP_KERNEL);
2600                 if (!qp_attr)
2601                         goto error;
2602
2603                 qp_attr->qp_state = IB_QPS_RTR;
2604                 ret = ib_cm_init_qp_attr(cm_id, qp_attr, &attr_mask);
2605                 if (ret)
2606                         goto error_free;
2607
2608                 ret = ib_modify_qp(ch->qp, qp_attr, attr_mask);
2609                 if (ret)
2610                         goto error_free;
2611
2612                 qp_attr->qp_state = IB_QPS_RTS;
2613                 ret = ib_cm_init_qp_attr(cm_id, qp_attr, &attr_mask);
2614                 if (ret)
2615                         goto error_free;
2616
2617                 target->rq_tmo_jiffies = srp_compute_rq_tmo(qp_attr, attr_mask);
2618
2619                 ret = ib_modify_qp(ch->qp, qp_attr, attr_mask);
2620                 if (ret)
2621                         goto error_free;
2622
2623                 ret = ib_send_cm_rtu(cm_id, NULL, 0);
2624         }
2625
2626 error_free:
2627         kfree(qp_attr);
2628
2629 error:
2630         ch->status = ret;
2631 }
2632
2633 static void srp_ib_cm_rej_handler(struct ib_cm_id *cm_id,
2634                                   const struct ib_cm_event *event,
2635                                   struct srp_rdma_ch *ch)
2636 {
2637         struct srp_target_port *target = ch->target;
2638         struct Scsi_Host *shost = target->scsi_host;
2639         struct ib_class_port_info *cpi;
2640         int opcode;
2641         u16 dlid;
2642
2643         switch (event->param.rej_rcvd.reason) {
2644         case IB_CM_REJ_PORT_CM_REDIRECT:
2645                 cpi = event->param.rej_rcvd.ari;
2646                 dlid = be16_to_cpu(cpi->redirect_lid);
2647                 sa_path_set_dlid(&ch->ib_cm.path, dlid);
2648                 ch->ib_cm.path.pkey = cpi->redirect_pkey;
2649                 cm_id->remote_cm_qpn = be32_to_cpu(cpi->redirect_qp) & 0x00ffffff;
2650                 memcpy(ch->ib_cm.path.dgid.raw, cpi->redirect_gid, 16);
2651
2652                 ch->status = dlid ? SRP_DLID_REDIRECT : SRP_PORT_REDIRECT;
2653                 break;
2654
2655         case IB_CM_REJ_PORT_REDIRECT:
2656                 if (srp_target_is_topspin(target)) {
2657                         union ib_gid *dgid = &ch->ib_cm.path.dgid;
2658
2659                         /*
2660                          * Topspin/Cisco SRP gateways incorrectly send
2661                          * reject reason code 25 when they mean 24
2662                          * (port redirect).
2663                          */
2664                         memcpy(dgid->raw, event->param.rej_rcvd.ari, 16);
2665
2666                         shost_printk(KERN_DEBUG, shost,
2667                                      PFX "Topspin/Cisco redirect to target port GID %016llx%016llx\n",
2668                                      be64_to_cpu(dgid->global.subnet_prefix),
2669                                      be64_to_cpu(dgid->global.interface_id));
2670
2671                         ch->status = SRP_PORT_REDIRECT;
2672                 } else {
2673                         shost_printk(KERN_WARNING, shost,
2674                                      "  REJ reason: IB_CM_REJ_PORT_REDIRECT\n");
2675                         ch->status = -ECONNRESET;
2676                 }
2677                 break;
2678
2679         case IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID:
2680                 shost_printk(KERN_WARNING, shost,
2681                             "  REJ reason: IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID\n");
2682                 ch->status = -ECONNRESET;
2683                 break;
2684
2685         case IB_CM_REJ_CONSUMER_DEFINED:
2686                 opcode = *(u8 *) event->private_data;
2687                 if (opcode == SRP_LOGIN_REJ) {
2688                         struct srp_login_rej *rej = event->private_data;
2689                         u32 reason = be32_to_cpu(rej->reason);
2690
2691                         if (reason == SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE)
2692                                 shost_printk(KERN_WARNING, shost,
2693                                              PFX "SRP_LOGIN_REJ: requested max_it_iu_len too large\n");
2694                         else
2695                                 shost_printk(KERN_WARNING, shost, PFX
2696                                              "SRP LOGIN from %pI6 to %pI6 REJECTED, reason 0x%08x\n",
2697                                              target->sgid.raw,
2698                                              target->ib_cm.orig_dgid.raw,
2699                                              reason);
2700                 } else
2701                         shost_printk(KERN_WARNING, shost,
2702                                      "  REJ reason: IB_CM_REJ_CONSUMER_DEFINED,"
2703                                      " opcode 0x%02x\n", opcode);
2704                 ch->status = -ECONNRESET;
2705                 break;
2706
2707         case IB_CM_REJ_STALE_CONN:
2708                 shost_printk(KERN_WARNING, shost, "  REJ reason: stale connection\n");
2709                 ch->status = SRP_STALE_CONN;
2710                 break;
2711
2712         default:
2713                 shost_printk(KERN_WARNING, shost, "  REJ reason 0x%x\n",
2714                              event->param.rej_rcvd.reason);
2715                 ch->status = -ECONNRESET;
2716         }
2717 }
2718
2719 static int srp_ib_cm_handler(struct ib_cm_id *cm_id,
2720                              const struct ib_cm_event *event)
2721 {
2722         struct srp_rdma_ch *ch = cm_id->context;
2723         struct srp_target_port *target = ch->target;
2724         int comp = 0;
2725
2726         switch (event->event) {
2727         case IB_CM_REQ_ERROR:
2728                 shost_printk(KERN_DEBUG, target->scsi_host,
2729                              PFX "Sending CM REQ failed\n");
2730                 comp = 1;
2731                 ch->status = -ECONNRESET;
2732                 break;
2733
2734         case IB_CM_REP_RECEIVED:
2735                 comp = 1;
2736                 srp_cm_rep_handler(cm_id, event->private_data, ch);
2737                 break;
2738
2739         case IB_CM_REJ_RECEIVED:
2740                 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n");
2741                 comp = 1;
2742
2743                 srp_ib_cm_rej_handler(cm_id, event, ch);
2744                 break;
2745
2746         case IB_CM_DREQ_RECEIVED:
2747                 shost_printk(KERN_WARNING, target->scsi_host,
2748                              PFX "DREQ received - connection closed\n");
2749                 ch->connected = false;
2750                 if (ib_send_cm_drep(cm_id, NULL, 0))
2751                         shost_printk(KERN_ERR, target->scsi_host,
2752                                      PFX "Sending CM DREP failed\n");
2753                 queue_work(system_long_wq, &target->tl_err_work);
2754                 break;
2755
2756         case IB_CM_TIMEWAIT_EXIT:
2757                 shost_printk(KERN_ERR, target->scsi_host,
2758                              PFX "connection closed\n");
2759                 comp = 1;
2760
2761                 ch->status = 0;
2762                 break;
2763
2764         case IB_CM_MRA_RECEIVED:
2765         case IB_CM_DREQ_ERROR:
2766         case IB_CM_DREP_RECEIVED:
2767                 break;
2768
2769         default:
2770                 shost_printk(KERN_WARNING, target->scsi_host,
2771                              PFX "Unhandled CM event %d\n", event->event);
2772                 break;
2773         }
2774
2775         if (comp)
2776                 complete(&ch->done);
2777
2778         return 0;
2779 }
2780
2781 static void srp_rdma_cm_rej_handler(struct srp_rdma_ch *ch,
2782                                     struct rdma_cm_event *event)
2783 {
2784         struct srp_target_port *target = ch->target;
2785         struct Scsi_Host *shost = target->scsi_host;
2786         int opcode;
2787
2788         switch (event->status) {
2789         case IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID:
2790                 shost_printk(KERN_WARNING, shost,
2791                             "  REJ reason: IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID\n");
2792                 ch->status = -ECONNRESET;
2793                 break;
2794
2795         case IB_CM_REJ_CONSUMER_DEFINED:
2796                 opcode = *(u8 *) event->param.conn.private_data;
2797                 if (opcode == SRP_LOGIN_REJ) {
2798                         struct srp_login_rej *rej =
2799                                 (struct srp_login_rej *)
2800                                 event->param.conn.private_data;
2801                         u32 reason = be32_to_cpu(rej->reason);
2802
2803                         if (reason == SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE)
2804                                 shost_printk(KERN_WARNING, shost,
2805                                              PFX "SRP_LOGIN_REJ: requested max_it_iu_len too large\n");
2806                         else
2807                                 shost_printk(KERN_WARNING, shost,
2808                                             PFX "SRP LOGIN REJECTED, reason 0x%08x\n", reason);
2809                 } else {
2810                         shost_printk(KERN_WARNING, shost,
2811                                      "  REJ reason: IB_CM_REJ_CONSUMER_DEFINED, opcode 0x%02x\n",
2812                                      opcode);
2813                 }
2814                 ch->status = -ECONNRESET;
2815                 break;
2816
2817         case IB_CM_REJ_STALE_CONN:
2818                 shost_printk(KERN_WARNING, shost,
2819                              "  REJ reason: stale connection\n");
2820                 ch->status = SRP_STALE_CONN;
2821                 break;
2822
2823         default:
2824                 shost_printk(KERN_WARNING, shost, "  REJ reason 0x%x\n",
2825                              event->status);
2826                 ch->status = -ECONNRESET;
2827                 break;
2828         }
2829 }
2830
2831 static int srp_rdma_cm_handler(struct rdma_cm_id *cm_id,
2832                                struct rdma_cm_event *event)
2833 {
2834         struct srp_rdma_ch *ch = cm_id->context;
2835         struct srp_target_port *target = ch->target;
2836         int comp = 0;
2837
2838         switch (event->event) {
2839         case RDMA_CM_EVENT_ADDR_RESOLVED:
2840                 ch->status = 0;
2841                 comp = 1;
2842                 break;
2843
2844         case RDMA_CM_EVENT_ADDR_ERROR:
2845                 ch->status = -ENXIO;
2846                 comp = 1;
2847                 break;
2848
2849         case RDMA_CM_EVENT_ROUTE_RESOLVED:
2850                 ch->status = 0;
2851                 comp = 1;
2852                 break;
2853
2854         case RDMA_CM_EVENT_ROUTE_ERROR:
2855         case RDMA_CM_EVENT_UNREACHABLE:
2856                 ch->status = -EHOSTUNREACH;
2857                 comp = 1;
2858                 break;
2859
2860         case RDMA_CM_EVENT_CONNECT_ERROR:
2861                 shost_printk(KERN_DEBUG, target->scsi_host,
2862                              PFX "Sending CM REQ failed\n");
2863                 comp = 1;
2864                 ch->status = -ECONNRESET;
2865                 break;
2866
2867         case RDMA_CM_EVENT_ESTABLISHED:
2868                 comp = 1;
2869                 srp_cm_rep_handler(NULL, event->param.conn.private_data, ch);
2870                 break;
2871
2872         case RDMA_CM_EVENT_REJECTED:
2873                 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n");
2874                 comp = 1;
2875
2876                 srp_rdma_cm_rej_handler(ch, event);
2877                 break;
2878
2879         case RDMA_CM_EVENT_DISCONNECTED:
2880                 if (ch->connected) {
2881                         shost_printk(KERN_WARNING, target->scsi_host,
2882                                      PFX "received DREQ\n");
2883                         rdma_disconnect(ch->rdma_cm.cm_id);
2884                         comp = 1;
2885                         ch->status = 0;
2886                         queue_work(system_long_wq, &target->tl_err_work);
2887                 }
2888                 break;
2889
2890         case RDMA_CM_EVENT_TIMEWAIT_EXIT:
2891                 shost_printk(KERN_ERR, target->scsi_host,
2892                              PFX "connection closed\n");
2893
2894                 comp = 1;
2895                 ch->status = 0;
2896                 break;
2897
2898         default:
2899                 shost_printk(KERN_WARNING, target->scsi_host,
2900                              PFX "Unhandled CM event %d\n", event->event);
2901                 break;
2902         }
2903
2904         if (comp)
2905                 complete(&ch->done);
2906
2907         return 0;
2908 }
2909
2910 /**
2911  * srp_change_queue_depth - setting device queue depth
2912  * @sdev: scsi device struct
2913  * @qdepth: requested queue depth
2914  *
2915  * Returns queue depth.
2916  */
2917 static int
2918 srp_change_queue_depth(struct scsi_device *sdev, int qdepth)
2919 {
2920         if (!sdev->tagged_supported)
2921                 qdepth = 1;
2922         return scsi_change_queue_depth(sdev, qdepth);
2923 }
2924
2925 static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, u64 lun,
2926                              u8 func, u8 *status)
2927 {
2928         struct srp_target_port *target = ch->target;
2929         struct srp_rport *rport = target->rport;
2930         struct ib_device *dev = target->srp_host->srp_dev->dev;
2931         struct srp_iu *iu;
2932         struct srp_tsk_mgmt *tsk_mgmt;
2933         int res;
2934
2935         if (!ch->connected || target->qp_in_error)
2936                 return -1;
2937
2938         /*
2939          * Lock the rport mutex to avoid that srp_create_ch_ib() is
2940          * invoked while a task management function is being sent.
2941          */
2942         mutex_lock(&rport->mutex);
2943         spin_lock_irq(&ch->lock);
2944         iu = __srp_get_tx_iu(ch, SRP_IU_TSK_MGMT);
2945         spin_unlock_irq(&ch->lock);
2946
2947         if (!iu) {
2948                 mutex_unlock(&rport->mutex);
2949
2950                 return -1;
2951         }
2952
2953         iu->num_sge = 1;
2954
2955         ib_dma_sync_single_for_cpu(dev, iu->dma, sizeof *tsk_mgmt,
2956                                    DMA_TO_DEVICE);
2957         tsk_mgmt = iu->buf;
2958         memset(tsk_mgmt, 0, sizeof *tsk_mgmt);
2959
2960         tsk_mgmt->opcode        = SRP_TSK_MGMT;
2961         int_to_scsilun(lun, &tsk_mgmt->lun);
2962         tsk_mgmt->tsk_mgmt_func = func;
2963         tsk_mgmt->task_tag      = req_tag;
2964
2965         spin_lock_irq(&ch->lock);
2966         ch->tsk_mgmt_tag = (ch->tsk_mgmt_tag + 1) | SRP_TAG_TSK_MGMT;
2967         tsk_mgmt->tag = ch->tsk_mgmt_tag;
2968         spin_unlock_irq(&ch->lock);
2969
2970         init_completion(&ch->tsk_mgmt_done);
2971
2972         ib_dma_sync_single_for_device(dev, iu->dma, sizeof *tsk_mgmt,
2973                                       DMA_TO_DEVICE);
2974         if (srp_post_send(ch, iu, sizeof(*tsk_mgmt))) {
2975                 srp_put_tx_iu(ch, iu, SRP_IU_TSK_MGMT);
2976                 mutex_unlock(&rport->mutex);
2977
2978                 return -1;
2979         }
2980         res = wait_for_completion_timeout(&ch->tsk_mgmt_done,
2981                                         msecs_to_jiffies(SRP_ABORT_TIMEOUT_MS));
2982         if (res > 0 && status)
2983                 *status = ch->tsk_mgmt_status;
2984         mutex_unlock(&rport->mutex);
2985
2986         WARN_ON_ONCE(res < 0);
2987
2988         return res > 0 ? 0 : -1;
2989 }
2990
2991 static int srp_abort(struct scsi_cmnd *scmnd)
2992 {
2993         struct srp_target_port *target = host_to_target(scmnd->device->host);
2994         struct srp_request *req = (struct srp_request *) scmnd->host_scribble;
2995         u32 tag;
2996         u16 ch_idx;
2997         struct srp_rdma_ch *ch;
2998         int ret;
2999
3000         shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n");
3001
3002         if (!req)
3003                 return SUCCESS;
3004         tag = blk_mq_unique_tag(scmnd->request);
3005         ch_idx = blk_mq_unique_tag_to_hwq(tag);
3006         if (WARN_ON_ONCE(ch_idx >= target->ch_count))
3007                 return SUCCESS;
3008         ch = &target->ch[ch_idx];
3009         if (!srp_claim_req(ch, req, NULL, scmnd))
3010                 return SUCCESS;
3011         shost_printk(KERN_ERR, target->scsi_host,
3012                      "Sending SRP abort for tag %#x\n", tag);
3013         if (srp_send_tsk_mgmt(ch, tag, scmnd->device->lun,
3014                               SRP_TSK_ABORT_TASK, NULL) == 0)
3015                 ret = SUCCESS;
3016         else if (target->rport->state == SRP_RPORT_LOST)
3017                 ret = FAST_IO_FAIL;
3018         else
3019                 ret = FAILED;
3020         if (ret == SUCCESS) {
3021                 srp_free_req(ch, req, scmnd, 0);
3022                 scmnd->result = DID_ABORT << 16;
3023                 scmnd->scsi_done(scmnd);
3024         }
3025
3026         return ret;
3027 }
3028
3029 static int srp_reset_device(struct scsi_cmnd *scmnd)
3030 {
3031         struct srp_target_port *target = host_to_target(scmnd->device->host);
3032         struct srp_rdma_ch *ch;
3033         u8 status;
3034
3035         shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
3036
3037         ch = &target->ch[0];
3038         if (srp_send_tsk_mgmt(ch, SRP_TAG_NO_REQ, scmnd->device->lun,
3039                               SRP_TSK_LUN_RESET, &status))
3040                 return FAILED;
3041         if (status)
3042                 return FAILED;
3043
3044         return SUCCESS;
3045 }
3046
3047 static int srp_reset_host(struct scsi_cmnd *scmnd)
3048 {
3049         struct srp_target_port *target = host_to_target(scmnd->device->host);
3050
3051         shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host called\n");
3052
3053         return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED;
3054 }
3055
3056 static int srp_target_alloc(struct scsi_target *starget)
3057 {
3058         struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
3059         struct srp_target_port *target = host_to_target(shost);
3060
3061         if (target->target_can_queue)
3062                 starget->can_queue = target->target_can_queue;
3063         return 0;
3064 }
3065
3066 static int srp_slave_alloc(struct scsi_device *sdev)
3067 {
3068         struct Scsi_Host *shost = sdev->host;
3069         struct srp_target_port *target = host_to_target(shost);
3070         struct srp_device *srp_dev = target->srp_host->srp_dev;
3071         struct ib_device *ibdev = srp_dev->dev;
3072
3073         if (!(ibdev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
3074                 blk_queue_virt_boundary(sdev->request_queue,
3075                                         ~srp_dev->mr_page_mask);
3076
3077         return 0;
3078 }
3079
3080 static int srp_slave_configure(struct scsi_device *sdev)
3081 {
3082         struct Scsi_Host *shost = sdev->host;
3083         struct srp_target_port *target = host_to_target(shost);
3084         struct request_queue *q = sdev->request_queue;
3085         unsigned long timeout;
3086
3087         if (sdev->type == TYPE_DISK) {
3088                 timeout = max_t(unsigned, 30 * HZ, target->rq_tmo_jiffies);
3089                 blk_queue_rq_timeout(q, timeout);
3090         }
3091
3092         return 0;
3093 }
3094
3095 static ssize_t show_id_ext(struct device *dev, struct device_attribute *attr,
3096                            char *buf)
3097 {
3098         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3099
3100         return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->id_ext));
3101 }
3102
3103 static ssize_t show_ioc_guid(struct device *dev, struct device_attribute *attr,
3104                              char *buf)
3105 {
3106         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3107
3108         return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->ioc_guid));
3109 }
3110
3111 static ssize_t show_service_id(struct device *dev,
3112                                struct device_attribute *attr, char *buf)
3113 {
3114         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3115
3116         if (target->using_rdma_cm)
3117                 return -ENOENT;
3118         return sprintf(buf, "0x%016llx\n",
3119                        be64_to_cpu(target->ib_cm.service_id));
3120 }
3121
3122 static ssize_t show_pkey(struct device *dev, struct device_attribute *attr,
3123                          char *buf)
3124 {
3125         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3126
3127         if (target->using_rdma_cm)
3128                 return -ENOENT;
3129         return sprintf(buf, "0x%04x\n", be16_to_cpu(target->ib_cm.pkey));
3130 }
3131
3132 static ssize_t show_sgid(struct device *dev, struct device_attribute *attr,
3133                          char *buf)
3134 {
3135         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3136
3137         return sprintf(buf, "%pI6\n", target->sgid.raw);
3138 }
3139
3140 static ssize_t show_dgid(struct device *dev, struct device_attribute *attr,
3141                          char *buf)
3142 {
3143         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3144         struct srp_rdma_ch *ch = &target->ch[0];
3145
3146         if (target->using_rdma_cm)
3147                 return -ENOENT;
3148         return sprintf(buf, "%pI6\n", ch->ib_cm.path.dgid.raw);
3149 }
3150
3151 static ssize_t show_orig_dgid(struct device *dev,
3152                               struct device_attribute *attr, char *buf)
3153 {
3154         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3155
3156         if (target->using_rdma_cm)
3157                 return -ENOENT;
3158         return sprintf(buf, "%pI6\n", target->ib_cm.orig_dgid.raw);
3159 }
3160
3161 static ssize_t show_req_lim(struct device *dev,
3162                             struct device_attribute *attr, char *buf)
3163 {
3164         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3165         struct srp_rdma_ch *ch;
3166         int i, req_lim = INT_MAX;
3167
3168         for (i = 0; i < target->ch_count; i++) {
3169                 ch = &target->ch[i];
3170                 req_lim = min(req_lim, ch->req_lim);
3171         }
3172         return sprintf(buf, "%d\n", req_lim);
3173 }
3174
3175 static ssize_t show_zero_req_lim(struct device *dev,
3176                                  struct device_attribute *attr, char *buf)
3177 {
3178         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3179
3180         return sprintf(buf, "%d\n", target->zero_req_lim);
3181 }
3182
3183 static ssize_t show_local_ib_port(struct device *dev,
3184                                   struct device_attribute *attr, char *buf)
3185 {
3186         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3187
3188         return sprintf(buf, "%d\n", target->srp_host->port);
3189 }
3190
3191 static ssize_t show_local_ib_device(struct device *dev,
3192                                     struct device_attribute *attr, char *buf)
3193 {
3194         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3195
3196         return sprintf(buf, "%s\n",
3197                        dev_name(&target->srp_host->srp_dev->dev->dev));
3198 }
3199
3200 static ssize_t show_ch_count(struct device *dev, struct device_attribute *attr,
3201                              char *buf)
3202 {
3203         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3204
3205         return sprintf(buf, "%d\n", target->ch_count);
3206 }
3207
3208 static ssize_t show_comp_vector(struct device *dev,
3209                                 struct device_attribute *attr, char *buf)
3210 {
3211         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3212
3213         return sprintf(buf, "%d\n", target->comp_vector);
3214 }
3215
3216 static ssize_t show_tl_retry_count(struct device *dev,
3217                                    struct device_attribute *attr, char *buf)
3218 {
3219         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3220
3221         return sprintf(buf, "%d\n", target->tl_retry_count);
3222 }
3223
3224 static ssize_t show_cmd_sg_entries(struct device *dev,
3225                                    struct device_attribute *attr, char *buf)
3226 {
3227         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3228
3229         return sprintf(buf, "%u\n", target->cmd_sg_cnt);
3230 }
3231
3232 static ssize_t show_allow_ext_sg(struct device *dev,
3233                                  struct device_attribute *attr, char *buf)
3234 {
3235         struct srp_target_port *target = host_to_target(class_to_shost(dev));
3236
3237         return sprintf(buf, "%s\n", target->allow_ext_sg ? "true" : "false");
3238 }
3239
3240 static DEVICE_ATTR(id_ext,          S_IRUGO, show_id_ext,          NULL);
3241 static DEVICE_ATTR(ioc_guid,        S_IRUGO, show_ioc_guid,        NULL);
3242 static DEVICE_ATTR(service_id,      S_IRUGO, show_service_id,      NULL);
3243 static DEVICE_ATTR(pkey,            S_IRUGO, show_pkey,            NULL);
3244 static DEVICE_ATTR(sgid,            S_IRUGO, show_sgid,            NULL);
3245 static DEVICE_ATTR(dgid,            S_IRUGO, show_dgid,            NULL);
3246 static DEVICE_ATTR(orig_dgid,       S_IRUGO, show_orig_dgid,       NULL);
3247 static DEVICE_ATTR(req_lim,         S_IRUGO, show_req_lim,         NULL);
3248 static DEVICE_ATTR(zero_req_lim,    S_IRUGO, show_zero_req_lim,    NULL);
3249 static DEVICE_ATTR(local_ib_port,   S_IRUGO, show_local_ib_port,   NULL);
3250 static DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL);
3251 static DEVICE_ATTR(ch_count,        S_IRUGO, show_ch_count,        NULL);
3252 static DEVICE_ATTR(comp_vector,     S_IRUGO, show_comp_vector,     NULL);
3253 static DEVICE_ATTR(tl_retry_count,  S_IRUGO, show_tl_retry_count,  NULL);
3254 static DEVICE_ATTR(cmd_sg_entries,  S_IRUGO, show_cmd_sg_entries,  NULL);
3255 static DEVICE_ATTR(allow_ext_sg,    S_IRUGO, show_allow_ext_sg,    NULL);
3256
3257 static struct device_attribute *srp_host_attrs[] = {
3258         &dev_attr_id_ext,
3259         &dev_attr_ioc_guid,
3260         &dev_attr_service_id,
3261         &dev_attr_pkey,
3262         &dev_attr_sgid,
3263         &dev_attr_dgid,
3264         &dev_attr_orig_dgid,
3265         &dev_attr_req_lim,
3266         &dev_attr_zero_req_lim,
3267         &dev_attr_local_ib_port,
3268         &dev_attr_local_ib_device,
3269         &dev_attr_ch_count,
3270         &dev_attr_comp_vector,
3271         &dev_attr_tl_retry_count,
3272         &dev_attr_cmd_sg_entries,
3273         &dev_attr_allow_ext_sg,
3274         NULL
3275 };
3276
3277 static struct scsi_host_template srp_template = {
3278         .module                         = THIS_MODULE,
3279         .name                           = "InfiniBand SRP initiator",
3280         .proc_name                      = DRV_NAME,
3281         .target_alloc                   = srp_target_alloc,
3282         .slave_alloc                    = srp_slave_alloc,
3283         .slave_configure                = srp_slave_configure,
3284         .info                           = srp_target_info,
3285         .queuecommand                   = srp_queuecommand,
3286         .change_queue_depth             = srp_change_queue_depth,
3287         .eh_timed_out                   = srp_timed_out,
3288         .eh_abort_handler               = srp_abort,
3289         .eh_device_reset_handler        = srp_reset_device,
3290         .eh_host_reset_handler          = srp_reset_host,
3291         .skip_settle_delay              = true,
3292         .sg_tablesize                   = SRP_DEF_SG_TABLESIZE,
3293         .can_queue                      = SRP_DEFAULT_CMD_SQ_SIZE,
3294         .this_id                        = -1,
3295         .cmd_per_lun                    = SRP_DEFAULT_CMD_SQ_SIZE,
3296         .shost_attrs                    = srp_host_attrs,
3297         .track_queue_depth              = 1,
3298 };
3299
3300 static int srp_sdev_count(struct Scsi_Host *host)
3301 {
3302         struct scsi_device *sdev;
3303         int c = 0;
3304
3305         shost_for_each_device(sdev, host)
3306                 c++;
3307
3308         return c;
3309 }
3310
3311 /*
3312  * Return values:
3313  * < 0 upon failure. Caller is responsible for SRP target port cleanup.
3314  * 0 and target->state == SRP_TARGET_REMOVED if asynchronous target port
3315  *    removal has been scheduled.
3316  * 0 and target->state != SRP_TARGET_REMOVED upon success.
3317  */
3318 static int srp_add_target(struct srp_host *host, struct srp_target_port *target)
3319 {
3320         struct srp_rport_identifiers ids;
3321         struct srp_rport *rport;
3322
3323         target->state = SRP_TARGET_SCANNING;
3324         sprintf(target->target_name, "SRP.T10:%016llX",
3325                 be64_to_cpu(target->id_ext));
3326
3327         if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dev.parent))
3328                 return -ENODEV;
3329
3330         memcpy(ids.port_id, &target->id_ext, 8);
3331         memcpy(ids.port_id + 8, &target->ioc_guid, 8);
3332         ids.roles = SRP_RPORT_ROLE_TARGET;
3333         rport = srp_rport_add(target->scsi_host, &ids);
3334         if (IS_ERR(rport)) {
3335                 scsi_remove_host(target->scsi_host);
3336                 return PTR_ERR(rport);
3337         }
3338
3339         rport->lld_data = target;
3340         target->rport = rport;
3341
3342         spin_lock(&host->target_lock);
3343         list_add_tail(&target->list, &host->target_list);
3344         spin_unlock(&host->target_lock);
3345
3346         scsi_scan_target(&target->scsi_host->shost_gendev,
3347                          0, target->scsi_id, SCAN_WILD_CARD, SCSI_SCAN_INITIAL);
3348
3349         if (srp_connected_ch(target) < target->ch_count ||
3350             target->qp_in_error) {
3351                 shost_printk(KERN_INFO, target->scsi_host,
3352                              PFX "SCSI scan failed - removing SCSI host\n");
3353                 srp_queue_remove_work(target);
3354                 goto out;
3355         }
3356
3357         pr_debug("%s: SCSI scan succeeded - detected %d LUNs\n",
3358                  dev_name(&target->scsi_host->shost_gendev),
3359                  srp_sdev_count(target->scsi_host));
3360
3361         spin_lock_irq(&target->lock);
3362         if (target->state == SRP_TARGET_SCANNING)
3363                 target->state = SRP_TARGET_LIVE;
3364         spin_unlock_irq(&target->lock);
3365
3366 out:
3367         return 0;
3368 }
3369
3370 static void srp_release_dev(struct device *dev)
3371 {
3372         struct srp_host *host =
3373                 container_of(dev, struct srp_host, dev);
3374
3375         complete(&host->released);
3376 }
3377
3378 static struct class srp_class = {
3379         .name    = "infiniband_srp",
3380         .dev_release = srp_release_dev
3381 };
3382
3383 /**
3384  * srp_conn_unique() - check whether the connection to a target is unique
3385  * @host:   SRP host.
3386  * @target: SRP target port.
3387  */
3388 static bool srp_conn_unique(struct srp_host *host,
3389                             struct srp_target_port *target)
3390 {
3391         struct srp_target_port *t;
3392         bool ret = false;
3393
3394         if (target->state == SRP_TARGET_REMOVED)
3395                 goto out;
3396
3397         ret = true;
3398
3399         spin_lock(&host->target_lock);
3400         list_for_each_entry(t, &host->target_list, list) {
3401                 if (t != target &&
3402                     target->id_ext == t->id_ext &&
3403                     target->ioc_guid == t->ioc_guid &&
3404                     target->initiator_ext == t->initiator_ext) {
3405                         ret = false;
3406                         break;
3407                 }
3408         }
3409         spin_unlock(&host->target_lock);
3410
3411 out:
3412         return ret;
3413 }
3414
3415 /*
3416  * Target ports are added by writing
3417  *
3418  *     id_ext=<SRP ID ext>,ioc_guid=<SRP IOC GUID>,dgid=<dest GID>,
3419  *     pkey=<P_Key>,service_id=<service ID>
3420  * or
3421  *     id_ext=<SRP ID ext>,ioc_guid=<SRP IOC GUID>,
3422  *     [src=<IPv4 address>,]dest=<IPv4 address>:<port number>
3423  *
3424  * to the add_target sysfs attribute.
3425  */
3426 enum {
3427         SRP_OPT_ERR             = 0,
3428         SRP_OPT_ID_EXT          = 1 << 0,
3429         SRP_OPT_IOC_GUID        = 1 << 1,
3430         SRP_OPT_DGID            = 1 << 2,
3431         SRP_OPT_PKEY            = 1 << 3,
3432         SRP_OPT_SERVICE_ID      = 1 << 4,
3433         SRP_OPT_MAX_SECT        = 1 << 5,
3434         SRP_OPT_MAX_CMD_PER_LUN = 1 << 6,
3435         SRP_OPT_IO_CLASS        = 1 << 7,
3436         SRP_OPT_INITIATOR_EXT   = 1 << 8,
3437         SRP_OPT_CMD_SG_ENTRIES  = 1 << 9,
3438         SRP_OPT_ALLOW_EXT_SG    = 1 << 10,
3439         SRP_OPT_SG_TABLESIZE    = 1 << 11,
3440         SRP_OPT_COMP_VECTOR     = 1 << 12,
3441         SRP_OPT_TL_RETRY_COUNT  = 1 << 13,
3442         SRP_OPT_QUEUE_SIZE      = 1 << 14,
3443         SRP_OPT_IP_SRC          = 1 << 15,
3444         SRP_OPT_IP_DEST         = 1 << 16,
3445         SRP_OPT_TARGET_CAN_QUEUE= 1 << 17,
3446 };
3447
3448 static unsigned int srp_opt_mandatory[] = {
3449         SRP_OPT_ID_EXT          |
3450         SRP_OPT_IOC_GUID        |
3451         SRP_OPT_DGID            |
3452         SRP_OPT_PKEY            |
3453         SRP_OPT_SERVICE_ID,
3454         SRP_OPT_ID_EXT          |
3455         SRP_OPT_IOC_GUID        |
3456         SRP_OPT_IP_DEST,
3457 };
3458
3459 static const match_table_t srp_opt_tokens = {
3460         { SRP_OPT_ID_EXT,               "id_ext=%s"             },
3461         { SRP_OPT_IOC_GUID,             "ioc_guid=%s"           },
3462         { SRP_OPT_DGID,                 "dgid=%s"               },
3463         { SRP_OPT_PKEY,                 "pkey=%x"               },
3464         { SRP_OPT_SERVICE_ID,           "service_id=%s"         },
3465         { SRP_OPT_MAX_SECT,             "max_sect=%d"           },
3466         { SRP_OPT_MAX_CMD_PER_LUN,      "max_cmd_per_lun=%d"    },
3467         { SRP_OPT_TARGET_CAN_QUEUE,     "target_can_queue=%d"   },
3468         { SRP_OPT_IO_CLASS,             "io_class=%x"           },
3469         { SRP_OPT_INITIATOR_EXT,        "initiator_ext=%s"      },
3470         { SRP_OPT_CMD_SG_ENTRIES,       "cmd_sg_entries=%u"     },
3471         { SRP_OPT_ALLOW_EXT_SG,         "allow_ext_sg=%u"       },
3472         { SRP_OPT_SG_TABLESIZE,         "sg_tablesize=%u"       },
3473         { SRP_OPT_COMP_VECTOR,          "comp_vector=%u"        },
3474         { SRP_OPT_TL_RETRY_COUNT,       "tl_retry_count=%u"     },
3475         { SRP_OPT_QUEUE_SIZE,           "queue_size=%d"         },
3476         { SRP_OPT_IP_SRC,               "src=%s"                },
3477         { SRP_OPT_IP_DEST,              "dest=%s"               },
3478         { SRP_OPT_ERR,                  NULL                    }
3479 };
3480
3481 /**
3482  * srp_parse_in - parse an IP address and port number combination
3483  * @net:           [in]  Network namespace.
3484  * @sa:            [out] Address family, IP address and port number.
3485  * @addr_port_str: [in]  IP address and port number.
3486  *
3487  * Parse the following address formats:
3488  * - IPv4: <ip_address>:<port>, e.g. 1.2.3.4:5.
3489  * - IPv6: \[<ipv6_address>\]:<port>, e.g. [1::2:3%4]:5.
3490  */
3491 static int srp_parse_in(struct net *net, struct sockaddr_storage *sa,
3492                         const char *addr_port_str)
3493 {
3494         char *addr_end, *addr = kstrdup(addr_port_str, GFP_KERNEL);
3495         char *port_str;
3496         int ret;
3497
3498         if (!addr)
3499                 return -ENOMEM;
3500         port_str = strrchr(addr, ':');
3501         if (!port_str)
3502                 return -EINVAL;
3503         *port_str++ = '\0';
3504         ret = inet_pton_with_scope(net, AF_INET, addr, port_str, sa);
3505         if (ret && addr[0]) {
3506                 addr_end = addr + strlen(addr) - 1;
3507                 if (addr[0] == '[' && *addr_end == ']') {
3508                         *addr_end = '\0';
3509                         ret = inet_pton_with_scope(net, AF_INET6, addr + 1,
3510                                                    port_str, sa);
3511                 }
3512         }
3513         kfree(addr);
3514         pr_debug("%s -> %pISpfsc\n", addr_port_str, sa);
3515         return ret;
3516 }
3517
3518 static int srp_parse_options(struct net *net, const char *buf,
3519                              struct srp_target_port *target)
3520 {
3521         char *options, *sep_opt;
3522         char *p;
3523         substring_t args[MAX_OPT_ARGS];
3524         unsigned long long ull;
3525         int opt_mask = 0;
3526         int token;
3527         int ret = -EINVAL;
3528         int i;
3529
3530         options = kstrdup(buf, GFP_KERNEL);
3531         if (!options)
3532                 return -ENOMEM;
3533
3534         sep_opt = options;
3535         while ((p = strsep(&sep_opt, ",\n")) != NULL) {
3536                 if (!*p)
3537                         continue;
3538
3539                 token = match_token(p, srp_opt_tokens, args);
3540                 opt_mask |= token;
3541
3542                 switch (token) {
3543                 case SRP_OPT_ID_EXT:
3544                         p = match_strdup(args);
3545                         if (!p) {
3546                                 ret = -ENOMEM;
3547                                 goto out;
3548                         }
3549                         ret = kstrtoull(p, 16, &ull);
3550                         if (ret) {
3551                                 pr_warn("invalid id_ext parameter '%s'\n", p);
3552                                 kfree(p);
3553                                 goto out;
3554                         }
3555                         target->id_ext = cpu_to_be64(ull);
3556                         kfree(p);
3557                         break;
3558
3559                 case SRP_OPT_IOC_GUID:
3560                         p = match_strdup(args);
3561                         if (!p) {
3562                                 ret = -ENOMEM;
3563                                 goto out;
3564                         }
3565                         ret = kstrtoull(p, 16, &ull);
3566                         if (ret) {
3567                                 pr_warn("invalid ioc_guid parameter '%s'\n", p);
3568                                 kfree(p);
3569                                 goto out;
3570                         }
3571                         target->ioc_guid = cpu_to_be64(ull);
3572                         kfree(p);
3573                         break;
3574
3575                 case SRP_OPT_DGID:
3576                         p = match_strdup(args);
3577                         if (!p) {
3578                                 ret = -ENOMEM;
3579                                 goto out;
3580                         }
3581                         if (strlen(p) != 32) {
3582                                 pr_warn("bad dest GID parameter '%s'\n", p);
3583                                 kfree(p);
3584                                 goto out;
3585                         }
3586
3587                         ret = hex2bin(target->ib_cm.orig_dgid.raw, p, 16);
3588                         kfree(p);
3589                         if (ret < 0)
3590                                 goto out;
3591                         break;
3592
3593                 case SRP_OPT_PKEY:
3594                         if (match_hex(args, &token)) {
3595                                 pr_warn("bad P_Key parameter '%s'\n", p);
3596                                 goto out;
3597                         }
3598                         target->ib_cm.pkey = cpu_to_be16(token);
3599                         break;
3600
3601                 case SRP_OPT_SERVICE_ID:
3602                         p = match_strdup(args);
3603                         if (!p) {
3604                                 ret = -ENOMEM;
3605                                 goto out;
3606                         }
3607                         ret = kstrtoull(p, 16, &ull);
3608                         if (ret) {
3609                                 pr_warn("bad service_id parameter '%s'\n", p);
3610                                 kfree(p);
3611                                 goto out;
3612                         }
3613                         target->ib_cm.service_id = cpu_to_be64(ull);
3614                         kfree(p);
3615                         break;
3616
3617                 case SRP_OPT_IP_SRC:
3618                         p = match_strdup(args);
3619                         if (!p) {
3620                                 ret = -ENOMEM;
3621                                 goto out;
3622                         }
3623                         ret = srp_parse_in(net, &target->rdma_cm.src.ss, p);
3624                         if (ret < 0) {
3625                                 pr_warn("bad source parameter '%s'\n", p);
3626                                 kfree(p);
3627                                 goto out;
3628                         }
3629                         target->rdma_cm.src_specified = true;
3630                         kfree(p);
3631                         break;
3632
3633                 case SRP_OPT_IP_DEST:
3634                         p = match_strdup(args);
3635                         if (!p) {
3636                                 ret = -ENOMEM;
3637                                 goto out;
3638                         }
3639                         ret = srp_parse_in(net, &target->rdma_cm.dst.ss, p);
3640                         if (ret < 0) {
3641                                 pr_warn("bad dest parameter '%s'\n", p);
3642                                 kfree(p);
3643                                 goto out;
3644                         }
3645                         target->using_rdma_cm = true;
3646                         kfree(p);
3647                         break;
3648
3649                 case SRP_OPT_MAX_SECT:
3650                         if (match_int(args, &token)) {
3651                                 pr_warn("bad max sect parameter '%s'\n", p);
3652                                 goto out;
3653                         }
3654                         target->scsi_host->max_sectors = token;
3655                         break;
3656
3657                 case SRP_OPT_QUEUE_SIZE:
3658                         if (match_int(args, &token) || token < 1) {
3659                                 pr_warn("bad queue_size parameter '%s'\n", p);
3660                                 goto out;
3661                         }
3662                         target->scsi_host->can_queue = token;
3663                         target->queue_size = token + SRP_RSP_SQ_SIZE +
3664                                              SRP_TSK_MGMT_SQ_SIZE;
3665                         if (!(opt_mask & SRP_OPT_MAX_CMD_PER_LUN))
3666                                 target->scsi_host->cmd_per_lun = token;
3667                         break;
3668
3669                 case SRP_OPT_MAX_CMD_PER_LUN:
3670                         if (match_int(args, &token) || token < 1) {
3671                                 pr_warn("bad max cmd_per_lun parameter '%s'\n",
3672                                         p);
3673                                 goto out;
3674                         }
3675                         target->scsi_host->cmd_per_lun = token;
3676                         break;
3677
3678                 case SRP_OPT_TARGET_CAN_QUEUE:
3679                         if (match_int(args, &token) || token < 1) {
3680                                 pr_warn("bad max target_can_queue parameter '%s'\n",
3681                                         p);
3682                                 goto out;
3683                         }
3684                         target->target_can_queue = token;
3685                         break;
3686
3687                 case SRP_OPT_IO_CLASS:
3688                         if (match_hex(args, &token)) {
3689                                 pr_warn("bad IO class parameter '%s'\n", p);
3690                                 goto out;
3691                         }
3692                         if (token != SRP_REV10_IB_IO_CLASS &&
3693                             token != SRP_REV16A_IB_IO_CLASS) {
3694                                 pr_warn("unknown IO class parameter value %x specified (use %x or %x).\n",
3695                                         token, SRP_REV10_IB_IO_CLASS,
3696                                         SRP_REV16A_IB_IO_CLASS);
3697                                 goto out;
3698                         }
3699                         target->io_class = token;
3700                         break;
3701
3702                 case SRP_OPT_INITIATOR_EXT:
3703                         p = match_strdup(args);
3704                         if (!p) {
3705                                 ret = -ENOMEM;
3706                                 goto out;
3707                         }
3708                         ret = kstrtoull(p, 16, &ull);
3709                         if (ret) {
3710                                 pr_warn("bad initiator_ext value '%s'\n", p);
3711                                 kfree(p);
3712                                 goto out;
3713                         }
3714                         target->initiator_ext = cpu_to_be64(ull);
3715                         kfree(p);
3716                         break;
3717
3718                 case SRP_OPT_CMD_SG_ENTRIES:
3719                         if (match_int(args, &token) || token < 1 || token > 255) {
3720                                 pr_warn("bad max cmd_sg_entries parameter '%s'\n",
3721                                         p);
3722                                 goto out;
3723                         }
3724                         target->cmd_sg_cnt = token;
3725                         break;
3726
3727                 case SRP_OPT_ALLOW_EXT_SG:
3728                         if (match_int(args, &token)) {
3729                                 pr_warn("bad allow_ext_sg parameter '%s'\n", p);
3730                                 goto out;
3731                         }
3732                         target->allow_ext_sg = !!token;
3733                         break;
3734
3735                 case SRP_OPT_SG_TABLESIZE:
3736                         if (match_int(args, &token) || token < 1 ||
3737                                         token > SG_MAX_SEGMENTS) {
3738                                 pr_warn("bad max sg_tablesize parameter '%s'\n",
3739                                         p);
3740                                 goto out;
3741                         }
3742                         target->sg_tablesize = token;
3743                         break;
3744
3745                 case SRP_OPT_COMP_VECTOR:
3746                         if (match_int(args, &token) || token < 0) {
3747                                 pr_warn("bad comp_vector parameter '%s'\n", p);
3748                                 goto out;
3749                         }
3750                         target->comp_vector = token;
3751                         break;
3752
3753                 case SRP_OPT_TL_RETRY_COUNT:
3754                         if (match_int(args, &token) || token < 2 || token > 7) {
3755                                 pr_warn("bad tl_retry_count parameter '%s' (must be a number between 2 and 7)\n",
3756                                         p);
3757                                 goto out;
3758                         }
3759                         target->tl_retry_count = token;
3760                         break;
3761
3762                 default:
3763                         pr_warn("unknown parameter or missing value '%s' in target creation request\n",
3764                                 p);
3765                         goto out;
3766                 }
3767         }
3768
3769         for (i = 0; i < ARRAY_SIZE(srp_opt_mandatory); i++) {
3770                 if ((opt_mask & srp_opt_mandatory[i]) == srp_opt_mandatory[i]) {
3771                         ret = 0;
3772                         break;
3773                 }
3774         }
3775         if (ret)
3776                 pr_warn("target creation request is missing one or more parameters\n");
3777
3778         if (target->scsi_host->cmd_per_lun > target->scsi_host->can_queue
3779             && (opt_mask & SRP_OPT_MAX_CMD_PER_LUN))
3780                 pr_warn("cmd_per_lun = %d > queue_size = %d\n",
3781                         target->scsi_host->cmd_per_lun,
3782                         target->scsi_host->can_queue);
3783
3784 out:
3785         kfree(options);
3786         return ret;
3787 }
3788
3789 static ssize_t srp_create_target(struct device *dev,
3790                                  struct device_attribute *attr,
3791                                  const char *buf, size_t count)
3792 {
3793         struct srp_host *host =
3794                 container_of(dev, struct srp_host, dev);
3795         struct Scsi_Host *target_host;
3796         struct srp_target_port *target;
3797         struct srp_rdma_ch *ch;
3798         struct srp_device *srp_dev = host->srp_dev;
3799         struct ib_device *ibdev = srp_dev->dev;
3800         int ret, node_idx, node, cpu, i;
3801         unsigned int max_sectors_per_mr, mr_per_cmd = 0;
3802         bool multich = false;
3803         uint32_t max_iu_len;
3804
3805         target_host = scsi_host_alloc(&srp_template,
3806                                       sizeof (struct srp_target_port));
3807         if (!target_host)
3808                 return -ENOMEM;
3809
3810         target_host->transportt  = ib_srp_transport_template;
3811         target_host->max_channel = 0;
3812         target_host->max_id      = 1;
3813         target_host->max_lun     = -1LL;
3814         target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb;
3815         target_host->max_segment_size = ib_dma_max_seg_size(ibdev);
3816
3817         target = host_to_target(target_host);
3818
3819         target->net             = kobj_ns_grab_current(KOBJ_NS_TYPE_NET);
3820         target->io_class        = SRP_REV16A_IB_IO_CLASS;
3821         target->scsi_host       = target_host;
3822         target->srp_host        = host;
3823         target->lkey            = host->srp_dev->pd->local_dma_lkey;
3824         target->global_rkey     = host->srp_dev->global_rkey;
3825         target->cmd_sg_cnt      = cmd_sg_entries;
3826         target->sg_tablesize    = indirect_sg_entries ? : cmd_sg_entries;
3827         target->allow_ext_sg    = allow_ext_sg;
3828         target->tl_retry_count  = 7;
3829         target->queue_size      = SRP_DEFAULT_QUEUE_SIZE;
3830
3831         /*
3832          * Avoid that the SCSI host can be removed by srp_remove_target()
3833          * before this function returns.
3834          */
3835         scsi_host_get(target->scsi_host);
3836
3837         ret = mutex_lock_interruptible(&host->add_target_mutex);
3838         if (ret < 0)
3839                 goto put;
3840
3841         ret = srp_parse_options(target->net, buf, target);
3842         if (ret)
3843                 goto out;
3844
3845         target->req_ring_size = target->queue_size - SRP_TSK_MGMT_SQ_SIZE;
3846
3847         if (!srp_conn_unique(target->srp_host, target)) {
3848                 if (target->using_rdma_cm) {
3849                         shost_printk(KERN_INFO, target->scsi_host,
3850                                      PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;dest=%pIS\n",
3851                                      be64_to_cpu(target->id_ext),
3852                                      be64_to_cpu(target->ioc_guid),
3853                                      &target->rdma_cm.dst);
3854                 } else {
3855                         shost_printk(KERN_INFO, target->scsi_host,
3856                                      PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;initiator_ext=%016llx\n",
3857                                      be64_to_cpu(target->id_ext),
3858                                      be64_to_cpu(target->ioc_guid),
3859                                      be64_to_cpu(target->initiator_ext));
3860                 }
3861                 ret = -EEXIST;
3862                 goto out;
3863         }
3864
3865         if (!srp_dev->has_fmr && !srp_dev->has_fr && !target->allow_ext_sg &&
3866             target->cmd_sg_cnt < target->sg_tablesize) {
3867                 pr_warn("No MR pool and no external indirect descriptors, limiting sg_tablesize to cmd_sg_cnt\n");
3868                 target->sg_tablesize = target->cmd_sg_cnt;
3869         }
3870
3871         if (srp_dev->use_fast_reg || srp_dev->use_fmr) {
3872                 bool gaps_reg = (ibdev->attrs.device_cap_flags &
3873                                  IB_DEVICE_SG_GAPS_REG);
3874
3875                 max_sectors_per_mr = srp_dev->max_pages_per_mr <<
3876                                   (ilog2(srp_dev->mr_page_size) - 9);
3877                 if (!gaps_reg) {
3878                         /*
3879                          * FR and FMR can only map one HCA page per entry. If
3880                          * the start address is not aligned on a HCA page
3881                          * boundary two entries will be used for the head and
3882                          * the tail although these two entries combined
3883                          * contain at most one HCA page of data. Hence the "+
3884                          * 1" in the calculation below.
3885                          *
3886                          * The indirect data buffer descriptor is contiguous
3887                          * so the memory for that buffer will only be
3888                          * registered if register_always is true. Hence add
3889                          * one to mr_per_cmd if register_always has been set.
3890                          */
3891                         mr_per_cmd = register_always +
3892                                 (target->scsi_host->max_sectors + 1 +
3893                                  max_sectors_per_mr - 1) / max_sectors_per_mr;
3894                 } else {
3895                         mr_per_cmd = register_always +
3896                                 (target->sg_tablesize +
3897                                  srp_dev->max_pages_per_mr - 1) /
3898                                 srp_dev->max_pages_per_mr;
3899                 }
3900                 pr_debug("max_sectors = %u; max_pages_per_mr = %u; mr_page_size = %u; max_sectors_per_mr = %u; mr_per_cmd = %u\n",
3901                          target->scsi_host->max_sectors, srp_dev->max_pages_per_mr, srp_dev->mr_page_size,
3902                          max_sectors_per_mr, mr_per_cmd);
3903         }
3904
3905         target_host->sg_tablesize = target->sg_tablesize;
3906         target->mr_pool_size = target->scsi_host->can_queue * mr_per_cmd;
3907         target->mr_per_cmd = mr_per_cmd;
3908         target->indirect_size = target->sg_tablesize *
3909                                 sizeof (struct srp_direct_buf);
3910         max_iu_len = srp_max_it_iu_len(target->cmd_sg_cnt, srp_use_imm_data);
3911
3912         INIT_WORK(&target->tl_err_work, srp_tl_err_work);
3913         INIT_WORK(&target->remove_work, srp_remove_work);
3914         spin_lock_init(&target->lock);
3915         ret = rdma_query_gid(ibdev, host->port, 0, &target->sgid);
3916         if (ret)
3917                 goto out;
3918
3919         ret = -ENOMEM;
3920         target->ch_count = max_t(unsigned, num_online_nodes(),
3921                                  min(ch_count ? :
3922                                      min(4 * num_online_nodes(),
3923                                          ibdev->num_comp_vectors),
3924                                      num_online_cpus()));
3925         target->ch = kcalloc(target->ch_count, sizeof(*target->ch),
3926                              GFP_KERNEL);
3927         if (!target->ch)
3928                 goto out;
3929
3930         node_idx = 0;
3931         for_each_online_node(node) {
3932                 const int ch_start = (node_idx * target->ch_count /
3933                                       num_online_nodes());
3934                 const int ch_end = ((node_idx + 1) * target->ch_count /
3935                                     num_online_nodes());
3936                 const int cv_start = node_idx * ibdev->num_comp_vectors /
3937                                      num_online_nodes();
3938                 const int cv_end = (node_idx + 1) * ibdev->num_comp_vectors /
3939                                    num_online_nodes();
3940                 int cpu_idx = 0;
3941
3942                 for_each_online_cpu(cpu) {
3943                         if (cpu_to_node(cpu) != node)
3944                                 continue;
3945                         if (ch_start + cpu_idx >= ch_end)
3946                                 continue;
3947                         ch = &target->ch[ch_start + cpu_idx];
3948                         ch->target = target;
3949                         ch->comp_vector = cv_start == cv_end ? cv_start :
3950                                 cv_start + cpu_idx % (cv_end - cv_start);
3951                         spin_lock_init(&ch->lock);
3952                         INIT_LIST_HEAD(&ch->free_tx);
3953                         ret = srp_new_cm_id(ch);
3954                         if (ret)
3955                                 goto err_disconnect;
3956
3957                         ret = srp_create_ch_ib(ch);
3958                         if (ret)
3959                                 goto err_disconnect;
3960
3961                         ret = srp_alloc_req_data(ch);
3962                         if (ret)
3963                                 goto err_disconnect;
3964
3965                         ret = srp_connect_ch(ch, max_iu_len, multich);
3966                         if (ret) {
3967                                 char dst[64];
3968
3969                                 if (target->using_rdma_cm)
3970                                         snprintf(dst, sizeof(dst), "%pIS",
3971                                                  &target->rdma_cm.dst);
3972                                 else
3973                                         snprintf(dst, sizeof(dst), "%pI6",
3974                                                  target->ib_cm.orig_dgid.raw);
3975                                 shost_printk(KERN_ERR, target->scsi_host,
3976                                              PFX "Connection %d/%d to %s failed\n",
3977                                              ch_start + cpu_idx,
3978                                              target->ch_count, dst);
3979                                 if (node_idx == 0 && cpu_idx == 0) {
3980                                         goto free_ch;
3981                                 } else {
3982                                         srp_free_ch_ib(target, ch);
3983                                         srp_free_req_data(target, ch);
3984                                         target->ch_count = ch - target->ch;
3985                                         goto connected;
3986                                 }
3987                         }
3988
3989                         multich = true;
3990                         cpu_idx++;
3991                 }
3992                 node_idx++;
3993         }
3994
3995 connected:
3996         target->scsi_host->nr_hw_queues = target->ch_count;
3997
3998         ret = srp_add_target(host, target);
3999         if (ret)
4000                 goto err_disconnect;
4001
4002         if (target->state != SRP_TARGET_REMOVED) {
4003                 if (target->using_rdma_cm) {
4004                         shost_printk(KERN_DEBUG, target->scsi_host, PFX
4005                                      "new target: id_ext %016llx ioc_guid %016llx sgid %pI6 dest %pIS\n",
4006                                      be64_to_cpu(target->id_ext),
4007                                      be64_to_cpu(target->ioc_guid),
4008                                      target->sgid.raw, &target->rdma_cm.dst);
4009                 } else {
4010                         shost_printk(KERN_DEBUG, target->scsi_host, PFX
4011                                      "new target: id_ext %016llx ioc_guid %016llx pkey %04x service_id %016llx sgid %pI6 dgid %pI6\n",
4012                                      be64_to_cpu(target->id_ext),
4013                                      be64_to_cpu(target->ioc_guid),
4014                                      be16_to_cpu(target->ib_cm.pkey),
4015                                      be64_to_cpu(target->ib_cm.service_id),
4016                                      target->sgid.raw,
4017                                      target->ib_cm.orig_dgid.raw);
4018                 }
4019         }
4020
4021         ret = count;
4022
4023 out:
4024         mutex_unlock(&host->add_target_mutex);
4025
4026 put:
4027         scsi_host_put(target->scsi_host);
4028         if (ret < 0) {
4029                 /*
4030                  * If a call to srp_remove_target() has not been scheduled,
4031                  * drop the network namespace reference now that was obtained
4032                  * earlier in this function.
4033                  */
4034                 if (target->state != SRP_TARGET_REMOVED)
4035                         kobj_ns_drop(KOBJ_NS_TYPE_NET, target->net);
4036                 scsi_host_put(target->scsi_host);
4037         }
4038
4039         return ret;
4040
4041 err_disconnect:
4042         srp_disconnect_target(target);
4043
4044 free_ch:
4045         for (i = 0; i < target->ch_count; i++) {
4046                 ch = &target->ch[i];
4047                 srp_free_ch_ib(target, ch);
4048                 srp_free_req_data(target, ch);
4049         }
4050
4051         kfree(target->ch);
4052         goto out;
4053 }
4054
4055 static DEVICE_ATTR(add_target, S_IWUSR, NULL, srp_create_target);
4056
4057 static ssize_t show_ibdev(struct device *dev, struct device_attribute *attr,
4058                           char *buf)
4059 {
4060         struct srp_host *host = container_of(dev, struct srp_host, dev);
4061
4062         return sprintf(buf, "%s\n", dev_name(&host->srp_dev->dev->dev));
4063 }
4064
4065 static DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL);
4066
4067 static ssize_t show_port(struct device *dev, struct device_attribute *attr,
4068                          char *buf)
4069 {
4070         struct srp_host *host = container_of(dev, struct srp_host, dev);
4071
4072         return sprintf(buf, "%d\n", host->port);
4073 }
4074
4075 static DEVICE_ATTR(port, S_IRUGO, show_port, NULL);
4076
4077 static struct srp_host *srp_add_port(struct srp_device *device, u8 port)
4078 {
4079         struct srp_host *host;
4080
4081         host = kzalloc(sizeof *host, GFP_KERNEL);
4082         if (!host)
4083                 return NULL;
4084
4085         INIT_LIST_HEAD(&host->target_list);
4086         spin_lock_init(&host->target_lock);
4087         init_completion(&host->released);
4088         mutex_init(&host->add_target_mutex);
4089         host->srp_dev = device;
4090         host->port = port;
4091
4092         host->dev.class = &srp_class;
4093         host->dev.parent = device->dev->dev.parent;
4094         dev_set_name(&host->dev, "srp-%s-%d", dev_name(&device->dev->dev),
4095                      port);
4096
4097         if (device_register(&host->dev))
4098                 goto free_host;
4099         if (device_create_file(&host->dev, &dev_attr_add_target))
4100                 goto err_class;
4101         if (device_create_file(&host->dev, &dev_attr_ibdev))
4102                 goto err_class;
4103         if (device_create_file(&host->dev, &dev_attr_port))
4104                 goto err_class;
4105
4106         return host;
4107
4108 err_class:
4109         device_unregister(&host->dev);
4110
4111 free_host:
4112         kfree(host);
4113
4114         return NULL;
4115 }
4116
4117 static void srp_rename_dev(struct ib_device *device, void *client_data)
4118 {
4119         struct srp_device *srp_dev = client_data;
4120         struct srp_host *host, *tmp_host;
4121
4122         list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) {
4123                 char name[IB_DEVICE_NAME_MAX + 8];
4124
4125                 snprintf(name, sizeof(name), "srp-%s-%d",
4126                          dev_name(&device->dev), host->port);
4127                 device_rename(&host->dev, name);
4128         }
4129 }
4130
4131 static void srp_add_one(struct ib_device *device)
4132 {
4133         struct srp_device *srp_dev;
4134         struct ib_device_attr *attr = &device->attrs;
4135         struct srp_host *host;
4136         int mr_page_shift;
4137         unsigned int p;
4138         u64 max_pages_per_mr;
4139         unsigned int flags = 0;
4140
4141         srp_dev = kzalloc(sizeof(*srp_dev), GFP_KERNEL);
4142         if (!srp_dev)
4143                 return;
4144
4145         /*
4146          * Use the smallest page size supported by the HCA, down to a
4147          * minimum of 4096 bytes. We're unlikely to build large sglists
4148          * out of smaller entries.
4149          */
4150         mr_page_shift           = max(12, ffs(attr->page_size_cap) - 1);
4151         srp_dev->mr_page_size   = 1 << mr_page_shift;
4152         srp_dev->mr_page_mask   = ~((u64) srp_dev->mr_page_size - 1);
4153         max_pages_per_mr        = attr->max_mr_size;
4154         do_div(max_pages_per_mr, srp_dev->mr_page_size);
4155         pr_debug("%s: %llu / %u = %llu <> %u\n", __func__,
4156                  attr->max_mr_size, srp_dev->mr_page_size,
4157                  max_pages_per_mr, SRP_MAX_PAGES_PER_MR);
4158         srp_dev->max_pages_per_mr = min_t(u64, SRP_MAX_PAGES_PER_MR,
4159                                           max_pages_per_mr);
4160
4161         srp_dev->has_fmr = (device->ops.alloc_fmr &&
4162                             device->ops.dealloc_fmr &&
4163                             device->ops.map_phys_fmr &&
4164                             device->ops.unmap_fmr);
4165         srp_dev->has_fr = (attr->device_cap_flags &
4166                            IB_DEVICE_MEM_MGT_EXTENSIONS);
4167         if (!never_register && !srp_dev->has_fmr && !srp_dev->has_fr) {
4168                 dev_warn(&device->dev, "neither FMR nor FR is supported\n");
4169         } else if (!never_register &&
4170                    attr->max_mr_size >= 2 * srp_dev->mr_page_size) {
4171                 srp_dev->use_fast_reg = (srp_dev->has_fr &&
4172                                          (!srp_dev->has_fmr || prefer_fr));
4173                 srp_dev->use_fmr = !srp_dev->use_fast_reg && srp_dev->has_fmr;
4174         }
4175
4176         if (never_register || !register_always ||
4177             (!srp_dev->has_fmr && !srp_dev->has_fr))
4178                 flags |= IB_PD_UNSAFE_GLOBAL_RKEY;
4179
4180         if (srp_dev->use_fast_reg) {
4181                 srp_dev->max_pages_per_mr =
4182                         min_t(u32, srp_dev->max_pages_per_mr,
4183                               attr->max_fast_reg_page_list_len);
4184         }
4185         srp_dev->mr_max_size    = srp_dev->mr_page_size *
4186                                    srp_dev->max_pages_per_mr;
4187         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",
4188                  dev_name(&device->dev), mr_page_shift, attr->max_mr_size,
4189                  attr->max_fast_reg_page_list_len,
4190                  srp_dev->max_pages_per_mr, srp_dev->mr_max_size);
4191
4192         INIT_LIST_HEAD(&srp_dev->dev_list);
4193
4194         srp_dev->dev = device;
4195         srp_dev->pd  = ib_alloc_pd(device, flags);
4196         if (IS_ERR(srp_dev->pd))
4197                 goto free_dev;
4198
4199         if (flags & IB_PD_UNSAFE_GLOBAL_RKEY) {
4200                 srp_dev->global_rkey = srp_dev->pd->unsafe_global_rkey;
4201                 WARN_ON_ONCE(srp_dev->global_rkey == 0);
4202         }
4203
4204         rdma_for_each_port (device, p) {
4205                 host = srp_add_port(srp_dev, p);
4206                 if (host)
4207                         list_add_tail(&host->list, &srp_dev->dev_list);
4208         }
4209
4210         ib_set_client_data(device, &srp_client, srp_dev);
4211         return;
4212
4213 free_dev:
4214         kfree(srp_dev);
4215 }
4216
4217 static void srp_remove_one(struct ib_device *device, void *client_data)
4218 {
4219         struct srp_device *srp_dev;
4220         struct srp_host *host, *tmp_host;
4221         struct srp_target_port *target;
4222
4223         srp_dev = client_data;
4224         if (!srp_dev)
4225                 return;
4226
4227         list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) {
4228                 device_unregister(&host->dev);
4229                 /*
4230                  * Wait for the sysfs entry to go away, so that no new
4231                  * target ports can be created.
4232                  */
4233                 wait_for_completion(&host->released);
4234
4235                 /*
4236                  * Remove all target ports.
4237                  */
4238                 spin_lock(&host->target_lock);
4239                 list_for_each_entry(target, &host->target_list, list)
4240                         srp_queue_remove_work(target);
4241                 spin_unlock(&host->target_lock);
4242
4243                 /*
4244                  * Wait for tl_err and target port removal tasks.
4245                  */
4246                 flush_workqueue(system_long_wq);
4247                 flush_workqueue(srp_remove_wq);
4248
4249                 kfree(host);
4250         }
4251
4252         ib_dealloc_pd(srp_dev->pd);
4253
4254         kfree(srp_dev);
4255 }
4256
4257 static struct srp_function_template ib_srp_transport_functions = {
4258         .has_rport_state         = true,
4259         .reset_timer_if_blocked  = true,
4260         .reconnect_delay         = &srp_reconnect_delay,
4261         .fast_io_fail_tmo        = &srp_fast_io_fail_tmo,
4262         .dev_loss_tmo            = &srp_dev_loss_tmo,
4263         .reconnect               = srp_rport_reconnect,
4264         .rport_delete            = srp_rport_delete,
4265         .terminate_rport_io      = srp_terminate_io,
4266 };
4267
4268 static int __init srp_init_module(void)
4269 {
4270         int ret;
4271
4272         BUILD_BUG_ON(sizeof(struct srp_imm_buf) != 4);
4273         BUILD_BUG_ON(sizeof(struct srp_login_req) != 64);
4274         BUILD_BUG_ON(sizeof(struct srp_login_req_rdma) != 56);
4275         BUILD_BUG_ON(sizeof(struct srp_cmd) != 48);
4276
4277         if (srp_sg_tablesize) {
4278                 pr_warn("srp_sg_tablesize is deprecated, please use cmd_sg_entries\n");
4279                 if (!cmd_sg_entries)
4280                         cmd_sg_entries = srp_sg_tablesize;
4281         }
4282
4283         if (!cmd_sg_entries)
4284                 cmd_sg_entries = SRP_DEF_SG_TABLESIZE;
4285
4286         if (cmd_sg_entries > 255) {
4287                 pr_warn("Clamping cmd_sg_entries to 255\n");
4288                 cmd_sg_entries = 255;
4289         }
4290
4291         if (!indirect_sg_entries)
4292                 indirect_sg_entries = cmd_sg_entries;
4293         else if (indirect_sg_entries < cmd_sg_entries) {
4294                 pr_warn("Bumping up indirect_sg_entries to match cmd_sg_entries (%u)\n",
4295                         cmd_sg_entries);
4296                 indirect_sg_entries = cmd_sg_entries;
4297         }
4298
4299         if (indirect_sg_entries > SG_MAX_SEGMENTS) {
4300                 pr_warn("Clamping indirect_sg_entries to %u\n",
4301                         SG_MAX_SEGMENTS);
4302                 indirect_sg_entries = SG_MAX_SEGMENTS;
4303         }
4304
4305         srp_remove_wq = create_workqueue("srp_remove");
4306         if (!srp_remove_wq) {
4307                 ret = -ENOMEM;
4308                 goto out;
4309         }
4310
4311         ret = -ENOMEM;
4312         ib_srp_transport_template =
4313                 srp_attach_transport(&ib_srp_transport_functions);
4314         if (!ib_srp_transport_template)
4315                 goto destroy_wq;
4316
4317         ret = class_register(&srp_class);
4318         if (ret) {
4319                 pr_err("couldn't register class infiniband_srp\n");
4320                 goto release_tr;
4321         }
4322
4323         ib_sa_register_client(&srp_sa_client);
4324
4325         ret = ib_register_client(&srp_client);
4326         if (ret) {
4327                 pr_err("couldn't register IB client\n");
4328                 goto unreg_sa;
4329         }
4330
4331 out:
4332         return ret;
4333
4334 unreg_sa:
4335         ib_sa_unregister_client(&srp_sa_client);
4336         class_unregister(&srp_class);
4337
4338 release_tr:
4339         srp_release_transport(ib_srp_transport_template);
4340
4341 destroy_wq:
4342         destroy_workqueue(srp_remove_wq);
4343         goto out;
4344 }
4345
4346 static void __exit srp_cleanup_module(void)
4347 {
4348         ib_unregister_client(&srp_client);
4349         ib_sa_unregister_client(&srp_sa_client);
4350         class_unregister(&srp_class);
4351         srp_release_transport(ib_srp_transport_template);
4352         destroy_workqueue(srp_remove_wq);
4353 }
4354
4355 module_init(srp_init_module);
4356 module_exit(srp_cleanup_module);