scsi裝置的請求處理函式(request fn

2021-08-02 05:37:35 字數 1803 閱讀 1637

每個塊裝置驅動程式的核心就是它的請求處理函式,即請求佇列中對應的request_fn函式

struct request_queue
下面分析scsi裝置的請求處理函式

static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget,

unsigned int lun, void *hostdata)

struct request_queue *scsi_alloc_queue(struct scsi_device *sdev)

struct request_queue *__scsi_alloc_queue(struct scsi_host *shost,

request_fn_proc *request_fn)

熟悉塊裝置驅動的同學對blk_init_queue這個函式應該不陌生把,該函式原型為

struct request_queue *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock);

該函式的引數是處理這個佇列的request函式指標和控制訪問佇列許可權的自旋鎖,返回乙個動態建立好的請求佇列位址。繼續跟蹤這個函式,你會發現make_request_fn,電梯排程器都是在該函式初始化的。

為了把請求佇列還給系統,需呼叫blk_cleanup_queue。

由上面**我們分析我們得出所有的scsi裝置驅動對應的請求處理函式(request_fn)都是這個叫做scsi_request_fn的函式。

static void scsi_request_fn(struct request_queue *q)

該函式的主要作用就是從請求佇列取出請求,並把請求轉換為對應的scsi命令,最終由scsi_dispatch_cmd(cmd)將命令交給下層控制器。

scsi裝置只是一類掛在sici匯流排上的裝置的總稱,例如scsi磁碟,scsi磁帶都叫做scsi裝置,那麼scsi_request_fn是怎樣與每個具體的裝置的驅動聯絡起來的呢?秘密就隱藏在

blk_peek_request函式。我們以磁碟為例,scsi磁碟驅動存放在sd.c的檔案中。

struct request *blk_peek_request(struct request_queue *q)

...}

return rq;

}

其中blk_peek_request函式中ret = q->prep_rq_fn(q, rq);我們以磁碟驅動為例,會呼叫sd_prep_fn和scsi_prep_fn這兩個函式賦值的地方:

struct request_queue *scsi_alloc_queue(struct scsi_device *sdev)

以及sd_probe函式裡面的blk_queue_prep_rq(sdp->request_queue, sd_prep_fn);

int scsi_prep_fn(struct request_queue *q, struct request *req)

建立乙個普通的scsi命令,在sd模組沒註冊時會呼叫這個函式,sd模組註冊之後就會呼叫下面的函式sd_prep_fn建立讀寫的scsi命令以及scsi_setup_blk_pc_cmnd

static int sd_probe(struct device *dev)

static void sd_probe_async(void *data, async_cookie_t cookie)

iSCSI 中 SCSI 讀寫請求處理分析

iscsi initiator 是通過 scsi command pdu 向 target 發出 scsi 請求,target 接收請求,執行 scsi 命令,然後返回資料以及 scsi 狀態。在 scsi 任務執行時,initiator target 之間會涉及大量資料 i o。rfc3720 中...

linux對塊裝置的請求處理

linux對塊裝置請求的處理是一種層次體系結構,可以分為5層 1.vfs 這層對所有檔案系統的一種封裝 這個操作分為2步 a.首先確定包含檔案的檔案系統的block size,然後計算請求的資料報含多少file block。b.呼叫跟檔案系統有關的函式來訪問檔案的inode,確定請求的資料在磁碟上的...

re模組的常用函式

re模組使python語言擁有全部的正規表示式功能,本篇主要介紹python中re模組常用的函式使用方法 search 函式 search 函式瀏覽全部字串,匹配第乙個符合規則的字串,未匹配則返回none 語法 search pattern,string,flags 0 pattern 要匹配的正規...