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

use new squashfs in all kernels

File:
1 edited

Legend:

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

    r29817 r31662  
    17881788                spin_lock_irqsave(&ch->lock, flags);
    17891789                ch->req_lim += be32_to_cpu(rsp->req_lim_delta);
     1790                if (rsp->tag == ch->tsk_mgmt_tag) {
     1791                        ch->tsk_mgmt_status = -1;
     1792                        if (be32_to_cpu(rsp->resp_data_len) >= 4)
     1793                                ch->tsk_mgmt_status = rsp->data[3];
     1794                        complete(&ch->tsk_mgmt_done);
     1795                } else {
     1796                        shost_printk(KERN_ERR, target->scsi_host,
     1797                                     "Received tsk mgmt response too late for tag %#llx\n",
     1798                                     rsp->tag);
     1799                }
    17901800                spin_unlock_irqrestore(&ch->lock, flags);
    1791 
    1792                 ch->tsk_mgmt_status = -1;
    1793                 if (be32_to_cpu(rsp->resp_data_len) >= 4)
    1794                         ch->tsk_mgmt_status = rsp->data[3];
    1795                 complete(&ch->tsk_mgmt_done);
    17961801        } else {
    17971802                scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag);
    1798                 if (scmnd) {
     1803                if (scmnd && scmnd->host_scribble) {
    17991804                        req = (void *)scmnd->host_scribble;
    18001805                        scmnd = srp_claim_req(ch, req, NULL, scmnd);
     1806                } else {
     1807                        scmnd = NULL;
    18011808                }
    18021809                if (!scmnd) {
     
    24702477
    24712478static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, u64 lun,
    2472                              u8 func)
     2479                             u8 func, u8 *status)
    24732480{
    24742481        struct srp_target_port *target = ch->target;
     
    24772484        struct srp_iu *iu;
    24782485        struct srp_tsk_mgmt *tsk_mgmt;
     2486        int res;
    24792487
    24802488        if (!ch->connected || target->qp_in_error)
    24812489                return -1;
    2482 
    2483         init_completion(&ch->tsk_mgmt_done);
    24842490
    24852491        /*
     
    25052511        tsk_mgmt->opcode        = SRP_TSK_MGMT;
    25062512        int_to_scsilun(lun, &tsk_mgmt->lun);
    2507         tsk_mgmt->tag           = req_tag | SRP_TAG_TSK_MGMT;
    25082513        tsk_mgmt->tsk_mgmt_func = func;
    25092514        tsk_mgmt->task_tag      = req_tag;
     2515
     2516        spin_lock_irq(&ch->lock);
     2517        ch->tsk_mgmt_tag = (ch->tsk_mgmt_tag + 1) | SRP_TAG_TSK_MGMT;
     2518        tsk_mgmt->tag = ch->tsk_mgmt_tag;
     2519        spin_unlock_irq(&ch->lock);
     2520
     2521        init_completion(&ch->tsk_mgmt_done);
    25102522
    25112523        ib_dma_sync_single_for_device(dev, iu->dma, sizeof *tsk_mgmt,
     
    25172529                return -1;
    25182530        }
     2531        res = wait_for_completion_timeout(&ch->tsk_mgmt_done,
     2532                                        msecs_to_jiffies(SRP_ABORT_TIMEOUT_MS));
     2533        if (res > 0 && status)
     2534                *status = ch->tsk_mgmt_status;
    25192535        mutex_unlock(&rport->mutex);
    25202536
    2521         if (!wait_for_completion_timeout(&ch->tsk_mgmt_done,
    2522                                          msecs_to_jiffies(SRP_ABORT_TIMEOUT_MS)))
    2523                 return -1;
    2524 
    2525         return 0;
     2537        WARN_ON_ONCE(res < 0);
     2538
     2539        return res > 0 ? 0 : -1;
    25262540}
    25272541
     
    25492563                     "Sending SRP abort for tag %#x\n", tag);
    25502564        if (srp_send_tsk_mgmt(ch, tag, scmnd->device->lun,
    2551                               SRP_TSK_ABORT_TASK) == 0)
     2565                              SRP_TSK_ABORT_TASK, NULL) == 0)
    25522566                ret = SUCCESS;
    25532567        else if (target->rport->state == SRP_RPORT_LOST)
     
    25672581        struct srp_rdma_ch *ch;
    25682582        int i;
     2583        u8 status;
    25692584
    25702585        shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
     
    25722587        ch = &target->ch[0];
    25732588        if (srp_send_tsk_mgmt(ch, SRP_TAG_NO_REQ, scmnd->device->lun,
    2574                               SRP_TSK_LUN_RESET))
     2589                              SRP_TSK_LUN_RESET, &status))
    25752590                return FAILED;
    2576         if (ch->tsk_mgmt_status)
     2591        if (status)
    25772592                return FAILED;
    25782593
Note: See TracChangeset for help on using the changeset viewer.