精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux內核SCSI IO子系統分析

系統 Linux
LINUX 內核中 SCSI 子系統由 SCSI 上層,中間層和底層驅動模塊 [1] 三部分組成,主要負責管理 SCSI 資源和處理其他子系統......
概述

LINUX 內核中 SCSI 子系統由 SCSI 上層,中間層和底層驅動模塊 [1] 三部分組成,主要負責管理 SCSI 資源和處理其他子系統,如文件系統,提交到 SCSI 子系統中的 IO 請求。因此,理解 SCSI 子系統的 IO 處理機制對理解整個 SCSI 子系統就顯的十分重要,同時也有助于理解整個 LINUX 內核的 IO 處理機制。本文從 SCSI 設備訪問請求的提交,SCSI 子系統對訪問請求的處理和 SCSI 子系統錯誤處理三個方面,闡述了 SCSI 子系統的 IO 處理機制。

SCSI設備訪問請求的提交

SCSI 設備訪問請求的提交分為兩個步驟:用戶空間提交訪問請求到通用塊層以及通用塊層提交塊訪問請求到 SCSI 子系統。

用戶空間提交訪問請求到通用塊層

在 LINUX 用戶空間,有三種方式提交對 SCSI 設備的訪問請求到通用塊層:

通過文件系統提供的文件訪問接口進行訪問。對建立在 SCSI 設備上的 LINUX 文件系統中的文件讀寫操作,就屬于這種訪問方式;RAW 設備訪問方式。這種訪問方式比較常見的應用就是dd命令。 RAW 設備訪問方式和通過文件系統提供的文件訪問接口進行訪問的***區別在于前者對 SCSI 設備直接進行線性地址訪問,不需要由文件系統進行地址映射;SCSI PASSTHROUGH 方式。通過 LINUX 提供的 SG 進行訪問,就屬于這種方式,用戶可以直接發 CDB[2] 命令給 SCSI 設備。所以,通過該接口,用戶可以做一些 SCSI 管理操作,如 SES 管理等。

圖 1 顯示了 LINUX 內核對于三種請求提交方式的處理過程。


圖 1. LINUX 內核處理三種訪問請求的方式

經由文件系統或 RAW 設備方式提交的請求,會通過底層塊設備訪問層(ll_rw_block()),由其生成塊 IO 請求(BIO),并提交給通用塊層 [3] ;而通過 SG 接口提交的訪問請求,會調用 SCSI 中間層提供的接口,將請求直接交由通用塊層進行處理。

通用塊層提交塊訪問請求到SCSI子系統

為什么要通過通用塊層呢?這是因為首先通用塊層會根據磁盤訪問的特性對請求進行優化操作;其次,通用塊層提供了調度功能,能夠對請求進行調度;再次,通用塊層可擴展的結構,使各種設備的塊驅動都能比較容易的和其集成。

當請求提交到通用塊層后,通用塊層需要完成準備,調度并交付塊訪問請求給 SCSI 中間層的操作。塊訪問請求可以理解為描述了塊訪問區域,訪問方式和關聯的 BIO 的請求,在內核中用 'struct request'結構表示。塊設備會有對應的塊訪問請求設備隊列,用于記錄需要該設備處理的訪問請求,新生成的塊訪問請求會被加入到對應設備的塊訪問請求隊列中。 SCSI 子系統對 IO 的處理,實際上是處理塊訪問請求隊列上的塊訪問請求。

通用塊層提供了兩種方式調度處理塊訪問請求隊列:直接調度和通過 LINUX 內核工作隊列機制調度執行。兩種方式,***都會調用塊訪問請求隊列處理函數進行處理,而 SCSI 設備在初始化時會向通用塊層注冊 SCSI 子系統定義的塊訪問請求隊列處理函數。清單 1[4] 顯示了這個過程。這樣當通用塊層處理 SCSI 設備的塊訪問請求隊列時,調用的就是 SCSI 中間層定義的這些處理函數。通過這種方式,通用塊層就將塊訪問請求的處理交給了 SCSI 子系統。

清單 1. 處理函數

    struct request_queue *scsi_alloc_queue(struct scsi_device *sdev)

    {……

    q = blk_init_queue(scsi_request_fn, NULL);

    //request generate block layer allocate a request queue

    ……

    blk_queue_prep_rq(q, scsi_prep_fn); //Prepare a scsi request blk_queue_max_hw_segments(q, shost->sg_tablesize);

    //define sg table size

    ……

    blk_queue_softirq_done(q, scsi_softirq_done);

    }

SCSI子系統處理塊訪問請求

當 SCSI 子系統的請求隊列處理函數被通用塊層調用后,SCSI 中間層會根據塊訪問請求的內容,生成、初始并提交 SCSI 命令 (struct scsi_cmd) 到 SCSI TARGET 端。

#p#

SCSI 命令記錄了命令描述塊 (CDB),感測數據緩存 (SENSE BUFFER),IO 超時時間等 SCSI 相關的信息和 SCSI 子系統處理命令需要的一些其他信息,如回調函數等。清單 2 顯示了這個命令的主要結構。

清單 2. 主要結構

    struct scsi_cmnd {

    ……

    void (*done) (struct scsi_cmnd *); /* Mid-level done function */

    ……

    int retries; /*retried time*/

    int timeout_per_command; /*timeout define*/

    ……

    enum dma_data_direction sc_data_direction; /*data transfer direction*/

    ……

    unsigned char cmnd[MAX_COMMAND_SIZE]; /*cdb*/

    void *request_buffer; /* Actual requested buffer */

    struct request *request; /* The command we are working on */

    ……

    unsigned char sense_buffer[SCSI_SENSE_BUFFERSIZE];

    /* obtained by REQUEST SENSE when

    * CHECK CONDITION is received on original

    * command (auto-sense) */

    /* Low-level done function - can be used by */

    /*low-level driver to point  to completion function. */

    void (*scsi_done) (struct scsi_cmnd *);

    ……

    };

初始化的過程首先按照電梯調度算法,從塊設備的請求隊列上取出一個塊訪問請求,根據塊訪問請求的信息,定義 SCSI 命令中數據傳輸的方向,長度和地址。其次,定義 CDB,SCSI 中間層的回調函數等。

在完成初始化后,SCSI 中間層通過調用scsi_host_template[5]結構中定義的queuecommand函數將 SCSI 命令提交給 SCSI 底層驅動部分。queuecommand函數,是一個 SCSI 命令隊列處理函數,在 SCSI 底層驅動中,定義了queuecommand函數的具體實現。因此,SCSI 中間層,調用queuecommand函數實際上就是調用了底層驅動定義的queuecommand函數的處理實體,將 SCSI 命令提交給了各個廠家定義的 SCSI 底層驅動進行處理。這個過程和通用塊設備層調用 SCSI 中間層的處理函數進行塊請求處理的機制很相似,這也體現了 LINUX 內核代碼具有很好的擴展性。底層驅動接受到請求后,就要開始處理 SCSI 命令了,這一層和硬件關系緊密,所以這塊代碼一般都是由各個廠家自己實現。基本流程可概括為:從底層驅動維護的隊列中,取出一個 SCSI 命令,封裝成廠家自定義的請求格式,然后采用 DMA 或者其他方式,將請求提交給 SCSI TARGET 端,由 SCSI TARGET 端對請求處理,并返回執行結果給 SCSI 底層驅動層。

SCSI命令執行結果的處理

當 SCSI 底層驅動接受到 SCSI TARGET 端返回的命令執行結果后,SCSI 子系統主要通過兩次回調過程完成對命令執行結果的處理。 SCSI 底層驅動在接受到 SCSI TARGET 端返回的命令執行結果后,會調用 SCSI 中間層定義的回調函數,將處理結果交付給 SCSI 中間層進行處理,這是***次回調過程。 SCSI 中間層處理完成后,將調用 SCSI 上層定義的回調函數,結束 IO 在整個 SCSI 子系統中的處理,這為第二次回調過程。

***次回調:

SCSI 中間層在調用queuecommand函數將 SCSI 命令提交給 SCSI 底層驅動的同時,也將回調函數指針傳給了 SCSI 底層驅動。底層驅動接受到 SCSI TARGET 端返回的命令執行結果后,會調用該回調函數,產生一個中斷號為 BLOCK_SOFTIRQ 的軟中斷進行***次回調處理。在這次回調處理過程中,SCSI 中間層首先會根據 SCSI 底層驅動處理的結果判斷請求處理是否成功。處理成功,并不意味著處理沒有錯誤,而是返回的信息,能夠讓 SCSI 中間層很明確的知道,對于這個命令,中間層已經沒有必要繼續進行處理了。所以,對于處理成功的 SCSI 命令,SCSI 中間層會調用第二次回調函數進入到第二次回調過程。清單 3 顯示了 SCSI 中間層定義的該軟中斷的處理函數。

清單 3. 該軟中斷的處理函數

    static void scsi_softirq_done(struct request *rq)

    {

    ……

    disposition = scsi_decide_disposition(cmd);

    ……

    switch (disposition) {

    case SUCCESS:

    scsi_finish_command(cmd);

    //enter to second callback process

    break;

    case NEEDS_RETRY:

    scsi_retry_command(cmd);

    break;

    case ADD_TO_MLQUEUE:

    scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);

    break;

    default:

    if (!scsi_eh_scmd_add(cmd, 0))

    scsi_finish_command(cmd);

    }

    }

第二次回調:

不同的 SCSI 上層模塊會定義自己不同的第二次回調函數,如 SD 模塊,會在sd_init_command函數中,定義自己的第二次回調函數sd_rw_intr,這個回調函數會根據 SD 模塊的需要,對 SCSI 命令執行的結果做進一步的處理。清單 4 顯示了 SD 模塊注冊第二次回調的代碼。雖然各個 SCSI 上層模塊可以定義自己的第二次回調函數,但是這些回調函數最終都會結束 SCSI 子系統對這個塊訪問請求的處理。

清單 4. SD 模塊注冊第二次回調的代碼

    static int sd_init_command(struct scsi_cmnd * SCpnt)

    {

    ……

    SCpnt->done = sd_rw_intr;

    return 1;

    }

#p#

SCSI子系統的錯誤處理

由于 SCSI 底層驅動是由廠商自己實現的,在此就不予討論。除此之外,SCSI 子系統的出錯處理,主要是由 SCSI 中間層完成。在***次回調過程中,SCSI 底層驅動將 SCSI 命令的處理結果以及獲取的 SCSI 狀態信息返回給 SCSI 中間層,SCSI 中間層先對 SCSI 底層驅動返回的 SCSI 命令執行的結果進行判斷,若無法得到明確的結論,則對 SCSI 底層驅動返回的 SCSI 狀態、感測數據等進行判斷。對于判斷結論為處理成功的 SCSI 命令,SCSI 中間層會直接進行第二次回調;對于判斷結論為需要重試的命令,則會被加入塊設備請求對列,重新被處理。這個過程可稱為 SCSI 中間層對 SCSI 命令執行結果的基本判斷方法。

一切看起來似乎是這么簡單,但是實際上并非如此,有些錯誤是沒有明確的判斷依據的,如感測數據錯誤或 TIMEOUT 錯誤。為了解決這個問題,LINUX 內核中 SCSI 子系統引入了一個專門進行錯誤處理的線程,對于無法判斷錯誤原因的 SCSI 命令,都會交由該線程進行處理。線程處理過程和兩個隊列密切相關,一個是錯誤處理隊列(eh_work_q),一個是錯誤處理完成隊列 (done_q) 。錯誤處理隊列記錄了需要進行錯誤處理的 SCSI 命令,錯誤處理完成隊列記錄了在錯誤處理過程中被處理完成的 SCSI 命令。清單 5 顯示了線程對錯誤處理隊列上記錄的命令進行錯誤處理的過程。

清單 5. 錯誤處理的過程

    scsi_unjam_host{

    ……

    if (!scsi_eh_get_sense(&eh_work_q, &eh_done_q))

    //get sense data

    if (!scsi_eh_abort_cmds(&eh_work_q, &eh_done_q))

    //abort command

    scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q);

    //reset

    scsi_eh_flush_done_q(&eh_done_q);

    //complete error io on done_q

    ……

    }

整個處理過程可歸納為四個階段:

感測數據查詢階段

通過查詢感測數據,為處理 SCSI 命令重新提供判斷依據,并按照前述基本判斷方法進行判斷。如果判斷結果為成功或者重試,則可將該命令從錯誤處理隊列移到錯誤處理完成隊列。若判斷失敗,則命令將會繼續保留在 SCSI 錯誤處理隊列中,錯誤處理進入到 ABORT 階段。

ABORT階段

在這個階段中,錯誤處理隊列上的 SCSI 命令會被主動 ABORT 掉。被 ABORT 的命令,會被加入到錯誤處理完成隊列。若 ABORT 過程結束,錯誤處理隊列上還存在未能被處理的命令,則需進入 START STOP UNIT 階段進行處理。

START STOP UNIT階段

在這個階段,START STOP UNIT[6] 命令會被發送到與錯誤處理隊列上的命令相關的 SCSI DEVICE 上,去試圖恢復 SCSI DEVICE,如果在 START STOP UNIT 階段結束后,依舊有命令在錯誤處理隊列上,則需要進入 RESET 階段進行處理。

RESET階段

RESET 階段的處理過程分三個層次:DEVICE RESET,BUS RESET 和 HOST RESET 。首先對與錯誤隊列上的命令相關的 SCSI DEVICE,進行 RESET 操作,如果 DEVICE RESET 后,SCSI 設備能處于正常狀態,則和該設備相關的錯誤處理隊列上的錯誤命令,會被加入到錯誤處理完成隊列中。若通過 DEVICE RESET 不能處理所有的錯誤命令,則需進入到 BUS RESET 階段,BUS RESET 會對與錯誤處理隊列上的命令相關的 BUS,進行 RESET 操作。若 BUS RESET 還不能成功處理所有錯誤處理隊列上的 SCSI 命令,則會進入到 HOST RESET 階段,HOST RESET 會對與錯誤處理隊列上的命令相關的 HOST 進行 RESET 操作。當然,很有可能 HOST RESET 也不能成功處理所有錯誤命令,則只能認為錯誤處理隊列上錯誤命令相關的 SCSI 設備不能被使用了。這些不能被使用的設備會被標記為不能使用狀態,同時相關的錯誤命令都會被加入到錯誤處理完成隊列中。

對于被加入到錯誤處理完成隊列上的請求,若是在設備狀態正確,命令重試次數小于允許次數的情況下,這些命令將被重新加入到塊訪問請求隊列中,進行重新處理;否則,直接進行第二次回調處理,完成 SCSI 子系統對塊訪問請求的處理。這樣,SCSI 子系統就完成了 SCSI 命令錯誤處理的整個過程。

結束語

本文淺析了 SCSI 子系統中的 IO 處理機制,希望對大家理解 SCSI 子系統和塊設備驅動能有所幫助。

【編輯推薦】

  1. 如何成為一個Linux系統內核開發者
  2. Linux的2.6.32獲取R600的內核模式設置
  3. Linux內核20天內連爆兩高危漏洞
責任編輯:趙寧寧 來源: chinaitlab
相關推薦

2017-07-14 14:35:27

Linux中斷系統

2016-07-22 10:50:56

Linux內核無線子系統

2017-06-30 10:36:27

Linux系統分析工具

2021-12-15 10:02:25

鴻蒙HarmonyOS應用

2022-12-07 15:56:33

procfsLiteOS-A

2015-11-10 16:55:00

性能IO子系統Linux

2021-07-07 08:00:00

Linux開發虛擬機

2009-12-16 17:36:02

2009-04-21 13:54:20

2014-09-22 13:31:46

Linux

2015-10-19 17:36:19

MOST內核Linux

2009-07-06 17:40:05

JSP HTTP服務器

2009-07-31 11:30:05

光纜線路監測

2017-12-14 21:30:05

MySQLInnoDBIO子系統

2015-08-17 09:46:45

大數據

2017-02-28 18:26:09

Linuxinput子系統編程

2019-04-08 10:36:23

SCSILinux內核

2022-01-24 16:06:58

Linux 5.17RTLA工具

2019-07-15 08:30:06

Linux 系統 數據

2010-06-18 11:16:52

UML面向對象
點贊
收藏

51CTO技術棧公眾號

亚洲制服中文| 欧美尤物巨大精品爽| 三级黄色片播放| 3344国产永久在线观看视频| 久久香蕉国产线看观看99| 国产精品视频白浆免费视频| 久久精品黄色片| 群体交乱之放荡娇妻一区二区 | 超碰在线国产97| 风间由美中文字幕在线看视频国产欧美 | 国产日韩欧美一区二区三区在线观看| 国产亚洲一区二区精品| 日韩av加勒比| 国产网站在线免费观看| 91蜜桃婷婷狠狠久久综合9色| 国产精品久久久久999| 天堂网avav| 九色精品国产蝌蚪| 欧美本精品男人aⅴ天堂| 黄色av网址在线播放| 成人av电影观看| 波波电影院一区二区三区| 国产原创欧美精品| 一级一片免费看| 亚洲天堂激情| 麻豆乱码国产一区二区三区 | 成年人免费大片| 波多野结衣乳巨码无在线观看| 亚洲国产激情av| 欧美日韩精品中文字幕一区二区| 国产黄色一级大片| 久久精品国产精品青草| 日韩美女免费线视频| 国产一级在线观看视频| 99久久亚洲精品| 综合网日日天干夜夜久久| 亚洲精品乱码久久久久久久| 日韩成人在线看| 欧美久久免费观看| 中文字幕第17页| 亚洲四虎影院| 色噜噜狠狠成人网p站| 欧美 国产 综合| 久久久123| 亚洲国产一区二区a毛片| 91精品国产吴梦梦| 成人福利片网站| 自拍偷拍欧美精品| 一级特黄录像免费播放全99| 国产黄色片在线观看| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 秋霞成人午夜伦在线观看| 91av在线精品| 中文字幕激情小说| 巨乳诱惑日韩免费av| 青青久久aⅴ北条麻妃| 成人在线免费看视频| 亚洲综合99| 国产成人精品在线观看| 国产一区二区视频免费| 日本亚洲三级在线| 国产日韩换脸av一区在线观看| 亚洲视频一区二区三区四区| 久久国产生活片100| 国产在线视频2019最新视频| 91禁在线观看| 国产成人精品影视| 国产精品永久入口久久久| 天堂成人在线| 欧美激情在线一区二区| 中文字幕久久一区| 青青在线视频| 狠狠色狠狠色综合日日五| 欧美 日韩 国产 激情| 欧美视频免费看| 欧美一级高清片在线观看| 久久精品无码专区| 中文有码一区| 久久精品2019中文字幕| 豆国产97在线 | 亚洲| 亚洲视频大全| 国产精品丝袜久久久久久不卡| 97精品人妻一区二区三区| 国产99一区视频免费| 你懂的网址一区二区三区| 欧洲不卡视频| 五月综合激情日本mⅴ| 亚洲高清在线免费观看| 日韩成人精品| 国产一区二区三区视频免费| 久久高清内射无套| 亚洲一区二区三区四区五区午夜| 国产精品国产三级国产aⅴ浪潮| 国产男女猛烈无遮挡| 99国产精品国产精品毛片| 亚洲欧洲日本国产| 超碰在线网站| 欧美丰满美乳xxx高潮www| 亚洲视频在线播放免费| 四虎8848精品成人免费网站| 久久人人爽国产| 91女人18毛片水多国产| heyzo一本久久综合| 影音先锋亚洲视频| 性爽视频在线| 日韩小视频在线观看专区| 中国黄色片视频| 99久久久久久中文字幕一区| 欧洲美女7788成人免费视频| 国产www免费观看| 国产视频一区二区在线观看| 激情成人开心网| 欧美jizz18| 日韩精品极品在线观看播放免费视频 | 亚洲一区二区激情| caoporn国产精品| 欧美日韩亚洲国产成人| 女生影院久久| 亚洲成人亚洲激情| 日本精品人妻无码77777| 久久蜜桃精品| 精品久久蜜桃| 日日夜夜天天综合入口| 欧美精品少妇一区二区三区| 中文字幕第4页| 99成人免费视频| 91文字幕巨乱亚洲香蕉| 黄色在线免费网站| 欧美无人高清视频在线观看| 国产黄色网址在线观看| 国产欧美在线| 国内一区二区在线视频观看| av片在线观看| 欧美日韩一区二区三区在线 | 日韩av观看网址| 天堂av中文字幕| 亚洲一区二区精品久久av| 亚洲精品一二三四| 自拍视频亚洲| 91视频网页| 在线免费av导航| 日韩欧美一级特黄在线播放| 亚洲 欧美 变态 另类 综合| 九九视频精品免费| 中文字幕精品一区日韩| 欧美xxxx网站| 久久伊人精品天天| 国产不卡精品视频| 亚洲视频综合在线| 日本中文字幕二区| 日韩国产欧美一区二区| 国产精品福利在线| 色综合久久久久综合一本到桃花网| 91搞黄在线观看| 国产欧美一区二区三区在线观看视频| 日本不卡一区二区三区| 视频一区二区在线| **精品中文字幕一区二区三区| 深夜福利一区二区| 99国产精品一区二区三区 | 亚洲视频999| 久久久精品毛片| 中文字幕成人网| 欧美一级视频在线| 欧美精品一卡| 精品无人乱码一区二区三区的优势| sm捆绑调教国产免费网站在线观看 | 中文字幕一区二区三区四| 婷婷综合五月| 国产美女在线精品免费观看| 欧美xxxhd| 亚洲性生活视频| 夜夜嗨aⅴ一区二区三区| 亚洲女人小视频在线观看| 香蕉久久久久久av成人| 性久久久久久| 亚洲视频电影| 国产精品玖玖玖在线资源| 日韩免费观看高清| 高清全集视频免费在线| 亚洲高清在线观看| 中文字幕欧美在线观看| 樱桃国产成人精品视频| 一区二区三区免费在线观看视频 | 亚洲人妻一区二区| 欧美日免费三级在线| 婷婷色中文字幕| 91视频国产观看| 手机免费看av网站| 校园春色综合网| 伊人久久婷婷色综合98网| 日韩精品一区国产| 国产精品igao视频| 午夜成年人在线免费视频| 亚洲精品美女在线观看| 91禁在线观看| 日韩欧美精品网站| 青娱乐国产盛宴| 欧美经典一区二区| 少妇被狂c下部羞羞漫画| 久久成人免费网| 男人添女人下面高潮视频| 99国产精品一区二区| 久久香蕉综合色| 伊人久久大香线蕉av超碰| 国产精品91久久| 91九色国产在线播放| 色av中文字幕一区| 四虎影视在线播放| 日韩视频免费观看高清完整版| 免费看污视频的网站| 亚洲超碰精品一区二区| 欧美色视频一区二区三区在线观看| 99国产精品一区| 色欲欲www成人网站| 免费人成在线不卡| 黄在线观看网站| 国产精品vip| 在线看视频不卡| 欧美伦理在线视频| 欧美大香线蕉线伊人久久国产精品 | 欧美日韩国产在线播放| 黄色一级视频免费| 亚洲日本丝袜连裤袜办公室| 黄色片网站免费| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 日韩欧美视频一区二区三区四区 | 少妇免费毛片久久久久久久久| 林ゆな中文字幕一区二区| 91久色国产| 高清一区二区| 成人黄色大片在线免费观看| 成人国产精品一区二区免费麻豆| 欧美自拍大量在线观看| 男人av在线播放| 97人人模人人爽人人喊中文字| 国产在线1区| 久久精品亚洲94久久精品| 最新av网站在线观看| 色av中文字幕一区| 日本高清视频在线观看| 日韩在线观看视频免费| 日本暖暖在线视频| 久久精品国产清自在天天线| 色综合久久影院| 久久精品国产v日韩v亚洲| 三区四区电影在线观看| www日韩欧美| 国产三区在线观看| 久久综合免费视频| 中国av在线播放| 久久久噜噜噜久久中文字免| 国产福利在线免费观看| 欧美精品久久久久a| 国产理论在线| 欧美专区第一页| 日本一道高清亚洲日美韩| 国产精品美女无圣光视频| 欧美天堂一区二区| 91亚洲一区精品| 91在线一区| 久久亚洲高清| 欧美视频免费| 吴梦梦av在线| 一区在线观看| 日韩无套无码精品| 免费观看30秒视频久久| 精品人妻一区二区三| 成人激情校园春色| 午夜在线观看一区| 亚洲天堂成人在线观看| 国产精品白浆一区二小说| 狠狠色狠色综合曰曰| 人妻中文字幕一区二区三区| 3d成人h动漫网站入口| 亚洲乱码在线观看| 精品一区二区亚洲| 91啦中文在线| 欧美黑人性生活视频| 91精品论坛| 91在线直播亚洲| 久久精品论坛| 在线成人性视频| 中文高清一区| gogogo高清免费观看在线视频| 国产精品一卡二| 播金莲一级淫片aaaaaaa| 国产精品美女久久久久久| 国产一级视频在线播放| 色老汉av一区二区三区| 99视频免费看| 亚洲香蕉av在线一区二区三区| 超碰在线caoporn| 欧美在线视频一区二区| aa亚洲一区一区三区| 蜜桃麻豆www久久国产精品| 国产精品久久久乱弄| 国产91xxx| 久久99热狠狠色一区二区| 国产视频久久久久久| 国产精品的网站| av大片在线免费观看| 4438x亚洲最大成人网| 日本一本草久在线中文| 九九久久久久久久久激情| 你懂得影院夜精品a| 国产精品区二区三区日本| 成人羞羞网站| 成人免费观看视频在线观看| 国产剧情一区在线| 91精品久久久久久久久久久久| 亚洲一区电影777| 国产精品区在线观看| 国产性色av一区二区| bl视频在线免费观看| 亚洲xxxxx电影| 日韩中字在线| 91色国产在线| 久久久久久9999| 国产一级做a爱片久久毛片a| 日韩视频免费直播| 免费网站看v片在线a| 国产精品电影在线观看| 亚洲欧美日本伦理| 国产无限制自拍| 国产盗摄视频一区二区三区| 黑人狂躁日本娇小| 色狠狠色噜噜噜综合网| 无码国产精品一区二区免费16| 久久69精品久久久久久国产越南| 国产精品久久久久久吹潮| 欧美日韩国产精品一区二区| 中文亚洲字幕| 成人免费无码大片a毛片| 亚洲一区二区三区四区在线| 国产美女明星三级做爰| xvideos亚洲人网站| 欧美xxxx性| 中文字幕久久综合| 国产综合色在线视频区| 国产aaaaaaaaa| 欧美日韩中字一区| 在线激情小视频| 成人性生交大片免费看视频直播| 日韩系列欧美系列| 日本在线播放一区二区| 成人欧美一区二区三区1314| 91久久精品无码一区二区| 最近中文字幕日韩精品| 亚洲综合资源| 国产日韩第一页| 成人精品小蝌蚪| 亚洲一区 视频| 日韩二区三区在线| 高清不卡亚洲| 亚洲草草视频| 美女精品一区二区| 日本一级特级毛片视频| 日韩你懂的电影在线观看| 国产经典三级在线| 久久久99国产精品免费| 天堂成人免费av电影一区| 亚洲AV无码成人精品区明星换面 | 欧美激情在线免费| 中文字幕在线导航| 日韩理论片中文av| www.看毛片| 97超碰色婷婷| sdde在线播放一区二区| 午夜剧场高清版免费观看| 亚洲精品成人天堂一二三| 日韩在线观看视频网站| 日韩暖暖在线视频| 国产精品麻豆久久| 奇米777第四色| 欧美在线一二三四区| 免费a级在线播放| 国产麻豆乱码精品一区二区三区| 久久久久久穴| 暗呦丨小u女国产精品| 亚洲成**性毛茸茸| 97久久网站| 精品人妻大屁股白浆无码| 91麻豆精品秘密| 国产一区二区三区成人| 97精品一区二区三区| 欧美va久久久噜噜噜久久| 白丝校花扒腿让我c| 色综合久久中文字幕| 国产在线观看免费麻豆| 久久久www免费人成黑人精品| 麻豆91在线播放免费| 国产真实的和子乱拍在线观看| 亚洲片在线资源| 日韩精品一区二区三区中文| caoporn超碰97| 午夜电影网亚洲视频| 国产精品实拍| 欧美另类视频在线| 丰满白嫩尤物一区二区|