Lines Matching refs:cmd
84 scsi_set_blocked(struct scsi_cmnd *cmd, int reason) in scsi_set_blocked() argument
86 struct Scsi_Host *host = cmd->device->host; in scsi_set_blocked()
87 struct scsi_device *device = cmd->device; in scsi_set_blocked()
119 static void scsi_mq_requeue_cmd(struct scsi_cmnd *cmd) in scsi_mq_requeue_cmd() argument
121 struct scsi_device *sdev = cmd->device; in scsi_mq_requeue_cmd()
122 struct request_queue *q = cmd->request->q; in scsi_mq_requeue_cmd()
124 blk_mq_requeue_request(cmd->request); in scsi_mq_requeue_cmd()
141 static void __scsi_queue_insert(struct scsi_cmnd *cmd, int reason, int unbusy) in __scsi_queue_insert() argument
143 struct scsi_device *device = cmd->device; in __scsi_queue_insert()
147 SCSI_LOG_MLQUEUE(1, scmd_printk(KERN_INFO, cmd, in __scsi_queue_insert()
148 "Inserting command %p into mlqueue\n", cmd)); in __scsi_queue_insert()
150 scsi_set_blocked(cmd, reason); in __scsi_queue_insert()
165 cmd->result = 0; in __scsi_queue_insert()
167 scsi_mq_requeue_cmd(cmd); in __scsi_queue_insert()
171 blk_requeue_request(q, cmd->request); in __scsi_queue_insert()
195 void scsi_queue_insert(struct scsi_cmnd *cmd, int reason) in scsi_queue_insert() argument
197 __scsi_queue_insert(cmd, reason, 1); in scsi_queue_insert()
215 int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd, in scsi_execute() argument
233 req->cmd_len = COMMAND_SIZE(cmd[0]); in scsi_execute()
234 memcpy(req->cmd, cmd, req->cmd_len); in scsi_execute()
265 int scsi_execute_req_flags(struct scsi_device *sdev, const unsigned char *cmd, in scsi_execute_req_flags() argument
278 result = scsi_execute(sdev, cmd, data_direction, buffer, bufflen, in scsi_execute_req_flags()
299 static void scsi_init_cmd_errh(struct scsi_cmnd *cmd) in scsi_init_cmd_errh() argument
301 cmd->serial_number = 0; in scsi_init_cmd_errh()
302 scsi_set_resid(cmd, 0); in scsi_init_cmd_errh()
303 memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); in scsi_init_cmd_errh()
304 if (cmd->cmd_len == 0) in scsi_init_cmd_errh()
305 cmd->cmd_len = scsi_command_size(cmd->cmnd); in scsi_init_cmd_errh()
528 static void scsi_requeue_command(struct request_queue *q, struct scsi_cmnd *cmd) in scsi_requeue_command() argument
530 struct scsi_device *sdev = cmd->device; in scsi_requeue_command()
531 struct request *req = cmd->request; in scsi_requeue_command()
537 scsi_put_command(cmd); in scsi_requeue_command()
614 static void scsi_uninit_cmd(struct scsi_cmnd *cmd) in scsi_uninit_cmd() argument
616 if (cmd->request->cmd_type == REQ_TYPE_FS) { in scsi_uninit_cmd()
617 struct scsi_driver *drv = scsi_cmd_to_driver(cmd); in scsi_uninit_cmd()
620 drv->uninit_command(cmd); in scsi_uninit_cmd()
624 static void scsi_mq_free_sgtables(struct scsi_cmnd *cmd) in scsi_mq_free_sgtables() argument
626 if (cmd->sdb.table.nents) in scsi_mq_free_sgtables()
627 scsi_free_sgtable(&cmd->sdb, true); in scsi_mq_free_sgtables()
628 if (cmd->request->next_rq && cmd->request->next_rq->special) in scsi_mq_free_sgtables()
629 scsi_free_sgtable(cmd->request->next_rq->special, true); in scsi_mq_free_sgtables()
630 if (scsi_prot_sg_count(cmd)) in scsi_mq_free_sgtables()
631 scsi_free_sgtable(cmd->prot_sdb, true); in scsi_mq_free_sgtables()
634 static void scsi_mq_uninit_cmd(struct scsi_cmnd *cmd) in scsi_mq_uninit_cmd() argument
636 struct scsi_device *sdev = cmd->device; in scsi_mq_uninit_cmd()
640 scsi_mq_free_sgtables(cmd); in scsi_mq_uninit_cmd()
641 scsi_uninit_cmd(cmd); in scsi_mq_uninit_cmd()
644 BUG_ON(list_empty(&cmd->list)); in scsi_mq_uninit_cmd()
646 list_del_init(&cmd->list); in scsi_mq_uninit_cmd()
667 static void scsi_release_buffers(struct scsi_cmnd *cmd) in scsi_release_buffers() argument
669 if (cmd->sdb.table.nents) in scsi_release_buffers()
670 scsi_free_sgtable(&cmd->sdb, false); in scsi_release_buffers()
672 memset(&cmd->sdb, 0, sizeof(cmd->sdb)); in scsi_release_buffers()
674 if (scsi_prot_sg_count(cmd)) in scsi_release_buffers()
675 scsi_free_sgtable(cmd->prot_sdb, false); in scsi_release_buffers()
678 static void scsi_release_bidi_buffers(struct scsi_cmnd *cmd) in scsi_release_bidi_buffers() argument
680 struct scsi_data_buffer *bidi_sdb = cmd->request->next_rq->special; in scsi_release_bidi_buffers()
684 cmd->request->next_rq->special = NULL; in scsi_release_bidi_buffers()
690 struct scsi_cmnd *cmd = req->special; in scsi_end_request() local
691 struct scsi_device *sdev = cmd->device; in scsi_end_request()
713 scsi_mq_uninit_cmd(cmd); in scsi_end_request()
726 scsi_release_bidi_buffers(cmd); in scsi_end_request()
732 scsi_release_buffers(cmd); in scsi_end_request()
734 scsi_put_command(cmd); in scsi_end_request()
756 static int __scsi_error_from_host_byte(struct scsi_cmnd *cmd, int result) in __scsi_error_from_host_byte() argument
765 set_host_byte(cmd, DID_OK); in __scsi_error_from_host_byte()
769 set_host_byte(cmd, DID_OK); in __scsi_error_from_host_byte()
773 set_host_byte(cmd, DID_OK); in __scsi_error_from_host_byte()
777 set_host_byte(cmd, DID_OK); in __scsi_error_from_host_byte()
817 void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) in scsi_io_completion() argument
819 int result = cmd->result; in scsi_io_completion()
820 struct request_queue *q = cmd->device->request_queue; in scsi_io_completion()
821 struct request *req = cmd->request; in scsi_io_completion()
828 unsigned long wait_for = (cmd->allowed + 1) * req->timeout; in scsi_io_completion()
831 sense_valid = scsi_command_normalize_sense(cmd, &sshdr); in scsi_io_completion()
842 int len = 8 + cmd->sense_buffer[7]; in scsi_io_completion()
846 memcpy(req->sense, cmd->sense_buffer, len); in scsi_io_completion()
850 error = __scsi_error_from_host_byte(cmd, result); in scsi_io_completion()
855 req->errors = cmd->result; in scsi_io_completion()
857 req->resid_len = scsi_get_resid(cmd); in scsi_io_completion()
859 if (scsi_bidi_cmnd(cmd)) { in scsi_io_completion()
864 req->next_rq->resid_len = scsi_in(cmd)->resid; in scsi_io_completion()
877 error = __scsi_error_from_host_byte(cmd, result); in scsi_io_completion()
887 SCSI_LOG_HLCOMPLETE(1, scmd_printk(KERN_INFO, cmd, in scsi_io_completion()
905 scsi_print_sense(cmd); in scsi_io_completion()
923 if (error && scsi_noretry_cmd(cmd)) { in scsi_io_completion()
936 error = __scsi_error_from_host_byte(cmd, result); in scsi_io_completion()
947 if (cmd->device->removable) { in scsi_io_completion()
951 cmd->device->changed = 1; in scsi_io_completion()
971 if ((cmd->device->use_10_for_rw && in scsi_io_completion()
973 (cmd->cmnd[0] == READ_10 || in scsi_io_completion()
974 cmd->cmnd[0] == WRITE_10)) { in scsi_io_completion()
976 cmd->device->use_10_for_rw = 0; in scsi_io_completion()
1028 time_before(cmd->jiffies_at_alloc + wait_for, jiffies)) in scsi_io_completion()
1048 scsi_print_result(cmd, NULL, FAILED); in scsi_io_completion()
1050 scsi_print_sense(cmd); in scsi_io_completion()
1051 scsi_print_command(cmd); in scsi_io_completion()
1063 cmd->request->cmd_flags &= ~REQ_DONTPREP; in scsi_io_completion()
1064 scsi_mq_uninit_cmd(cmd); in scsi_io_completion()
1065 scsi_mq_requeue_cmd(cmd); in scsi_io_completion()
1067 scsi_release_buffers(cmd); in scsi_io_completion()
1068 scsi_requeue_command(q, cmd); in scsi_io_completion()
1073 __scsi_queue_insert(cmd, SCSI_MLQUEUE_EH_RETRY, 0); in scsi_io_completion()
1077 __scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY, 0); in scsi_io_completion()
1115 int scsi_init_io(struct scsi_cmnd *cmd) in scsi_init_io() argument
1117 struct scsi_device *sdev = cmd->device; in scsi_init_io()
1118 struct request *rq = cmd->request; in scsi_init_io()
1124 error = scsi_init_sgtable(rq, &cmd->sdb); in scsi_init_io()
1146 struct scsi_data_buffer *prot_sdb = cmd->prot_sdb; in scsi_init_io()
1172 cmd->prot_sdb = prot_sdb; in scsi_init_io()
1173 cmd->prot_sdb->table.nents = count; in scsi_init_io()
1179 scsi_mq_free_sgtables(cmd); in scsi_init_io()
1181 scsi_release_buffers(cmd); in scsi_init_io()
1182 cmd->request->special = NULL; in scsi_init_io()
1183 scsi_put_command(cmd); in scsi_init_io()
1193 struct scsi_cmnd *cmd; in scsi_get_cmd_from_req() local
1200 cmd = scsi_get_command(sdev, GFP_ATOMIC); in scsi_get_cmd_from_req()
1201 if (unlikely(!cmd)) { in scsi_get_cmd_from_req()
1205 req->special = cmd; in scsi_get_cmd_from_req()
1207 cmd = req->special; in scsi_get_cmd_from_req()
1211 cmd->tag = req->tag; in scsi_get_cmd_from_req()
1212 cmd->request = req; in scsi_get_cmd_from_req()
1214 cmd->cmnd = req->cmd; in scsi_get_cmd_from_req()
1215 cmd->prot_op = SCSI_PROT_NORMAL; in scsi_get_cmd_from_req()
1217 return cmd; in scsi_get_cmd_from_req()
1222 struct scsi_cmnd *cmd = req->special; in scsi_setup_blk_pc_cmnd() local
1231 int ret = scsi_init_io(cmd); in scsi_setup_blk_pc_cmnd()
1237 memset(&cmd->sdb, 0, sizeof(cmd->sdb)); in scsi_setup_blk_pc_cmnd()
1240 cmd->cmd_len = req->cmd_len; in scsi_setup_blk_pc_cmnd()
1241 cmd->transfersize = blk_rq_bytes(req); in scsi_setup_blk_pc_cmnd()
1242 cmd->allowed = req->retries; in scsi_setup_blk_pc_cmnd()
1252 struct scsi_cmnd *cmd = req->special; in scsi_setup_fs_cmnd() local
1261 memset(cmd->cmnd, 0, BLK_MAX_CDB); in scsi_setup_fs_cmnd()
1262 return scsi_cmd_to_driver(cmd)->init_command(cmd); in scsi_setup_fs_cmnd()
1267 struct scsi_cmnd *cmd = req->special; in scsi_setup_cmnd() local
1270 cmd->sc_data_direction = DMA_NONE; in scsi_setup_cmnd()
1272 cmd->sc_data_direction = DMA_TO_DEVICE; in scsi_setup_cmnd()
1274 cmd->sc_data_direction = DMA_FROM_DEVICE; in scsi_setup_cmnd()
1352 struct scsi_cmnd *cmd = req->special; in scsi_prep_return() local
1353 scsi_release_buffers(cmd); in scsi_prep_return()
1354 scsi_put_command(cmd); in scsi_prep_return()
1378 struct scsi_cmnd *cmd; in scsi_prep_fn() local
1385 cmd = scsi_get_cmd_from_req(sdev, req); in scsi_prep_fn()
1386 if (unlikely(!cmd)) { in scsi_prep_fn()
1589 struct scsi_cmnd *cmd = req->special; in scsi_kill_request() local
1596 scmd_printk(KERN_INFO, cmd, "killing request\n"); in scsi_kill_request()
1598 sdev = cmd->device; in scsi_kill_request()
1601 scsi_init_cmd_errh(cmd); in scsi_kill_request()
1602 cmd->result = DID_NO_CONNECT << 16; in scsi_kill_request()
1603 atomic_inc(&cmd->device->iorequest_cnt); in scsi_kill_request()
1620 struct scsi_cmnd *cmd = rq->special; in scsi_softirq_done() local
1621 unsigned long wait_for = (cmd->allowed + 1) * rq->timeout; in scsi_softirq_done()
1624 INIT_LIST_HEAD(&cmd->eh_entry); in scsi_softirq_done()
1626 atomic_inc(&cmd->device->iodone_cnt); in scsi_softirq_done()
1627 if (cmd->result) in scsi_softirq_done()
1628 atomic_inc(&cmd->device->ioerr_cnt); in scsi_softirq_done()
1630 disposition = scsi_decide_disposition(cmd); in scsi_softirq_done()
1632 time_before(cmd->jiffies_at_alloc + wait_for, jiffies)) { in scsi_softirq_done()
1633 sdev_printk(KERN_ERR, cmd->device, in scsi_softirq_done()
1639 scsi_log_completion(cmd, disposition); in scsi_softirq_done()
1643 scsi_finish_command(cmd); in scsi_softirq_done()
1646 scsi_queue_insert(cmd, SCSI_MLQUEUE_EH_RETRY); in scsi_softirq_done()
1649 scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY); in scsi_softirq_done()
1652 if (!scsi_eh_scmd_add(cmd, 0)) in scsi_softirq_done()
1653 scsi_finish_command(cmd); in scsi_softirq_done()
1664 static int scsi_dispatch_cmd(struct scsi_cmnd *cmd) in scsi_dispatch_cmd() argument
1666 struct Scsi_Host *host = cmd->device->host; in scsi_dispatch_cmd()
1669 atomic_inc(&cmd->device->iorequest_cnt); in scsi_dispatch_cmd()
1672 if (unlikely(cmd->device->sdev_state == SDEV_DEL)) { in scsi_dispatch_cmd()
1676 cmd->result = DID_NO_CONNECT << 16; in scsi_dispatch_cmd()
1681 if (unlikely(scsi_device_blocked(cmd->device))) { in scsi_dispatch_cmd()
1689 SCSI_LOG_MLQUEUE(3, scmd_printk(KERN_INFO, cmd, in scsi_dispatch_cmd()
1695 if (cmd->device->lun_in_cdb) in scsi_dispatch_cmd()
1696 cmd->cmnd[1] = (cmd->cmnd[1] & 0x1f) | in scsi_dispatch_cmd()
1697 (cmd->device->lun << 5 & 0xe0); in scsi_dispatch_cmd()
1699 scsi_log_send(cmd); in scsi_dispatch_cmd()
1705 if (cmd->cmd_len > cmd->device->host->max_cmd_len) { in scsi_dispatch_cmd()
1706 SCSI_LOG_MLQUEUE(3, scmd_printk(KERN_INFO, cmd, in scsi_dispatch_cmd()
1709 cmd->cmd_len, cmd->device->host->max_cmd_len)); in scsi_dispatch_cmd()
1710 cmd->result = (DID_ABORT << 16); in scsi_dispatch_cmd()
1715 cmd->result = (DID_NO_CONNECT << 16); in scsi_dispatch_cmd()
1720 trace_scsi_dispatch_cmd_start(cmd); in scsi_dispatch_cmd()
1721 rtn = host->hostt->queuecommand(host, cmd); in scsi_dispatch_cmd()
1723 trace_scsi_dispatch_cmd_error(cmd, rtn); in scsi_dispatch_cmd()
1728 SCSI_LOG_MLQUEUE(3, scmd_printk(KERN_INFO, cmd, in scsi_dispatch_cmd()
1734 cmd->scsi_done(cmd); in scsi_dispatch_cmd()
1749 static void scsi_done(struct scsi_cmnd *cmd) in scsi_done() argument
1751 trace_scsi_dispatch_cmd_done(cmd); in scsi_done()
1752 blk_complete_request(cmd->request); in scsi_done()
1772 struct scsi_cmnd *cmd; in scsi_request_fn() local
1808 cmd = req->special; in scsi_request_fn()
1809 if (unlikely(cmd == NULL)) { in scsi_request_fn()
1842 cmd->flags |= SCMD_TAGGED; in scsi_request_fn()
1844 cmd->flags &= ~SCMD_TAGGED; in scsi_request_fn()
1850 scsi_init_cmd_errh(cmd); in scsi_request_fn()
1855 cmd->scsi_done = scsi_done; in scsi_request_fn()
1856 rtn = scsi_dispatch_cmd(cmd); in scsi_request_fn()
1858 scsi_queue_insert(cmd, rtn); in scsi_request_fn()
1901 struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req); in scsi_mq_prep_fn() local
1904 unsigned char *sense_buf = cmd->sense_buffer; in scsi_mq_prep_fn()
1907 memset(cmd, 0, sizeof(struct scsi_cmnd)); in scsi_mq_prep_fn()
1909 req->special = cmd; in scsi_mq_prep_fn()
1911 cmd->request = req; in scsi_mq_prep_fn()
1912 cmd->device = sdev; in scsi_mq_prep_fn()
1913 cmd->sense_buffer = sense_buf; in scsi_mq_prep_fn()
1915 cmd->tag = req->tag; in scsi_mq_prep_fn()
1917 cmd->cmnd = req->cmd; in scsi_mq_prep_fn()
1918 cmd->prot_op = SCSI_PROT_NORMAL; in scsi_mq_prep_fn()
1920 INIT_LIST_HEAD(&cmd->list); in scsi_mq_prep_fn()
1921 INIT_DELAYED_WORK(&cmd->abort_work, scmd_eh_abort_handler); in scsi_mq_prep_fn()
1922 cmd->jiffies_at_alloc = jiffies; in scsi_mq_prep_fn()
1926 list_add_tail(&cmd->list, &sdev->cmd_list); in scsi_mq_prep_fn()
1930 sg = (void *)cmd + sizeof(struct scsi_cmnd) + shost->hostt->cmd_size; in scsi_mq_prep_fn()
1931 cmd->sdb.table.sgl = sg; in scsi_mq_prep_fn()
1934 cmd->prot_sdb = (void *)sg + in scsi_mq_prep_fn()
1938 memset(cmd->prot_sdb, 0, sizeof(struct scsi_data_buffer)); in scsi_mq_prep_fn()
1940 cmd->prot_sdb->table.sgl = in scsi_mq_prep_fn()
1941 (struct scatterlist *)(cmd->prot_sdb + 1); in scsi_mq_prep_fn()
1960 static void scsi_mq_done(struct scsi_cmnd *cmd) in scsi_mq_done() argument
1962 trace_scsi_dispatch_cmd_done(cmd); in scsi_mq_done()
1963 blk_mq_complete_request(cmd->request); in scsi_mq_done()
1973 struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req); in scsi_queue_rq() local
2003 cmd->flags |= SCMD_TAGGED; in scsi_queue_rq()
2005 cmd->flags &= ~SCMD_TAGGED; in scsi_queue_rq()
2007 scsi_init_cmd_errh(cmd); in scsi_queue_rq()
2008 cmd->scsi_done = scsi_mq_done; in scsi_queue_rq()
2010 reason = scsi_dispatch_cmd(cmd); in scsi_queue_rq()
2012 scsi_set_blocked(cmd, reason); in scsi_queue_rq()
2043 scsi_mq_uninit_cmd(cmd); in scsi_queue_rq()
2063 struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq); in scsi_init_request() local
2065 cmd->sense_buffer = kzalloc_node(SCSI_SENSE_BUFFERSIZE, GFP_KERNEL, in scsi_init_request()
2067 if (!cmd->sense_buffer) in scsi_init_request()
2075 struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq); in scsi_exit_request() local
2077 kfree(cmd->sense_buffer); in scsi_exit_request()
2350 unsigned char cmd[10]; in scsi_mode_select() local
2354 memset(cmd, 0, sizeof(cmd)); in scsi_mode_select()
2355 cmd[1] = (pf ? 0x10 : 0) | (sp ? 0x01 : 0); in scsi_mode_select()
2374 cmd[0] = MODE_SELECT_10; in scsi_mode_select()
2375 cmd[7] = len >> 8; in scsi_mode_select()
2376 cmd[8] = len; in scsi_mode_select()
2393 cmd[0] = MODE_SELECT; in scsi_mode_select()
2394 cmd[4] = len; in scsi_mode_select()
2397 ret = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, real_buffer, len, in scsi_mode_select()
2426 unsigned char cmd[12]; in scsi_mode_sense() local
2433 memset(&cmd[0], 0, 12); in scsi_mode_sense()
2434 cmd[1] = dbd & 0x18; /* allows DBD and LLBA bits */ in scsi_mode_sense()
2435 cmd[2] = modepage; in scsi_mode_sense()
2448 cmd[0] = MODE_SENSE_10; in scsi_mode_sense()
2449 cmd[8] = len; in scsi_mode_sense()
2455 cmd[0] = MODE_SENSE; in scsi_mode_sense()
2456 cmd[4] = len; in scsi_mode_sense()
2462 result = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buffer, len, in scsi_mode_sense()
2530 char cmd[] = { in scsi_test_unit_ready() local
2543 result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, sshdr, in scsi_test_unit_ready()