Lines Matching refs:cmd
85 scsi_set_blocked(struct scsi_cmnd *cmd, int reason) in scsi_set_blocked() argument
87 struct Scsi_Host *host = cmd->device->host; in scsi_set_blocked()
88 struct scsi_device *device = cmd->device; in scsi_set_blocked()
120 static void scsi_mq_requeue_cmd(struct scsi_cmnd *cmd) in scsi_mq_requeue_cmd() argument
122 struct scsi_device *sdev = cmd->device; in scsi_mq_requeue_cmd()
123 struct request_queue *q = cmd->request->q; in scsi_mq_requeue_cmd()
125 blk_mq_requeue_request(cmd->request); in scsi_mq_requeue_cmd()
142 static void __scsi_queue_insert(struct scsi_cmnd *cmd, int reason, int unbusy) in __scsi_queue_insert() argument
144 struct scsi_device *device = cmd->device; in __scsi_queue_insert()
148 SCSI_LOG_MLQUEUE(1, scmd_printk(KERN_INFO, cmd, in __scsi_queue_insert()
149 "Inserting command %p into mlqueue\n", cmd)); in __scsi_queue_insert()
151 scsi_set_blocked(cmd, reason); in __scsi_queue_insert()
166 cmd->result = 0; in __scsi_queue_insert()
168 scsi_mq_requeue_cmd(cmd); in __scsi_queue_insert()
172 blk_requeue_request(q, cmd->request); in __scsi_queue_insert()
196 void scsi_queue_insert(struct scsi_cmnd *cmd, int reason) in scsi_queue_insert() argument
198 __scsi_queue_insert(cmd, reason, 1); in scsi_queue_insert()
216 int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd, in scsi_execute() argument
234 req->cmd_len = COMMAND_SIZE(cmd[0]); in scsi_execute()
235 memcpy(req->cmd, cmd, req->cmd_len); in scsi_execute()
266 int scsi_execute_req_flags(struct scsi_device *sdev, const unsigned char *cmd, in scsi_execute_req_flags() argument
279 result = scsi_execute(sdev, cmd, data_direction, buffer, bufflen, in scsi_execute_req_flags()
300 static void scsi_init_cmd_errh(struct scsi_cmnd *cmd) in scsi_init_cmd_errh() argument
302 cmd->serial_number = 0; in scsi_init_cmd_errh()
303 scsi_set_resid(cmd, 0); in scsi_init_cmd_errh()
304 memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); in scsi_init_cmd_errh()
305 if (cmd->cmd_len == 0) in scsi_init_cmd_errh()
306 cmd->cmd_len = scsi_command_size(cmd->cmnd); in scsi_init_cmd_errh()
529 static void scsi_requeue_command(struct request_queue *q, struct scsi_cmnd *cmd) in scsi_requeue_command() argument
531 struct scsi_device *sdev = cmd->device; in scsi_requeue_command()
532 struct request *req = cmd->request; in scsi_requeue_command()
538 scsi_put_command(cmd); in scsi_requeue_command()
615 static void scsi_uninit_cmd(struct scsi_cmnd *cmd) in scsi_uninit_cmd() argument
617 if (cmd->request->cmd_type == REQ_TYPE_FS) { in scsi_uninit_cmd()
618 struct scsi_driver *drv = scsi_cmd_to_driver(cmd); in scsi_uninit_cmd()
621 drv->uninit_command(cmd); in scsi_uninit_cmd()
625 static void scsi_mq_free_sgtables(struct scsi_cmnd *cmd) in scsi_mq_free_sgtables() argument
627 if (cmd->sdb.table.nents) in scsi_mq_free_sgtables()
628 scsi_free_sgtable(&cmd->sdb, true); in scsi_mq_free_sgtables()
629 if (cmd->request->next_rq && cmd->request->next_rq->special) in scsi_mq_free_sgtables()
630 scsi_free_sgtable(cmd->request->next_rq->special, true); in scsi_mq_free_sgtables()
631 if (scsi_prot_sg_count(cmd)) in scsi_mq_free_sgtables()
632 scsi_free_sgtable(cmd->prot_sdb, true); in scsi_mq_free_sgtables()
635 static void scsi_mq_uninit_cmd(struct scsi_cmnd *cmd) in scsi_mq_uninit_cmd() argument
637 struct scsi_device *sdev = cmd->device; in scsi_mq_uninit_cmd()
641 scsi_mq_free_sgtables(cmd); in scsi_mq_uninit_cmd()
642 scsi_uninit_cmd(cmd); in scsi_mq_uninit_cmd()
645 BUG_ON(list_empty(&cmd->list)); in scsi_mq_uninit_cmd()
647 list_del_init(&cmd->list); in scsi_mq_uninit_cmd()
668 static void scsi_release_buffers(struct scsi_cmnd *cmd) in scsi_release_buffers() argument
670 if (cmd->sdb.table.nents) in scsi_release_buffers()
671 scsi_free_sgtable(&cmd->sdb, false); in scsi_release_buffers()
673 memset(&cmd->sdb, 0, sizeof(cmd->sdb)); in scsi_release_buffers()
675 if (scsi_prot_sg_count(cmd)) in scsi_release_buffers()
676 scsi_free_sgtable(cmd->prot_sdb, false); in scsi_release_buffers()
679 static void scsi_release_bidi_buffers(struct scsi_cmnd *cmd) in scsi_release_bidi_buffers() argument
681 struct scsi_data_buffer *bidi_sdb = cmd->request->next_rq->special; in scsi_release_bidi_buffers()
685 cmd->request->next_rq->special = NULL; in scsi_release_bidi_buffers()
691 struct scsi_cmnd *cmd = req->special; in scsi_end_request() local
692 struct scsi_device *sdev = cmd->device; in scsi_end_request()
714 scsi_mq_uninit_cmd(cmd); in scsi_end_request()
727 scsi_release_bidi_buffers(cmd); in scsi_end_request()
733 scsi_release_buffers(cmd); in scsi_end_request()
735 scsi_put_command(cmd); in scsi_end_request()
757 static int __scsi_error_from_host_byte(struct scsi_cmnd *cmd, int result) in __scsi_error_from_host_byte() argument
766 set_host_byte(cmd, DID_OK); in __scsi_error_from_host_byte()
770 set_host_byte(cmd, DID_OK); in __scsi_error_from_host_byte()
774 set_host_byte(cmd, DID_OK); in __scsi_error_from_host_byte()
778 set_host_byte(cmd, DID_OK); in __scsi_error_from_host_byte()
818 void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) in scsi_io_completion() argument
820 int result = cmd->result; in scsi_io_completion()
821 struct request_queue *q = cmd->device->request_queue; in scsi_io_completion()
822 struct request *req = cmd->request; in scsi_io_completion()
829 unsigned long wait_for = (cmd->allowed + 1) * req->timeout; in scsi_io_completion()
832 sense_valid = scsi_command_normalize_sense(cmd, &sshdr); in scsi_io_completion()
843 int len = 8 + cmd->sense_buffer[7]; in scsi_io_completion()
847 memcpy(req->sense, cmd->sense_buffer, len); in scsi_io_completion()
851 error = __scsi_error_from_host_byte(cmd, result); in scsi_io_completion()
856 req->errors = cmd->result; in scsi_io_completion()
858 req->resid_len = scsi_get_resid(cmd); in scsi_io_completion()
860 if (scsi_bidi_cmnd(cmd)) { in scsi_io_completion()
865 req->next_rq->resid_len = scsi_in(cmd)->resid; in scsi_io_completion()
878 error = __scsi_error_from_host_byte(cmd, result); in scsi_io_completion()
888 SCSI_LOG_HLCOMPLETE(1, scmd_printk(KERN_INFO, cmd, in scsi_io_completion()
906 scsi_print_sense(cmd); in scsi_io_completion()
924 if (error && scsi_noretry_cmd(cmd)) { in scsi_io_completion()
937 error = __scsi_error_from_host_byte(cmd, result); in scsi_io_completion()
948 if (cmd->device->removable) { in scsi_io_completion()
952 cmd->device->changed = 1; in scsi_io_completion()
972 if ((cmd->device->use_10_for_rw && in scsi_io_completion()
974 (cmd->cmnd[0] == READ_10 || in scsi_io_completion()
975 cmd->cmnd[0] == WRITE_10)) { in scsi_io_completion()
977 cmd->device->use_10_for_rw = 0; in scsi_io_completion()
1029 time_before(cmd->jiffies_at_alloc + wait_for, jiffies)) in scsi_io_completion()
1049 scsi_print_result(cmd, NULL, FAILED); in scsi_io_completion()
1051 scsi_print_sense(cmd); in scsi_io_completion()
1052 scsi_print_command(cmd); in scsi_io_completion()
1064 cmd->request->cmd_flags &= ~REQ_DONTPREP; in scsi_io_completion()
1065 scsi_mq_uninit_cmd(cmd); in scsi_io_completion()
1066 scsi_mq_requeue_cmd(cmd); in scsi_io_completion()
1068 scsi_release_buffers(cmd); in scsi_io_completion()
1069 scsi_requeue_command(q, cmd); in scsi_io_completion()
1074 __scsi_queue_insert(cmd, SCSI_MLQUEUE_EH_RETRY, 0); in scsi_io_completion()
1078 __scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY, 0); in scsi_io_completion()
1116 int scsi_init_io(struct scsi_cmnd *cmd) in scsi_init_io() argument
1118 struct scsi_device *sdev = cmd->device; in scsi_init_io()
1119 struct request *rq = cmd->request; in scsi_init_io()
1125 error = scsi_init_sgtable(rq, &cmd->sdb); in scsi_init_io()
1147 struct scsi_data_buffer *prot_sdb = cmd->prot_sdb; in scsi_init_io()
1173 cmd->prot_sdb = prot_sdb; in scsi_init_io()
1174 cmd->prot_sdb->table.nents = count; in scsi_init_io()
1180 scsi_mq_free_sgtables(cmd); in scsi_init_io()
1182 scsi_release_buffers(cmd); in scsi_init_io()
1183 cmd->request->special = NULL; in scsi_init_io()
1184 scsi_put_command(cmd); in scsi_init_io()
1194 struct scsi_cmnd *cmd; in scsi_get_cmd_from_req() local
1201 cmd = scsi_get_command(sdev, GFP_ATOMIC); in scsi_get_cmd_from_req()
1202 if (unlikely(!cmd)) { in scsi_get_cmd_from_req()
1206 req->special = cmd; in scsi_get_cmd_from_req()
1208 cmd = req->special; in scsi_get_cmd_from_req()
1212 cmd->tag = req->tag; in scsi_get_cmd_from_req()
1213 cmd->request = req; in scsi_get_cmd_from_req()
1215 cmd->cmnd = req->cmd; in scsi_get_cmd_from_req()
1216 cmd->prot_op = SCSI_PROT_NORMAL; in scsi_get_cmd_from_req()
1218 return cmd; in scsi_get_cmd_from_req()
1223 struct scsi_cmnd *cmd = req->special; in scsi_setup_blk_pc_cmnd() local
1232 int ret = scsi_init_io(cmd); in scsi_setup_blk_pc_cmnd()
1238 memset(&cmd->sdb, 0, sizeof(cmd->sdb)); in scsi_setup_blk_pc_cmnd()
1241 cmd->cmd_len = req->cmd_len; in scsi_setup_blk_pc_cmnd()
1242 cmd->transfersize = blk_rq_bytes(req); in scsi_setup_blk_pc_cmnd()
1243 cmd->allowed = req->retries; in scsi_setup_blk_pc_cmnd()
1253 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, cmd->request->errors); 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()
2535 char cmd[] = { in scsi_test_unit_ready() local
2548 result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, sshdr, in scsi_test_unit_ready()