Ignore:
Timestamp:
Mar 15, 2017, 2:42:58 AM (7 weeks ago)
Author:
brainslayer
Message:

use new squashfs in all kernels

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-4.9/drivers/infiniband/ulp/srp/ib_srp.c

    r31574 r31662  
    367367        struct ib_mr *mr;
    368368        int i, ret = -EINVAL;
    369         enum ib_mr_type mr_type;
    370369
    371370        if (pool_size <= 0)
     
    381380        INIT_LIST_HEAD(&pool->free_list);
    382381
    383         if (device->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG)
    384                 mr_type = IB_MR_TYPE_SG_GAPS;
    385         else
    386                 mr_type = IB_MR_TYPE_MEM_REG;
    387 
    388382        for (i = 0, d = &pool->desc[0]; i < pool->size; i++, d++) {
    389                 mr = ib_alloc_mr(pd, mr_type, max_page_list_len);
     383                mr = ib_alloc_mr(pd, IB_MR_TYPE_MEM_REG,
     384                                 max_page_list_len);
    390385                if (IS_ERR(mr)) {
    391386                        ret = PTR_ERR(mr);
     
    18781873                spin_lock_irqsave(&ch->lock, flags);
    18791874                ch->req_lim += be32_to_cpu(rsp->req_lim_delta);
     1875                if (rsp->tag == ch->tsk_mgmt_tag) {
     1876                        ch->tsk_mgmt_status = -1;
     1877                        if (be32_to_cpu(rsp->resp_data_len) >= 4)
     1878                                ch->tsk_mgmt_status = rsp->data[3];
     1879                        complete(&ch->tsk_mgmt_done);
     1880                } else {
     1881                        shost_printk(KERN_ERR, target->scsi_host,
     1882                                     "Received tsk mgmt response too late for tag %#llx\n",
     1883                                     rsp->tag);
     1884                }
    18801885                spin_unlock_irqrestore(&ch->lock, flags);
    1881 
    1882                 ch->tsk_mgmt_status = -1;
    1883                 if (be32_to_cpu(rsp->resp_data_len) >= 4)
    1884                         ch->tsk_mgmt_status = rsp->data[3];
    1885                 complete(&ch->tsk_mgmt_done);
    18861886        } else {
    18871887                scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag);
    1888                 if (scmnd) {
     1888                if (scmnd && scmnd->host_scribble) {
    18891889                        req = (void *)scmnd->host_scribble;
    18901890                        scmnd = srp_claim_req(ch, req, NULL, scmnd);
     1891                } else {
     1892                        scmnd = NULL;
    18911893                }
    18921894                if (!scmnd) {
     
    25202522
    25212523static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, u64 lun,
    2522                              u8 func)
     2524                             u8 func, u8 *status)
    25232525{
    25242526        struct srp_target_port *target = ch->target;
     
    25272529        struct srp_iu *iu;
    25282530        struct srp_tsk_mgmt *tsk_mgmt;
     2531        int res;
    25292532
    25302533        if (!ch->connected || target->qp_in_error)
    25312534                return -1;
    2532 
    2533         init_completion(&ch->tsk_mgmt_done);
    25342535
    25352536        /*
     
    25552556        tsk_mgmt->opcode        = SRP_TSK_MGMT;
    25562557        int_to_scsilun(lun, &tsk_mgmt->lun);
    2557         tsk_mgmt->tag           = req_tag | SRP_TAG_TSK_MGMT;
    25582558        tsk_mgmt->tsk_mgmt_func = func;
    25592559        tsk_mgmt->task_tag      = req_tag;
     2560
     2561        spin_lock_irq(&ch->lock);
     2562        ch->tsk_mgmt_tag = (ch->tsk_mgmt_tag + 1) | SRP_TAG_TSK_MGMT;
     2563        tsk_mgmt->tag = ch->tsk_mgmt_tag;
     2564        spin_unlock_irq(&ch->lock);
     2565
     2566        init_completion(&ch->tsk_mgmt_done);
    25602567
    25612568        ib_dma_sync_single_for_device(dev, iu->dma, sizeof *tsk_mgmt,
     
    25672574                return -1;
    25682575        }
     2576        res = wait_for_completion_timeout(&ch->tsk_mgmt_done,
     2577                                        msecs_to_jiffies(SRP_ABORT_TIMEOUT_MS));
     2578        if (res > 0 && status)
     2579                *status = ch->tsk_mgmt_status;
    25692580        mutex_unlock(&rport->mutex);
    25702581
    2571         if (!wait_for_completion_timeout(&ch->tsk_mgmt_done,
    2572                                          msecs_to_jiffies(SRP_ABORT_TIMEOUT_MS)))
    2573                 return -1;
    2574 
    2575         return 0;
     2582        WARN_ON_ONCE(res < 0);
     2583
     2584        return res > 0 ? 0 : -1;
    25762585}
    25772586
     
    25992608                     "Sending SRP abort for tag %#x\n", tag);
    26002609        if (srp_send_tsk_mgmt(ch, tag, scmnd->device->lun,
    2601                               SRP_TSK_ABORT_TASK) == 0)
     2610                              SRP_TSK_ABORT_TASK, NULL) == 0)
    26022611                ret = SUCCESS;
    26032612        else if (target->rport->state == SRP_RPORT_LOST)
     
    26172626        struct srp_rdma_ch *ch;
    26182627        int i;
     2628        u8 status;
    26192629
    26202630        shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
     
    26222632        ch = &target->ch[0];
    26232633        if (srp_send_tsk_mgmt(ch, SRP_TAG_NO_REQ, scmnd->device->lun,
    2624                               SRP_TSK_LUN_RESET))
     2634                              SRP_TSK_LUN_RESET, &status))
    26252635                return FAILED;
    2626         if (ch->tsk_mgmt_status)
     2636        if (status)
    26272637                return FAILED;
    26282638
     
    26532663        struct srp_target_port *target = host_to_target(shost);
    26542664        struct srp_device *srp_dev = target->srp_host->srp_dev;
    2655         struct ib_device *ibdev = srp_dev->dev;
    2656 
    2657         if (!(ibdev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
     2665
     2666        if (true)
    26582667                blk_queue_virt_boundary(sdev->request_queue,
    26592668                                        ~srp_dev->mr_page_mask);
Note: See TracChangeset for help on using the changeset viewer.