468 int scsi_dispatch_cmd(struct scsi_cmnd *cmd) 469 { 470 struct Scsi_Host *host = cmd->device->host; 471 unsigned long flags = 0; 472 unsigned long timeout; 473 int rtn = 0; 474 475 /* check if the device is still usable */ 476 if (unlikely(cmd->device->sdev_state == ...
在SCSI策略例程中最后调用scsi_dispatch_cmd将SCSI命令描述符派发给低层驱动进行处理 1/**2* scsi_dispatch_command - Dispatch a command to the low-level driver.3* @cmd: command block we are dispatching.4*5* Return: nonzero return request was rejected and device's queue needs to be6* plugged....
scsi_queue_rq => scsi_dispatch_cmd ==> Scsi_Host->hostt->queuecommand ==> scsi_cmnd->scsi_done scsi_execute_req => scsi_execute ==> __scsi_execute ===> blk_execute_rq (2)硬盘返回处理:返回成功 or 返回失败 or 不按时返回 (2.1)中断前半部-硬中断回调 handle_level_irq _base_interru...
&ctx->rq_lists[type])取出request:blk_mq_run_hw_queue->__ blk_mq_delay_run_hw_queue->__ blk_mq_run_hw_queue->blk_mq_sched_dispatch_requests->__ blk_mq_sched_dispatch_requests->blk_mq_do_dispatch_ctx->blk_mq_dequeue
我在查看Linux内核的IO路径,然后在函数scsi_dispatch_cmd()的底部调用驱动程序代码。rtn = host->hostt->queuecommand(host, cmd); 因此,对于像/dev/sda/这样的块设备,有什么方法可以找出它在使用哪个hostt或scsi_host_template 浏览8提问于2020-04-26得票数0 ...
1.6.4scsi命令的执行负责执行具体scsi命令的函数是scsi_dispatch_cmd,来自drivers/scsi/scsi.c: 468 intscsi_dispatch_cmd(structscsi_cmnd *cmd) 469 { 470 structScsi_Host *host = cmd->device->host cmd command timer insert delay 转载 mob64ca14085c24 ...
调度请求:`blk_mq_dispatch_rq_list()` 运行硬件队列:`blk_mq_run_hw_queue()` 处理命令:`ata_scsi_queuecmd()` 发送命令到设备:`ata_qc_issue()` 处理中断:`ahci_handle_port_intr()` 完成请求:`ata_qc_complete()` 生成ATA感:`ata_gen_ata_sense()`📜...
Scsi_request_fn 函数会从 io 调度队列中获取一个请求,然后将该请求转换成 scsi command, 最后直接调用 scsi_dispatch_cmd 函数将 scsi 命令提交给 scsi host。Scsi h ost 与 scsi middle level 层的接口是 queue_command 函数,每个 scsi host 驱动都会向 scsi middle level 层注册具体的 queue_command 方法。
最终都会走到tag_set的queue_rq钩子函数,也就是走到了scsi_queue_rq->scsi_dispatch_cmd->host->hostt->queuecommand函数,其中queuecommand是底层驱动注册上来的钩子函数,scsi子系统把request请求发送到这一步之后,剩下的工作就交给底层类似于ufs,sata驱动去处理了。例如,ufs会根据请求的类型把上层传下来的信息封装...
Scsi_request_fn函数会从io调度队列中获取一个请求,然后将该请求转换成scsicommand,最后直接调用scsi_dispatch_cmd函数将scsi命令提交给scsihost。Scsihost与scsimiddle level层的接口是queue_command函数,每个scsihost驱动都会向scsimiddle level层注册具体的queue_command方法。由于Queue_command函数在不可睡眠的上下文中...