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