| /linux/Documentation/translations/zh_CN/scsi/ |
| H A D | scsi_eh.rst | 25 [1-2] scmd(SCSI 命令)是如何完成的? 26 [1-2-1] 通过scsi_done完成scmd 27 [1-2-2] 通过超时机制完成scmd 32 [2-1-2] scmd在错误处理流程中的传递路径 46 每个SCSI命令都由struct scsi_cmnd(简称scmd)结构体 47 表示。scmd包含两个list_head类型的链表节点:scmd->list 48 与scmd->eh_entry。其中scmd->list是用于空闲链表或设备 49 专属的scmd分配链表,与错误处理讨论关联不大。而 50 scmd->eh_entry则是专用于命令完成和错误处理链表,除非 51 特别说明,本文讨论中所有scmd的链表操作均通过 [all …]
|
| /linux/drivers/scsi/ |
| H A D | scsi_error.c | 60 static int scsi_eh_try_stu(struct scsi_cmnd *scmd); 169 struct scsi_cmnd *scmd = in scmd_eh_abort_handler() local 171 struct scsi_device *sdev = scmd->device; in scmd_eh_abort_handler() 178 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler() 184 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler() 186 rtn = scsi_try_to_abort_cmd(shost->hostt, scmd); in scmd_eh_abort_handler() 189 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler() 195 set_host_byte(scmd, DID_TIME_OUT); in scmd_eh_abort_handler() 198 scmd_printk(KERN_INFO, scmd, in scmd_eh_abort_handler() 205 list_del_init(&scmd->eh_entry); in scmd_eh_abort_handler() [all …]
|
| H A D | scsi_bsg.c | 37 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); in scsi_bsg_uring_task_cb() local 46 if (scsi_status_is_check_condition(scmd->result)) { in scsi_bsg_uring_task_cb() 50 scmd->sense_len); in scsi_bsg_uring_task_cb() 54 if (copy_to_user(uptr64(pdu->response_addr), scmd->sense_buffer, in scsi_bsg_uring_task_cb() 59 res2 = bsg_scsi_res2_build(status_byte(scmd->result), driver_status, in scsi_bsg_uring_task_cb() 60 host_byte(scmd->result), sense_len_wr, in scsi_bsg_uring_task_cb() 61 scmd->resid_len); in scsi_bsg_uring_task_cb() 108 struct scsi_cmnd *scmd; in scsi_bsg_uring_cmd() local 145 scmd = blk_mq_rq_to_pdu(req); in scsi_bsg_uring_cmd() 146 if (request_len > sizeof(scmd->cmnd)) { in scsi_bsg_uring_cmd() [all …]
|
| H A D | myrb.c | 1254 static int myrb_host_reset(struct scsi_cmnd *scmd) in myrb_host_reset() argument 1256 struct Scsi_Host *shost = scmd->device->host; in myrb_host_reset() 1264 struct scsi_cmnd *scmd) in myrb_pthru_queuecommand() argument 1266 struct request *rq = scsi_cmd_to_rq(scmd); in myrb_pthru_queuecommand() 1268 struct myrb_cmdblk *cmd_blk = scsi_cmd_priv(scmd); in myrb_pthru_queuecommand() 1272 struct scsi_device *sdev = scmd->device; in myrb_pthru_queuecommand() 1281 nsge = scsi_dma_map(scmd); in myrb_pthru_queuecommand() 1284 scmd->result = (DID_ERROR << 16); in myrb_pthru_queuecommand() 1285 scsi_done(scmd); in myrb_pthru_queuecommand() 1294 switch (scmd->sc_data_direction) { in myrb_pthru_queuecommand() [all …]
|
| H A D | mvumi.c | 189 static int mvumi_make_sgl(struct mvumi_hba *mhba, struct scsi_cmnd *scmd, in mvumi_make_sgl() argument 195 unsigned int sgnum = scsi_sg_count(scmd); in mvumi_make_sgl() 198 *sg_count = dma_map_sg(&mhba->pdev->dev, scsi_sglist(scmd), sgnum, in mvumi_make_sgl() 199 scmd->sc_data_direction); in mvumi_make_sgl() 204 dma_unmap_sg(&mhba->pdev->dev, scsi_sglist(scmd), sgnum, in mvumi_make_sgl() 205 scmd->sc_data_direction); in mvumi_make_sgl() 208 scsi_for_each_sg(scmd, sg, *sg_count, i) { in mvumi_make_sgl() 338 cmd->scmd = NULL; in mvumi_return_cmd() 698 static int mvumi_host_reset(struct scsi_cmnd *scmd) in mvumi_host_reset() argument 702 mhba = (struct mvumi_hba *) scmd->device->host->hostdata; in mvumi_host_reset() [all …]
|
| H A D | myrs.c | 1532 static int myrs_host_reset(struct scsi_cmnd *scmd) in myrs_host_reset() argument 1534 struct Scsi_Host *shost = scmd->device->host; in myrs_host_reset() 1541 static void myrs_mode_sense(struct myrs_hba *cs, struct scsi_cmnd *scmd, in myrs_mode_sense() argument 1548 dbd = (scmd->cmnd[1] & 0x08) == 0x08; in myrs_mode_sense() 1581 scsi_sg_copy_from_buffer(scmd, modes, mode_len); in myrs_mode_sense() 1585 struct scsi_cmnd *scmd) in myrs_queuecommand() argument 1587 struct request *rq = scsi_cmd_to_rq(scmd); in myrs_queuecommand() 1589 struct myrs_cmdblk *cmd_blk = scsi_cmd_priv(scmd); in myrs_queuecommand() 1591 struct scsi_device *sdev = scmd->device; in myrs_queuecommand() 1598 if (!scmd->device->hostdata) { in myrs_queuecommand() [all …]
|
| H A D | sr.c | 933 struct scsi_cmnd *scmd; in sr_read_cdda_bpc() local 941 scmd = blk_mq_rq_to_pdu(rq); in sr_read_cdda_bpc() 947 scmd->cmnd[0] = GPCMD_READ_CD; in sr_read_cdda_bpc() 948 scmd->cmnd[1] = 1 << 2; in sr_read_cdda_bpc() 949 scmd->cmnd[2] = (lba >> 24) & 0xff; in sr_read_cdda_bpc() 950 scmd->cmnd[3] = (lba >> 16) & 0xff; in sr_read_cdda_bpc() 951 scmd->cmnd[4] = (lba >> 8) & 0xff; in sr_read_cdda_bpc() 952 scmd->cmnd[5] = lba & 0xff; in sr_read_cdda_bpc() 953 scmd->cmnd[6] = (nr >> 16) & 0xff; in sr_read_cdda_bpc() 954 scmd->cmnd[7] = (nr >> 8) & 0xff; in sr_read_cdda_bpc() [all …]
|
| H A D | scsi_lib.c | 212 static int scsi_check_passthrough(struct scsi_cmnd *scmd, in scsi_check_passthrough() argument 219 if (!scmd->result) in scsi_check_passthrough() 230 if (host_byte(scmd->result) && in scsi_check_passthrough() 231 host_byte(scmd->result) == host_byte(failure->result)) in scsi_check_passthrough() 234 status = status_byte(scmd->result); in scsi_check_passthrough() 239 !scsi_status_is_good(scmd->result)) in scsi_check_passthrough() 249 if (!scsi_command_normalize_sense(scmd, &sshdr)) in scsi_check_passthrough() 303 struct scsi_cmnd *scmd; in scsi_execute_cmd() local 322 scmd = blk_mq_rq_to_pdu(req); in scsi_execute_cmd() 323 scmd->cmd_len = COMMAND_SIZE(cmd[0]); in scsi_execute_cmd() [all …]
|
| H A D | scsi_priv.h | 43 #define SCSI_SENSE_VALID(scmd) \ argument 44 (((scmd)->sense_buffer[0] & 0x70) == 0x70) 101 bool scsi_noretry_cmd(struct scsi_cmnd *scmd); 102 void scsi_eh_done(struct scsi_cmnd *scmd);
|
| H A D | scsi_logging.c | 29 static inline const char *scmd_name(struct scsi_cmnd *scmd) in scmd_name() argument 31 const struct request *rq = scsi_cmd_to_rq(scmd); in scmd_name() 83 void scmd_printk(const char *level, struct scsi_cmnd *scmd, const char *fmt, in scmd_printk() argument 90 if (!scmd) in scmd_printk() 96 off = sdev_format_header(logbuf, logbuf_len, scmd_name(scmd), in scmd_printk() 97 scsi_cmd_to_rq(scmd)->tag); in scmd_printk() 103 dev_printk(level, &scmd->device->sdev_gendev, "%s", logbuf); in scmd_printk()
|
| H A D | st.c | 487 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req); in st_do_stats() local 491 if (scmd->cmnd[0] == WRITE_6) { in st_do_stats() 496 if (scmd->result) { in st_do_stats() 505 } else if (scmd->cmnd[0] == READ_6) { in st_do_stats() 510 if (scmd->result) { in st_do_stats() 531 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req); in st_scsi_execute_end() local 536 STp->buffer->cmdstat.midlevel_result = SRpnt->result = scmd->result; in st_scsi_execute_end() 537 STp->buffer->cmdstat.residual = scmd->resid_len; in st_scsi_execute_end() 542 if (scmd->sense_len) in st_scsi_execute_end() 543 memcpy(SRpnt->sense, scmd->sense_buffer, SCSI_SENSE_BUFFERSIZE); in st_scsi_execute_end() [all …]
|
| /linux/include/scsi/ |
| H A D | scsi_cmnd.h | 147 static inline struct request *scsi_cmd_to_rq(struct scsi_cmnd *scmd) in scsi_cmd_to_rq() argument 149 return blk_mq_rq_from_pdu(scmd); in scsi_cmd_to_rq() 223 static inline sector_t scsi_get_sector(struct scsi_cmnd *scmd) in scsi_get_sector() argument 225 return blk_rq_pos(scsi_cmd_to_rq(scmd)); in scsi_get_sector() 228 static inline sector_t scsi_get_lba(struct scsi_cmnd *scmd) in scsi_get_lba() argument 230 unsigned int shift = ilog2(scmd->device->sector_size) - SECTOR_SHIFT; in scsi_get_lba() 232 return blk_rq_pos(scsi_cmd_to_rq(scmd)) >> shift; in scsi_get_lba() 235 static inline unsigned int scsi_logical_block_count(struct scsi_cmnd *scmd) in scsi_logical_block_count() argument 237 unsigned int shift = ilog2(scmd->device->sector_size); in scsi_logical_block_count() 239 return blk_rq_bytes(scsi_cmd_to_rq(scmd)) >> shift; in scsi_logical_block_count() [all …]
|
| H A D | scsi_eh.h | 12 extern void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, 52 extern void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, 56 extern void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd,
|
| H A D | scsi_device.h | 326 #define scmd_dbg(scmd, fmt, a...) \ argument 328 struct request *__rq = scsi_cmd_to_rq((scmd)); \ 331 sdev_dbg((scmd)->device, "[%s] " fmt, \ 334 sdev_dbg((scmd)->device, fmt, ##a); \ 570 void scsi_put_internal_cmd(struct scsi_cmnd *scmd); 600 #define scmd_id(scmd) sdev_id((scmd)->device) argument 601 #define scmd_channel(scmd) sdev_channel((scmd)->device) argument
|
| /linux/drivers/scsi/mpi3mr/ |
| H A D | mpi3mr_os.c | 69 struct scsi_cmnd *scmd) in mpi3mr_host_tag_for_scmd() argument 75 unique_tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd)); in mpi3mr_host_tag_for_scmd() 85 priv = scsi_cmd_priv(scmd); in mpi3mr_host_tag_for_scmd() 88 priv->scmd = scmd; in mpi3mr_host_tag_for_scmd() 111 struct scsi_cmnd *scmd = NULL; in mpi3mr_scmd_from_host_tag() local 120 scmd = scsi_host_find_tag(mrioc->shost, unique_tag); in mpi3mr_scmd_from_host_tag() 121 if (scmd) { in mpi3mr_scmd_from_host_tag() 122 priv = scsi_cmd_priv(scmd); in mpi3mr_scmd_from_host_tag() 124 scmd = NULL; in mpi3mr_scmd_from_host_tag() 127 return scmd; in mpi3mr_scmd_from_host_tag() [all …]
|
| /linux/drivers/scsi/leapraid/ |
| H A D | leapraid_os.c | 339 struct scsi_cmnd *scmd, u16 taskid) in leapraid_process_sense_data() argument 352 memcpy(scmd->sense_buffer, sense_data, sz); in leapraid_process_sense_data() 353 leapraid_get_sense_data(scmd->sense_buffer, &data); in leapraid_process_sense_data() 361 struct scsi_cmnd *scmd, u32 xfer_cnt) in leapraid_handle_data_underrun() argument 366 scmd->result = (DID_OK << LEAPRAID_SCSI_HOST_SHIFT) | scsi_status; in leapraid_handle_data_underrun() 371 if (xfer_cnt < scmd->underflow) { in leapraid_handle_data_underrun() 373 scmd->result = SAM_STAT_BUSY; in leapraid_handle_data_underrun() 375 scmd->result = DID_SOFT_ERROR << in leapraid_handle_data_underrun() 379 scmd->result = DID_SOFT_ERROR << LEAPRAID_SCSI_HOST_SHIFT; in leapraid_handle_data_underrun() 381 scmd->result = DID_RESET << LEAPRAID_SCSI_HOST_SHIFT; in leapraid_handle_data_underrun() [all …]
|
| /linux/Documentation/scsi/ |
| H A D | scsi_eh.rst | 15 [1-2] How do scmd's get completed? 16 [1-2-1] Completing a scmd w/ scsi_done 17 [1-2-2] Completing a scmd w/ timeout 36 Each SCSI command is represented with struct scsi_cmnd (== scmd). A 37 scmd has two list_head's to link itself into lists. The two are 38 scmd->list and scmd->eh_entry. The former is used for free list or 39 per-device allocated scmd list and not of much interest to this EH 41 otherwise stated scmds are always linked using scmd->eh_entry in this 45 1.2 How do scmd's get completed? 48 Once LLDD gets hold of a scmd, either the LLDD will complete the [all …]
|
| /linux/drivers/ata/ |
| H A D | libata-scsi.c | 795 struct scsi_cmnd *scmd = qc->scsicmd; 797 qc->extrabytes = scmd->extra_len; 798 qc->nbytes = scsi_bufflen(scmd) + qc->extrabytes; 1062 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); in ata_scsi_dev_config() 1064 return atapi_cmd_type(scmd->cmnd[0]) == ATAPI_MISC; in ata_scsi_dev_config() 1256 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_start_stop_xlat() 1257 const u8 *cdb = scmd->cmnd; in ata_scsi_start_stop_xlat() 1261 if (scmd->cmd_len < 5) { in ata_scsi_start_stop_xlat() 1282 ata_scsi_set_sense(qc->dev, scmd, ABORTED_COMMAND, 0, 0); in ata_scsi_start_stop_xlat() 1296 ata_scsi_set_invalid_field(qc->dev, scmd, f 789 struct scsi_cmnd *scmd = qc->scsicmd; ata_qc_set_pc_nbytes() local 1056 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); ata_scsi_dma_need_drain() local 1250 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_start_stop_xlat() local 1399 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_verify_xlat() local 1513 ata_check_nblocks(struct scsi_cmnd * scmd,u32 n_blocks) ata_check_nblocks() argument 1548 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_rw_xlat() local 1788 ata_scsi_retry_deferred_qc(struct ata_port * ap,struct scsi_cmnd * scmd) ata_scsi_retry_deferred_qc() argument 1801 ata_scsi_eh_timed_out(struct scsi_cmnd * scmd) ata_scsi_eh_timed_out() argument 3089 struct scsi_cmnd *scmd = qc->scsicmd; atapi_xlat() local 3303 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_pass_thru() local 3631 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_write_same_xlat() local 4063 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_report_zones_complete() local 4126 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_zbc_in_xlat() local 4209 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_zbc_out_xlat() local 4475 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_mode_select_xlat() local 4652 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_security_inout_xlat() local 4711 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_get_phys_element_status_complete() local 4783 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_get_phys_element_status_xlat() local 4828 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_remove_element_and_truncate_xlat() local 4871 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_remove_element_and_modify_zones_xlat() local 4901 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_restore_elements_and_rebuild_xlat() local 4933 struct scsi_cmnd *scmd = qc->scsicmd; ata_scsi_var_len_cdb_xlat() local 5103 __ata_scsi_queuecmd(struct scsi_cmnd * scmd,struct ata_device * dev,struct ata_port * ap) __ata_scsi_queuecmd() argument [all...] |
| /linux/drivers/macintosh/ |
| H A D | smu.c | 290 int smu_queue_simple(struct smu_simple_cmd *scmd, u8 command, in smu_queue_simple() argument 295 struct smu_cmd *cmd = &scmd->cmd; in smu_queue_simple() 299 if (data_len > sizeof(scmd->buffer)) in smu_queue_simple() 302 memset(scmd, 0, sizeof(*scmd)); in smu_queue_simple() 305 cmd->data_buf = scmd->buffer; in smu_queue_simple() 306 cmd->reply_len = sizeof(scmd->buffer); in smu_queue_simple() 307 cmd->reply_buf = scmd->buffer; in smu_queue_simple() 313 scmd->buffer[i] = (u8)va_arg(list, int); in smu_queue_simple() 739 list_add_tail(&cmd->scmd.link, &smu->cmd_list); in smu_i2c_complete_command() 760 cmd->scmd.reply_len = sizeof(cmd->pdata); in smu_i2c_retry() [all …]
|
| /linux/drivers/scsi/megaraid/ |
| H A D | megaraid_sas_fusion.c | 225 struct scsi_cmnd *scmd) in megasas_sdev_busy_inc() argument 229 scmd->device->hostdata; in megasas_sdev_busy_inc() 236 struct scsi_cmnd *scmd) in megasas_sdev_busy_dec() argument 240 scmd->device->hostdata; in megasas_sdev_busy_dec() 247 struct scsi_cmnd *scmd) in megasas_sdev_busy_read() argument 251 scmd->device->hostdata; in megasas_sdev_busy_read() 281 cmd->scmd = NULL; in megasas_return_cmd_fusion() 390 struct scsi_cmnd *scmd, in megasas_get_msix_index() argument 395 (megasas_sdev_busy_read(instance, scmd) > in megasas_get_msix_index() 405 u32 tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd)); in megasas_get_msix_index() [all …]
|
| H A D | megaraid_sas_base.c | 235 struct scsi_cmnd *scmd); 363 cmd->scmd = NULL; in megasas_return_cmd() 1693 if (!cmd->scmd) in megasas_dump_pending_frames() 1696 if (megasas_cmd_type(cmd->scmd) == READ_WRITE_LDIO) { in megasas_dump_pending_frames() 1741 struct scsi_cmnd *scmd) in megasas_build_and_issue_cmd() argument 1753 if (megasas_cmd_type(scmd) == READ_WRITE_LDIO) in megasas_build_and_issue_cmd() 1754 frame_count = megasas_build_ldio(instance, scmd, cmd); in megasas_build_and_issue_cmd() 1756 frame_count = megasas_build_dcdb(instance, scmd, cmd); in megasas_build_and_issue_cmd() 1761 cmd->scmd = scmd; in megasas_build_and_issue_cmd() 1762 megasas_priv(scmd)->cmd_priv = cmd; in megasas_build_and_issue_cmd() [all …]
|
| /linux/drivers/scsi/mpt3sas/ |
| H A D | mpt3sas_scsih.c | 1758 struct scsi_cmnd *scmd; in _scsih_scsi_lookup_find_by_target() local 1762 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid); in _scsih_scsi_lookup_find_by_target() 1763 if (!scmd) in _scsih_scsi_lookup_find_by_target() 1765 if (scmd->device->id == id && in _scsih_scsi_lookup_find_by_target() 1766 scmd->device->channel == channel) in _scsih_scsi_lookup_find_by_target() 1788 struct scsi_cmnd *scmd; in _scsih_scsi_lookup_find_by_lun() local 1792 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid); in _scsih_scsi_lookup_find_by_lun() 1793 if (!scmd) in _scsih_scsi_lookup_find_by_lun() 1795 if (scmd->device->id == id && in _scsih_scsi_lookup_find_by_lun() 1796 scmd->device->channel == channel && in _scsih_scsi_lookup_find_by_lun() [all …]
|
| H A D | mpt3sas_warpdrive.c | 255 mpt3sas_setup_direct_io(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, in mpt3sas_setup_direct_io() argument 260 u8 num_pds, cmd = scmd->cmnd[0]; in mpt3sas_setup_direct_io() 261 struct scsiio_tracker *st = scsi_cmd_priv(scmd); in mpt3sas_setup_direct_io() 272 io_size = scsi_bufflen(scmd) >> raid_device->block_exponent; in mpt3sas_setup_direct_io()
|
| /linux/drivers/target/ |
| H A D | target_core_pscsi.c | 938 struct scsi_cmnd *scmd; in pscsi_execute_cmd() local 957 scmd = blk_mq_rq_to_pdu(req); in pscsi_execute_cmd() 958 scmd->cmd_len = scsi_command_size(cmd->t_task_cdb); in pscsi_execute_cmd() 959 if (scmd->cmd_len > sizeof(scmd->cmnd)) { in pscsi_execute_cmd() 963 memcpy(scmd->cmnd, cmd->t_task_cdb, scmd->cmd_len); in pscsi_execute_cmd() 970 scmd->allowed = PS_RETRY; in pscsi_execute_cmd() 972 cmd->priv = scmd->cmnd; in pscsi_execute_cmd() 1009 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req); in pscsi_req_done() local 1010 enum sam_status scsi_status = scmd->result & 0xff; in pscsi_req_done() 1011 int valid_data = cmd->data_length - scmd->resid_len; in pscsi_req_done() [all …]
|
| /linux/arch/powerpc/include/asm/ |
| H A D | smu.h | 427 extern int smu_queue_simple(struct smu_simple_cmd *scmd, u8 command, 445 static inline void smu_spinwait_simple(struct smu_simple_cmd *scmd) in smu_spinwait_simple() argument 447 smu_spinwait_cmd(&scmd->cmd); in smu_spinwait_simple() 503 struct smu_cmd scmd; member
|