scsi_queue_rq将req转换为scsi cmd,分发到对应的scsi device driver处理。 scsi_queue_rq scsi_queue_rq下发scsi cmd的整体逻辑: scsi_queue_rq==>scsi_dispatch_cmd==>queuecommand 如果scsi_dispatch_cmd成功,返回BLK_STS_OK 如果scsi_dispatch_cmd失败,唤醒scsi recover handler,返回BLK_STS_RESOURCE 其他错误...
在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....
+---> cmd->scsi_done = scsi_mq_done // 设置回调,IO完成时驱动调用 | +---> scsi_dispatch_cmd() | +---> hostt->queue_command() 2. IO 完成 驱动(LLDD)层完成IO后,调用scsi层提供的回调done函数:scsi_done/scsi_mq_done, 2.1 SQ scsi_done() | +---> blk_complete_request() | +-...
Scsi_request_fn函数实现了请求队列的处理,首先从请求队列中摘取一个request,然后通过 q->prep_rq_fn函数将请求转换成scsi命令,并且对scsi command进行初始化,最后通过scsi_dispatch_cmd函数将scsi命令分发给底层的scsi host驱动。 在scsi_request_fn函数的实现过程中,需要通过块设备发下来的请求构造相应的scsi命令,而...
=> 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)中断前半部-硬中断回调 ...
我在查看Linux内核的IO路径,然后在函数scsi_dispatch_cmd()的底部调用驱动程序代码。rtn = host->hostt->queuecommand(host, cmd); 因此,对于像/dev/sda/这样的块设备,有什么方法可以找出它在使用哪个hostt或scsi_host_template 浏览8提问于2020-04-26得票数0 ...
SCSI_LOG_->SCSI_LOG_HLQUEUE->[66521.609478]sd6:0:0:0:[sda]tag#23sd_setup_read_write_cmnd:block=893164736,count=8cmd->cmd_len=10staticintscsi_dispatch_cmd(structscsi_cmnd*cmd)trace_scsi_dispatch_cmd_start(cmd)rtn=host->hostt->queuecommand(host,cmd)->.queuecommand=iscsi_queuecommand,-...
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 方法。
add_host()遍历scsi_add_host链表,将scsi_host加入到总线上2scsi_scan_host()逐个扫描scsi_host(HBA)__make_request()将bio放到request队列中将request放入队列blk_init_queue(request_fn,NULL)不断获取cmd初始化请求队列请求队列调用命令处理函数,激活队列scsi_dispatch_cmd(cmd)将命令分发到queuecommand(cmd,...
7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. module_init(init_sd);/** * init_sd - entry point for this driver (both when built in or when * a module). * * Note: this function registers this driver with the scsi mid-level. ...