每个块设备驱动程序的核心就是它的请求处理函数,即请求队列中对应的request_fn函数
struct request_queue {
...
request_fn_proc *request_fn;
make_request_fn *make_request_fn;
prep_rq_fn *prep_rq_fn;
...
}
下面分析scsi设备的请求处理函数
static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget,
unsigned int lun, void *hostdata)
{
struct scsi_device *sdev;
...
sdev->request_queue = scsi_alloc_queue(sdev);
...
}
struct request_queue *scsi_alloc_queue(struct scsi_device *sdev)
{
struct request_queue *q;
q = __scsi_alloc_queue(sdev->host, scsi_request_fn);
...
}
struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost,