Lines Matching refs:scmd
1530 struct scsi_cmnd *scmd;
1534 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
1535 if (!scmd)
1537 if (scmd->device->id == id &&
1538 scmd->device->channel == channel)
1560 struct scsi_cmnd *scmd;
1564 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
1565 if (!scmd)
1567 if (scmd->device->id == id &&
1568 scmd->device->channel == channel &&
1569 scmd->device->lun == lun)
1576 * mpt3sas_scsih_scsi_lookup_get - returns scmd entry
1580 * Return: the smid stored scmd pointer.
1581 * Then will dereference the stored scmd pointer.
1586 struct scsi_cmnd *scmd = NULL;
1603 return scmd;
1605 scmd = scsi_host_find_tag(ioc->shost, unique_tag);
1606 if (scmd) {
1607 st = scsi_cmd_priv(scmd);
1609 scmd = NULL;
1612 return scmd;
3038 * @scmd: pointer to scsi command object
3043 _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd)
3045 struct scsi_target *starget = scmd->device->sdev_target;
3059 scsi_print_command(scmd);
3119 * @scmd: pointer to scsi command object
3124 scsih_abort(struct scsi_cmnd *scmd)
3126 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
3128 struct scsiio_tracker *st = scsi_cmd_priv(scmd);
3134 sdev_printk(KERN_INFO, scmd->device, "attempting task abort!"
3135 "scmd(0x%p), outstanding for %u ms & timeout %u ms\n",
3136 scmd, jiffies_to_msecs(jiffies - scmd->jiffies_at_alloc),
3137 (scmd->request->timeout / HZ) * 1000);
3138 _scsih_tm_display_info(ioc, scmd);
3140 sas_device_priv_data = scmd->device->hostdata;
3143 sdev_printk(KERN_INFO, scmd->device,
3144 "device been deleted! scmd(0x%p)\n", scmd);
3145 scmd->result = DID_NO_CONNECT << 16;
3146 scmd->scsi_done(scmd);
3153 sdev_printk(KERN_INFO, scmd->device, "No reference found at "
3154 "driver, assuming scmd(0x%p) might have completed\n", scmd);
3155 scmd->result = DID_RESET << 16;
3164 scmd->result = DID_RESET << 16;
3176 r = mpt3sas_scsih_issue_locked_tm(ioc, handle, scmd->device->channel,
3177 scmd->device->id, scmd->device->lun,
3184 sdev_printk(KERN_INFO, scmd->device, "task abort: %s scmd(0x%p)\n",
3185 ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
3193 * @scmd: pointer to scsi command object
3198 scsih_dev_reset(struct scsi_cmnd *scmd)
3200 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
3209 struct scsi_target *starget = scmd->device->sdev_target;
3212 sdev_printk(KERN_INFO, scmd->device,
3213 "attempting device reset! scmd(0x%p)\n", scmd);
3214 _scsih_tm_display_info(ioc, scmd);
3216 sas_device_priv_data = scmd->device->hostdata;
3219 sdev_printk(KERN_INFO, scmd->device,
3220 "device been deleted! scmd(0x%p)\n", scmd);
3221 scmd->result = DID_NO_CONNECT << 16;
3222 scmd->scsi_done(scmd);
3239 scmd->result = DID_RESET << 16;
3253 r = mpt3sas_scsih_issue_locked_tm(ioc, handle, scmd->device->channel,
3254 scmd->device->id, scmd->device->lun,
3258 if (r == SUCCESS && atomic_read(&scmd->device->device_busy))
3261 sdev_printk(KERN_INFO, scmd->device, "device reset: %s scmd(0x%p)\n",
3262 ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
3274 * @scmd: pointer to scsi command object
3279 scsih_target_reset(struct scsi_cmnd *scmd)
3281 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
3289 struct scsi_target *starget = scmd->device->sdev_target;
3293 "attempting target reset! scmd(0x%p)\n", scmd);
3294 _scsih_tm_display_info(ioc, scmd);
3296 sas_device_priv_data = scmd->device->hostdata;
3300 "target been deleted! scmd(0x%p)\n", scmd);
3301 scmd->result = DID_NO_CONNECT << 16;
3302 scmd->scsi_done(scmd);
3319 scmd->result = DID_RESET << 16;
3332 r = mpt3sas_scsih_issue_locked_tm(ioc, handle, scmd->device->channel,
3333 scmd->device->id, 0,
3340 starget_printk(KERN_INFO, starget, "target reset: %s scmd(0x%p)\n",
3341 ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
3353 * @scmd: pointer to scsi command object
3358 scsih_host_reset(struct scsi_cmnd *scmd)
3360 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
3363 ioc_info(ioc, "attempting host reset! scmd(0x%p)\n", scmd);
3364 scsi_print_command(scmd);
3375 ioc_info(ioc, "host reset: %s scmd(0x%p)\n",
3376 r == SUCCESS ? "SUCCESS" : "FAILED", scmd);
4095 /** _scsih_allow_scmd_to_device - check whether scmd needs to
4098 * @scmd: pointer to scsi command object
4100 * Returns true if scmd can be issued to IOC otherwise returns false.
4103 struct scsi_cmnd *scmd)
4118 switch (scmd->cmnd[0]) {
4791 static int _scsih_set_satl_pending(struct scsi_cmnd *scmd, bool pending)
4793 struct MPT3SAS_DEVICE *priv = scmd->device->hostdata;
4795 if (scmd->cmnd[0] != ATA_12 && scmd->cmnd[0] != ATA_16)
4809 * The flushing out of all pending scmd commands following host reset,
4815 struct scsi_cmnd *scmd;
4821 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
4822 if (!scmd)
4825 _scsih_set_satl_pending(scmd, false);
4826 st = scsi_cmd_priv(scmd);
4828 scsi_dma_unmap(scmd);
4830 scmd->result = DID_NO_CONNECT << 16;
4832 scmd->result = DID_RESET << 16;
4833 scmd->scsi_done(scmd);
4841 * @scmd: pointer to scsi command object
4847 _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
4851 unsigned char prot_op = scsi_get_prot_op(scmd);
4852 unsigned char prot_type = scsi_get_prot_type(scmd);
4878 cpu_to_be32(t10_pi_ref_tag(scmd->request));
4892 cpu_to_le16(scmd->device->sector_size);
4901 * @scmd: pointer to scsi command object
4905 _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
4923 scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, 0x10,
4925 scmd->result = DRIVER_SENSE << 24 | (DID_ABORT << 16) |
4932 * @scmd: pointer to scsi command object
4941 scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
4947 struct request *rq = scmd->request;
4956 scsi_print_command(scmd);
4958 sas_device_priv_data = scmd->device->hostdata;
4960 scmd->result = DID_NO_CONNECT << 16;
4961 scmd->scsi_done(scmd);
4965 if (!(_scsih_allow_scmd_to_device(ioc, scmd))) {
4966 scmd->result = DID_NO_CONNECT << 16;
4967 scmd->scsi_done(scmd);
4976 scmd->result = DID_NO_CONNECT << 16;
4977 scmd->scsi_done(scmd);
4987 scmd->result = DID_NO_CONNECT << 16;
4988 scmd->scsi_done(scmd);
5004 } while (_scsih_set_satl_pending(scmd, true));
5006 if (scmd->sc_data_direction == DMA_FROM_DEVICE)
5008 else if (scmd->sc_data_direction == DMA_TO_DEVICE)
5024 if (((!ioc->is_warpdrive && !scsih_is_raid(&scmd->device->sdev_gendev))
5025 && !scsih_is_nvme(&scmd->device->sdev_gendev))
5026 && sas_is_tlr_enabled(scmd->device) && scmd->cmd_len != 32)
5029 smid = mpt3sas_base_get_smid_scsiio(ioc, ioc->scsi_io_cb_idx, scmd);
5032 _scsih_set_satl_pending(scmd, false);
5037 _scsih_setup_eedp(ioc, scmd, mpi_request);
5039 if (scmd->cmd_len == 32)
5048 mpi_request->DataLength = cpu_to_le32(scsi_bufflen(scmd));
5050 mpi_request->IoFlags = cpu_to_le16(scmd->cmd_len);
5058 memcpy(mpi_request->CDB.CDB32, scmd->cmnd, scmd->cmd_len);
5062 if (ioc->build_sg_scmd(ioc, scmd, smid, pcie_device)) {
5064 _scsih_set_satl_pending(scmd, false);
5072 mpt3sas_setup_direct_io(ioc, scmd,
5077 mpi_request->IoFlags = cpu_to_le16(scmd->cmd_len |
5115 * @scmd: pointer to scsi command object
5124 _scsih_scsi_ioc_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
5139 struct scsi_target *starget = scmd->device->sdev_target;
5266 scsi_print_command(scmd);
5303 scsi_bufflen(scmd), scmd->underflow, scsi_get_resid(scmd));
5306 le32_to_cpu(mpi_reply->TransferCount), scmd->result);
5312 _scsih_normalize_sense(scmd->sense_buffer, &data);
5513 struct scsi_cmnd *scmd;
5525 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
5526 if (scmd == NULL)
5529 _scsih_set_satl_pending(scmd, false);
5534 scmd->result = DID_OK << 16;
5538 sas_device_priv_data = scmd->device->hostdata;
5541 scmd->result = DID_NO_CONNECT << 16;
5550 st = scsi_cmd_priv(scmd);
5555 st->scmd = scmd;
5556 memcpy(mpi_request->CDB.CDB32, scmd->cmnd, scmd->cmd_len);
5571 !scsih_is_raid(&scmd->device->sdev_gendev) &&
5572 !scsih_is_nvme(&scmd->device->sdev_gendev))
5573 && sas_is_tlr_enabled(scmd->device) &&
5575 sas_disable_tlr(scmd->device);
5576 sdev_printk(KERN_INFO, scmd->device, "TLR disabled\n");
5581 scsi_set_resid(scmd, scsi_bufflen(scmd) - xfer_cnt);
5602 memcpy(scmd->sense_buffer, sense_data, sz);
5603 _scsih_normalize_sense(scmd->sense_buffer, &data);
5611 ((scmd->sense_buffer[2] == UNIT_ATTENTION) ||
5612 (scmd->sense_buffer[2] == MEDIUM_ERROR) ||
5613 (scmd->sense_buffer[2] == HARDWARE_ERROR)))
5614 _scsih_scsi_ioc_info(ioc, scmd, mpi_reply, smid);
5619 scmd->result = SAM_STAT_BUSY;
5623 scmd->result = DID_NO_CONNECT << 16;
5628 scmd->result = DID_TRANSPORT_DISRUPTED << 16;
5632 if (scmd->retries > 2) {
5633 scmd->result = DID_NO_CONNECT << 16;
5634 scsi_device_set_state(scmd->device,
5637 scmd->result = DID_SOFT_ERROR << 16;
5638 scmd->device->expecting_cc_ua = 1;
5642 scmd->result = DID_RESET << 16;
5644 } else if ((scmd->device->channel == RAID_CHANNEL) &&
5647 scmd->result = DID_RESET << 16;
5650 scmd->result = DID_SOFT_ERROR << 16;
5654 scmd->result = DID_RESET << 16;
5658 if ((xfer_cnt == 0) || (scmd->underflow > xfer_cnt))
5659 scmd->result = DID_SOFT_ERROR << 16;
5661 scmd->result = (DID_OK << 16) | scsi_status;
5665 scmd->result = (DID_OK << 16) | scsi_status;
5670 if (xfer_cnt < scmd->underflow) {
5672 scmd->result = SAM_STAT_BUSY;
5674 scmd->result = DID_SOFT_ERROR << 16;
5677 scmd->result = DID_SOFT_ERROR << 16;
5679 scmd->result = DID_RESET << 16;
5680 else if (!xfer_cnt && scmd->cmnd[0] == REPORT_LUNS) {
5683 scmd->result = (DRIVER_SENSE << 24) |
5685 scmd->sense_buffer[0] = 0x70;
5686 scmd->sense_buffer[2] = ILLEGAL_REQUEST;
5687 scmd->sense_buffer[12] = 0x20;
5688 scmd->sense_buffer[13] = 0;
5693 scsi_set_resid(scmd, 0);
5697 scmd->result = (DID_OK << 16) | scsi_status;
5702 scmd->result = DID_SOFT_ERROR << 16;
5704 scmd->result = DID_RESET << 16;
5710 _scsih_eedp_error_handling(scmd, ioc_status);
5723 scmd->result = DID_SOFT_ERROR << 16;
5728 if (scmd->result && (ioc->logging_level & MPT_DEBUG_REPLY))
5729 _scsih_scsi_ioc_info(ioc , scmd, mpi_reply, smid);
5733 scsi_dma_unmap(scmd);
5735 scmd->scsi_done(scmd);
7682 struct scsi_cmnd *scmd;
7724 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
7725 if (!scmd)
7727 st = scsi_cmd_priv(scmd);
7728 sdev = scmd->device;
7759 "QUERY_TASK: scmd(%p)\n", scmd);
7767 "query task: FAILED with IOCSTATUS(0x%04x), scmd(%p)\n",
7768 ioc_status, scmd);
7800 "scmd(%p)\n", scmd);
7807 " scmd(%p)\n",
7808 task_abort_retries - 1, scmd);