精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美人与禽猛交乱配视频| 天堂va欧美ⅴa亚洲va一国产| 国产农村妇女毛片精品久久麻豆 | 欧美一区二区观看视频| 超碰超碰超碰超碰超碰| 亚洲男人第一天堂| 人人精品人人爱| 高清欧美一区二区三区| 在线免费观看视频| 国产乱论精品| 欧美日韩五月天| 国产视频一视频二| 超碰免费在线播放| 国产清纯白嫩初高生在线观看91| 亚洲在线一区二区| 亚洲图片欧美日韩| 伊人久久大香线蕉综合热线| 中文字幕欧美国内| 国产精品无码在线| 欧美国产亚洲精品| 欧美日韩一级黄| 久久久999视频| 九七电影韩国女主播在线观看| 91丨九色丨黑人外教| 成人免费大片黄在线播放| 国产无套粉嫩白浆内谢| 国产大片一区| 国产亚洲人成a一在线v站| 91九色蝌蚪porny| www.91精品| 欧美性三三影院| 欧美老熟妇喷水| 青春草在线视频| 综合久久久久久久| 亚洲欧美综合一区| 韩国中文免费在线视频| 91香蕉视频污| 国产精品v欧美精品v日韩| 国产精品综合在线| 麻豆一区二区三区| 欧美在线一区二区视频| 日本三级免费看| 欧美久久一级| 欧美乱妇高清无乱码| 午夜黄色福利视频| 日韩大片在线| 国产亚洲精品一区二区| av电影在线不卡| 精品在线播放| 亚洲视频在线观看免费| 一区二区不卡免费视频| 精品综合久久88少妇激情| 亚洲精品一区二区三区蜜桃下载 | 欧美精品成人91久久久久久久| 欧美一级片在线视频| 999国产精品视频| 日韩中文字在线| 91狠狠综合久久久| 国产精品成人a在线观看| 日韩最新av在线| 四虎884aa成人精品| 91精品国产91久久综合 | 91九色在线播放| 午夜电影久久久| 欧美 国产 综合| 香蕉视频亚洲一级| 欧美日韩一级大片网址| 国内自拍第二页| 美女久久精品| 亚洲精品国产福利| 亚洲精品成人无码熟妇在线| 视频一区在线观看| www.日韩系列| 久久成人国产精品入口| 亚洲乱码久久| 国产精品草莓在线免费观看| 一级片视频网站| 国产91丝袜在线播放九色| 精品国产一区二区三区日日嗨 | 奇米一区二区| 亚洲高清久久网| 中文字幕一二三四区| 日韩精品91| 免费99精品国产自在在线| 久久精品视频久久| 日韩国产在线观看| 91在线播放国产| 天天操天天操天天| 国产精品三级av| 国产成人永久免费视频| 欧美xxx性| 日韩精品中文字幕一区二区三区| 欲求不满的岳中文字幕| 久久婷婷蜜乳一本欲蜜臀| 欧美疯狂xxxx大交乱88av| 国产婷婷色一区二区在线观看 | 五月天中文字幕一区二区| 国产精品人人妻人人爽人人牛| 99久久99九九99九九九| 精品视频在线播放| 男的操女的网站| 久久av一区| 97在线中文字幕| 99reav在线| 无码av免费一区二区三区试看| 亚洲精品午夜在线观看| 国产精品久久久网站| 日韩中文理论片| 国产成人在线观看网站| 国产一区日韩二区欧美三区| 久久人人九九| 福利小视频在线| 精品视频在线免费看| 91丝袜在线观看| 91精品国产自产在线观看永久∴| 人妖精品videosex性欧美| av天堂一区二区三区| 国产日韩欧美在线一区| 超碰成人免费在线| 国产视频一区二| 有码中文亚洲精品| 日本天堂网在线| 高清不卡一二三区| 人人妻人人澡人人爽精品欧美一区| 中文在线免费视频| 亚洲国产另类 国产精品国产免费| 天堂网中文在线观看| 久久久久欧美精品| 蜜桃免费一区二区三区| 电影k8一区二区三区久久| 91麻豆精品国产| 强制高潮抽搐sm调教高h| 日韩高清一区在线| 欧美极品色图| 第84页国产精品| 国产视频精品免费播放| 日本少妇毛茸茸高潮| 国产精品一区二区三区99| 黄色高清视频网站| 97色婷婷成人综合在线观看| 中文字幕日韩精品在线| 最近中文在线观看| 国产欧美日韩亚州综合| 91av俱乐部| 国产九一精品| 国产精品久久99久久| 成人在线二区| 欧美调教femdomvk| 中文字幕91视频| 久久国产精品露脸对白| 一级全黄肉体裸体全过程| 91成人短视频在线观看| 久久精品国产亚洲| 国产日产亚洲系列最新| 亚洲欧美电影院| 久久久久亚洲av无码专区首jn| 欧美激情四色| 成人自拍网站| 欧美亚洲日本精品| 亚洲天堂男人天堂女人天堂| 蜜臀尤物一区二区三区直播| 国产精品美女久久久久久久久 | 黄色一级大片免费| 国产成人一二| 欧美在线一区二区视频| 99se视频在线观看| 91精品国产91久久久久久最新毛片| 全网免费在线播放视频入口 | 国产桃色电影在线播放| 亚洲国产精品人久久电影| 久久久成人免费视频| 日本一区免费视频| 亚洲欧美日韩一级| 欧美全黄视频| 欧美日韩亚洲免费| 激情久久一区二区| 欧美夫妻性视频| 全色精品综合影院| 欧美老肥妇做.爰bbww| 久久久久久久九九九九| 99精品偷自拍| 成人性生交免费看| 亚洲手机在线| 午夜精品电影在线观看| 日韩最新av| 人人爽久久涩噜噜噜网站| 好操啊在线观看免费视频| 亚洲国产成人久久| 制服丝袜在线一区| 亚洲一区欧美一区| 亚洲成人黄色av| 国产久卡久卡久卡久卡视频精品| 噜噜噜久久亚洲精品国产品麻豆| 国产精品99在线观看| 久久狠狠久久综合桃花| 超碰国产精品一区二页| 欧美一区二区影院| 成人在线播放| 国产一区av在线| 成人爽a毛片一区二区| 在线欧美日韩精品| 国产精品变态另类虐交| 日本一区二区动态图| 麻豆精品国产传媒av| 韩国视频一区二区| 宅男噜噜噜66国产免费观看| 国产精品豆花视频| 亚洲视频电影| 九热爱视频精品视频| 国产精品免费在线| 999精品视频在线观看| 日本午夜精品理论片a级appf发布| a视频在线播放| 中文字幕亚洲国产| 青草久久伊人| 亚洲国产欧美一区| 亚洲精品国产片| 欧美精品国产精品| 中文 欧美 日韩| 色综合久久天天| 日本一区二区三区四区五区| 亚洲人123区| 长河落日免费高清观看| 91麻豆精品秘密| 中文在线观看免费视频| 狠狠色综合日日| 亚洲a级黄色片| 免费成人av资源网| 超碰网在线观看| 亚洲欧美久久久| 男人日女人逼逼| 亚洲一区欧美二区| 亚洲美免无码中文字幕在线| 欧美日本二区| 日本国产中文字幕| 一区二区三区在线观看免费| 伊人久久婷婷色综合98网| 精品日韩欧美一区| 涩涩涩999| 日韩伦理视频| 影音先锋欧美在线| 亚洲国产精品91| 欧美 日韩 国产 在线观看| 婷婷精品进入| 草草草视频在线观看| 中文无码久久精品| av在线免费观看国产| 国模一区二区三区| 国产黄色片免费在线观看| 亚洲黄色大片| 91传媒久久久| 丝袜a∨在线一区二区三区不卡| 精品免费国产一区二区| 日韩精品1区2区3区| 天天爽天天爽夜夜爽| 开心九九激情九九欧美日韩精美视频电影 | 日本www在线| 久久久国产精品x99av| av免费在线免费| 欧美精品www在线观看| 欧美办公室脚交xxxx| 欧美在线免费视频| 日韩不卡在线| 成人有码在线视频| youjizz欧美| 欧美精品在线一区| 久久一本综合| 成人免费a级片| 国产一区二区三区久久| 日韩中文字幕组| 精品无人码麻豆乱码1区2区| 欧美日韩一区二区区别是什么| 菠萝蜜视频在线观看一区| 国产偷人妻精品一区| 国产精品免费丝袜| 久久久久久天堂| 色婷婷av久久久久久久| 99热这里只有精品99| 337p日本欧洲亚洲大胆精品| 国产二区视频在线观看| 久热精品视频在线| 樱桃视频成人在线观看| 国产色婷婷国产综合在线理论片a| 欧美日韩黄色| 欧美一进一出视频| 欧美福利视频| 午夜精品久久久内射近拍高清 | 日韩欧美在线播放| 中文字幕你懂的| 亚洲第一页在线| 77777影视视频在线观看| 欧美极品少妇xxxxⅹ免费视频| 无遮挡爽大片在线观看视频 | 国产成人精品一区二三区四区五区 | 99精品视频免费版的特色功能| www..com久久爱| 日韩精品123区| 欧美日韩在线影院| 国产三级自拍视频| 亚洲视频电影图片偷拍一区| 综合久久2019| 国产精品视频久久| 神马久久av| 成年人视频大全| 免费xxxx性欧美18vr| 中文字幕免费高清视频| 亚洲欧美国产毛片在线| 中文在线字幕av| 日韩av中文字幕在线| 色在线视频网| 国产一区香蕉久久| 九九视频免费观看视频精品| 国产美女主播在线| 国产精品99久久不卡二区| 国产又大又粗又爽的毛片| 午夜精品爽啪视频| 国产按摩一区二区三区| 色视频www在线播放国产成人| 中文字幕资源网在线观看免费| 成人蜜桃视频| 亚洲色图国产| 青青草久久伊人| 中文字幕精品在线不卡| 国产成人无码av| 日韩精品一二三四区| 久久一卡二卡| 不卡视频一区二区三区| 欧美阿v一级看视频| 爱爱爱爱免费视频| 中文字幕不卡在线播放| 色老头在线视频| 亚洲欧美成人精品| 中文字幕21页在线看| 狼狼综合久久久久综合网| 亚洲深夜福利| 波多野结衣影院| 天天av天天翘天天综合网色鬼国产| 成人乱码一区二区三区| 欧美国产在线电影| av成人资源| 免费看黄在线看| 99热99精品| 四虎成人永久免费视频| 亚洲男人7777| 九九热线视频只有这里最精品| 青青草成人激情在线| 久久亚洲电影| 亚洲午夜精品久久久久久高潮| 欧美午夜片在线看| 天堂中文8资源在线8| 成人福利免费观看| 午夜精品视频一区二区三区在线看| 久久国产激情视频| 亚洲欧美电影院| 刘亦菲毛片一区二区三区| 4p变态网欧美系列| 欧美女王vk| 日韩在线一区视频| 亚洲人123区| 日本美女一级视频| 庆余年2免费日韩剧观看大牛| 国产一区99| 亚洲黄色av片| 亚洲国产精品尤物yw在线观看| 午夜性色福利视频| 日韩免费观看高清| 婷婷亚洲五月| 国产人成视频在线观看| 狠狠色狠色综合曰曰| 日韩子在线观看| 国产精品视频在线免费观看 | 日本成人免费在线| 日韩精品免费一区二区在线观看| 中文字幕第一页在线视频| 亚洲风情在线资源站| 国产在线视频福利| 91免费高清视频| 国产日韩一区二区三区在线| 久久久久久成人网| 欧美zozozo| 欧美日韩不卡| av日韩在线看| 国产欧美日韩另类一区| 国产绿帽一区二区三区| 91精品国产91久久久久福利| 欧美视频网址| 美女网站视频在线观看| 欧美中文字幕亚洲一区二区va在线| 国产原创在线观看| 久久国产精品高清| 国产老妇另类xxxxx| 无码人妻精品一区二区三区蜜桃91 | 国产美女免费网站| 亚洲精品在线一区二区| 国产精品66| 欧美色图色综合| 亚洲欧美色图小说| 国产综合视频一区二区三区免费| 91在线观看免费| 蜜臀久久久99精品久久久久久|