Lines Matching refs:scmd
1694 struct scsi_cmnd *scmd;
1698 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
1699 if (!scmd)
1701 if (scmd->device->id == id &&
1702 scmd->device->channel == channel)
1724 struct scsi_cmnd *scmd;
1728 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
1729 if (!scmd)
1731 if (scmd->device->id == id &&
1732 scmd->device->channel == channel &&
1733 scmd->device->lun == lun)
1740 * mpt3sas_scsih_scsi_lookup_get - returns scmd entry
1744 * Return: the smid stored scmd pointer.
1745 * Then will dereference the stored scmd pointer.
1750 struct scsi_cmnd *scmd = NULL;
1769 return scmd;
1771 scmd = scsi_host_find_tag(ioc->shost, unique_tag);
1772 if (scmd) {
1773 st = scsi_cmd_priv(scmd);
1775 scmd = NULL;
1778 return scmd;
3208 * @scmd: pointer to scsi command object
3213 _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd)
3215 struct scsi_target *starget = scmd->device->sdev_target;
3229 scsi_print_command(scmd);
3289 * @scmd: pointer to scsi command object
3294 scsih_abort(struct scsi_cmnd *scmd)
3296 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
3298 struct scsiio_tracker *st = scsi_cmd_priv(scmd);
3304 sdev_printk(KERN_INFO, scmd->device, "attempting task abort!"
3305 "scmd(0x%p), outstanding for %u ms & timeout %u ms\n",
3306 scmd, jiffies_to_msecs(jiffies - scmd->jiffies_at_alloc),
3307 (scsi_cmd_to_rq(scmd)->timeout / HZ) * 1000);
3308 _scsih_tm_display_info(ioc, scmd);
3310 sas_device_priv_data = scmd->device->hostdata;
3313 sdev_printk(KERN_INFO, scmd->device,
3314 "device been deleted! scmd(0x%p)\n", scmd);
3315 scmd->result = DID_NO_CONNECT << 16;
3316 scsi_done(scmd);
3323 sdev_printk(KERN_INFO, scmd->device, "No reference found at "
3324 "driver, assuming scmd(0x%p) might have completed\n", scmd);
3325 scmd->result = DID_RESET << 16;
3334 scmd->result = DID_RESET << 16;
3346 r = mpt3sas_scsih_issue_locked_tm(ioc, handle, scmd->device->channel,
3347 scmd->device->id, scmd->device->lun,
3354 sdev_printk(KERN_INFO, scmd->device, "task abort: %s scmd(0x%p)\n",
3355 ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
3363 * @scmd: pointer to scsi command object
3368 scsih_dev_reset(struct scsi_cmnd *scmd)
3370 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
3379 struct scsi_target *starget = scmd->device->sdev_target;
3382 sdev_printk(KERN_INFO, scmd->device,
3383 "attempting device reset! scmd(0x%p)\n", scmd);
3384 _scsih_tm_display_info(ioc, scmd);
3386 sas_device_priv_data = scmd->device->hostdata;
3389 sdev_printk(KERN_INFO, scmd->device,
3390 "device been deleted! scmd(0x%p)\n", scmd);
3391 scmd->result = DID_NO_CONNECT << 16;
3392 scsi_done(scmd);
3409 scmd->result = DID_RESET << 16;
3423 r = mpt3sas_scsih_issue_locked_tm(ioc, handle, scmd->device->channel,
3424 scmd->device->id, scmd->device->lun,
3428 if (r == SUCCESS && scsi_device_busy(scmd->device))
3431 sdev_printk(KERN_INFO, scmd->device, "device reset: %s scmd(0x%p)\n",
3432 ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
3444 * @scmd: pointer to scsi command object
3449 scsih_target_reset(struct scsi_cmnd *scmd)
3451 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
3459 struct scsi_target *starget = scmd->device->sdev_target;
3463 "attempting target reset! scmd(0x%p)\n", scmd);
3464 _scsih_tm_display_info(ioc, scmd);
3466 sas_device_priv_data = scmd->device->hostdata;
3470 "target been deleted! scmd(0x%p)\n", scmd);
3471 scmd->result = DID_NO_CONNECT << 16;
3472 scsi_done(scmd);
3489 scmd->result = DID_RESET << 16;
3502 r = mpt3sas_scsih_issue_locked_tm(ioc, handle, scmd->device->channel,
3503 scmd->device->id, 0,
3510 starget_printk(KERN_INFO, starget, "target reset: %s scmd(0x%p)\n",
3511 ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
3523 * @scmd: pointer to scsi command object
3528 scsih_host_reset(struct scsi_cmnd *scmd)
3530 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
3533 ioc_info(ioc, "attempting host reset! scmd(0x%p)\n", scmd);
3534 scsi_print_command(scmd);
3545 ioc_info(ioc, "host reset: %s scmd(0x%p)\n",
3546 r == SUCCESS ? "SUCCESS" : "FAILED", scmd);
4294 /** _scsih_allow_scmd_to_device - check whether scmd needs to
4297 * @scmd: pointer to scsi command object
4299 * Returns true if scmd can be issued to IOC otherwise returns false.
4302 struct scsi_cmnd *scmd)
4317 switch (scmd->cmnd[0]) {
4990 static int _scsih_set_satl_pending(struct scsi_cmnd *scmd, bool pending)
4992 struct MPT3SAS_DEVICE *priv = scmd->device->hostdata;
4994 if (scmd->cmnd[0] != ATA_12 && scmd->cmnd[0] != ATA_16)
5008 * The flushing out of all pending scmd commands following host reset,
5014 struct scsi_cmnd *scmd;
5020 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
5021 if (!scmd)
5024 _scsih_set_satl_pending(scmd, false);
5025 st = scsi_cmd_priv(scmd);
5027 scsi_dma_unmap(scmd);
5029 scmd->result = DID_NO_CONNECT << 16;
5031 scmd->result = DID_RESET << 16;
5032 scsi_done(scmd);
5040 * @scmd: pointer to scsi command object
5046 _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
5053 switch (scsi_get_prot_op(scmd)) {
5064 if (scmd->prot_flags & SCSI_PROT_GUARD_CHECK)
5067 if (scmd->prot_flags & SCSI_PROT_REF_CHECK)
5070 if (scmd->prot_flags & SCSI_PROT_REF_INCREMENT) {
5074 cpu_to_be32(scsi_prot_ref_tag(scmd));
5077 mpi_request_3v->EEDPBlockSize = cpu_to_le16(scsi_prot_interval(scmd));
5086 * @scmd: pointer to scsi command object
5090 _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
5108 scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x10, ascq);
5109 set_host_byte(scmd, DID_ABORT);
5115 * @scmd: pointer to scsi command object
5124 scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
5130 struct request *rq = scsi_cmd_to_rq(scmd);
5139 scsi_print_command(scmd);
5141 sas_device_priv_data = scmd->device->hostdata;
5143 scmd->result = DID_NO_CONNECT << 16;
5144 scsi_done(scmd);
5148 if (!(_scsih_allow_scmd_to_device(ioc, scmd))) {
5149 scmd->result = DID_NO_CONNECT << 16;
5150 scsi_done(scmd);
5163 if (scmd->device->host->shost_state == SHOST_RECOVERY &&
5164 scmd->cmnd[0] == TEST_UNIT_READY) {
5165 scsi_build_sense(scmd, 0, UNIT_ATTENTION, 0x29, 0x07);
5166 scsi_done(scmd);
5172 scmd->result = DID_NO_CONNECT << 16;
5173 scsi_done(scmd);
5183 scmd->result = DID_NO_CONNECT << 16;
5184 scsi_done(scmd);
5200 } while (_scsih_set_satl_pending(scmd, true));
5202 if (scmd->sc_data_direction == DMA_FROM_DEVICE)
5204 else if (scmd->sc_data_direction == DMA_TO_DEVICE)
5220 if (((!ioc->is_warpdrive && !scsih_is_raid(&scmd->device->sdev_gendev))
5221 && !scsih_is_nvme(&scmd->device->sdev_gendev))
5222 && sas_is_tlr_enabled(scmd->device) && scmd->cmd_len != 32)
5225 smid = mpt3sas_base_get_smid_scsiio(ioc, ioc->scsi_io_cb_idx, scmd);
5228 _scsih_set_satl_pending(scmd, false);
5233 _scsih_setup_eedp(ioc, scmd, mpi_request);
5235 if (scmd->cmd_len == 32)
5244 mpi_request->DataLength = cpu_to_le32(scsi_bufflen(scmd));
5246 mpi_request->IoFlags = cpu_to_le16(scmd->cmd_len);
5254 memcpy(mpi_request->CDB.CDB32, scmd->cmnd, scmd->cmd_len);
5258 if (ioc->build_sg_scmd(ioc, scmd, smid, pcie_device)) {
5260 _scsih_set_satl_pending(scmd, false);
5268 mpt3sas_setup_direct_io(ioc, scmd,
5273 mpi_request->IoFlags = cpu_to_le16(scmd->cmd_len |
5311 * @scmd: pointer to scsi command object
5320 _scsih_scsi_ioc_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
5335 struct scsi_target *starget = scmd->device->sdev_target;
5462 scsi_print_command(scmd);
5499 scsi_bufflen(scmd), scmd->underflow, scsi_get_resid(scmd));
5502 le32_to_cpu(mpi_reply->TransferCount), scmd->result);
5508 _scsih_normalize_sense(scmd->sense_buffer, &data);
5709 struct scsi_cmnd *scmd;
5721 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
5722 if (scmd == NULL)
5725 _scsih_set_satl_pending(scmd, false);
5730 scmd->result = DID_OK << 16;
5734 sas_device_priv_data = scmd->device->hostdata;
5737 scmd->result = DID_NO_CONNECT << 16;
5746 st = scsi_cmd_priv(scmd);
5751 st->scmd = scmd;
5752 memcpy(mpi_request->CDB.CDB32, scmd->cmnd, scmd->cmd_len);
5767 !scsih_is_raid(&scmd->device->sdev_gendev) &&
5768 !scsih_is_nvme(&scmd->device->sdev_gendev))
5769 && sas_is_tlr_enabled(scmd->device) &&
5771 sas_disable_tlr(scmd->device);
5772 sdev_printk(KERN_INFO, scmd->device, "TLR disabled\n");
5777 scsi_set_resid(scmd, scsi_bufflen(scmd) - xfer_cnt);
5798 memcpy(scmd->sense_buffer, sense_data, sz);
5799 _scsih_normalize_sense(scmd->sense_buffer, &data);
5807 ((scmd->sense_buffer[2] == UNIT_ATTENTION) ||
5808 (scmd->sense_buffer[2] == MEDIUM_ERROR) ||
5809 (scmd->sense_buffer[2] == HARDWARE_ERROR)))
5810 _scsih_scsi_ioc_info(ioc, scmd, mpi_reply, smid);
5815 scmd->result = SAM_STAT_BUSY;
5819 scmd->result = DID_NO_CONNECT << 16;
5824 scmd->result = DID_TRANSPORT_DISRUPTED << 16;
5828 if (scmd->retries > 2) {
5829 scmd->result = DID_NO_CONNECT << 16;
5830 scsi_device_set_state(scmd->device,
5833 scmd->result = DID_SOFT_ERROR << 16;
5834 scmd->device->expecting_cc_ua = 1;
5838 scmd->result = DID_RESET << 16;
5840 } else if ((scmd->device->channel == RAID_CHANNEL) &&
5843 scmd->result = DID_RESET << 16;
5846 scmd->result = DID_SOFT_ERROR << 16;
5850 scmd->result = DID_RESET << 16;
5854 if ((xfer_cnt == 0) || (scmd->underflow > xfer_cnt))
5855 scmd->result = DID_SOFT_ERROR << 16;
5857 scmd->result = (DID_OK << 16) | scsi_status;
5861 scmd->result = (DID_OK << 16) | scsi_status;
5866 if (xfer_cnt < scmd->underflow) {
5868 scmd->result = SAM_STAT_BUSY;
5870 scmd->result = DID_SOFT_ERROR << 16;
5873 scmd->result = DID_SOFT_ERROR << 16;
5875 scmd->result = DID_RESET << 16;
5876 else if (!xfer_cnt && scmd->cmnd[0] == REPORT_LUNS) {
5879 scsi_build_sense(scmd, 0, ILLEGAL_REQUEST,
5885 scsi_set_resid(scmd, 0);
5889 scmd->result = (DID_OK << 16) | scsi_status;
5894 scmd->result = DID_SOFT_ERROR << 16;
5896 scmd->result = DID_RESET << 16;
5902 _scsih_eedp_error_handling(scmd, ioc_status);
5915 scmd->result = DID_SOFT_ERROR << 16;
5920 if (scmd->result && (ioc->logging_level & MPT_DEBUG_REPLY))
5921 _scsih_scsi_ioc_info(ioc , scmd, mpi_reply, smid);
5925 scsi_dma_unmap(scmd);
5927 scsi_done(scmd);
8658 struct scsi_cmnd *scmd;
8700 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
8701 if (!scmd)
8703 st = scsi_cmd_priv(scmd);
8704 sdev = scmd->device;
8735 "QUERY_TASK: scmd(%p)\n", scmd);
8743 "query task: FAILED with IOCSTATUS(0x%04x), scmd(%p)\n",
8744 ioc_status, scmd);
8776 "scmd(%p)\n", scmd);
8783 " scmd(%p)\n",
8784 task_abort_retries - 1, scmd);