青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

風雨兼程

ring my bells
posts - 49, comments - 14, trackbacks - 0, articles - 0

Linux虛擬文件系統(tǒng)概述

Posted on 2008-04-16 21:18 silentneil 閱讀(453) 評論(0)  編輯 收藏 引用
一、簡介:
虛擬文件系統(tǒng)(也叫虛擬文件系統(tǒng)交換層)是在內(nèi)核實現(xiàn)的一個軟件層,它既為用戶空間程序提供文件系統(tǒng)接口的調(diào)用,也是保證系統(tǒng)內(nèi)核各種文件系統(tǒng)實現(xiàn)能夠共存的抽象層。
VFS系統(tǒng)調(diào)用如open(2), stat(2), read(2), write(2), chmod(2)等在進程上下文中被調(diào)用。文件系統(tǒng)鎖在文檔Documentation/filesystems/Locking中描述。
1、目錄結(jié)構(gòu)緩存(dcache)
VFS實現(xiàn)了open(2), stat(2), chmod(2)以及其它類似的系統(tǒng)調(diào)用。VFS利用傳遞給這些調(diào)用的文件路徑參數(shù)在目錄入口緩存(dcache 或者目錄機構(gòu)緩存)中進行查找。通過一種快速的轉(zhuǎn)換機制將文件路徑轉(zhuǎn)化為特定的目錄入口。目錄結(jié)構(gòu)緩存只存在在RAM中而從不寫入磁盤,他們只是為了提高性能而創(chuàng)建的。
目錄結(jié)構(gòu)緩存是整個文件空間的視圖,但是絕大多數(shù)計算機并沒有足夠的空間將所有的目錄結(jié)構(gòu)同時放在RAM中,因此某些緩存將會丟棄。為了解決目錄結(jié)構(gòu)中的路徑,VFS也許需要按照路徑結(jié)構(gòu)重新創(chuàng)建該緩存,并加載inode節(jié)點。這通過查找inode節(jié)點實現(xiàn)。
2、Inode節(jié)點對象
一個獨立的目錄結(jié)構(gòu)通常會有一個指向一個inode的指針。Inodes是文件系統(tǒng)的對象,例如普通文件,目錄,F(xiàn)IFO等。他們或者存在于磁盤上(快設(shè)備文件系統(tǒng))或者內(nèi)存中(偽文件系統(tǒng))。被請求訪問的inode從磁盤加載道內(nèi)存,在修改后再寫入磁盤。
一個獨立的inode可以同時作為多個目錄結(jié)構(gòu)的指針目標(如硬鏈接時會出現(xiàn)這種情況)。
查找一個inode時,需要通過VFS對inode的父目錄inode調(diào)用looup()方法。該方法在inode所屬的具體文件系統(tǒng)中實現(xiàn)。一旦VFS 請求了目錄結(jié)構(gòu)(同時inode),我們就可以通過open(2)打開文件,或者stat(2)查看inode數(shù)據(jù)。stat(2)操作很簡單,一旦 VFS獲得了目錄結(jié)構(gòu),它就察看inode數(shù)據(jù),并將其中某些數(shù)據(jù)傳給用戶空間。
3、文件對象
打開一個文件還需要其它的操作:獲取文件結(jié)構(gòu)(內(nèi)核實現(xiàn)的文件描述表)。最新分配的文件結(jié)構(gòu)被初始化為一個指向目錄結(jié)構(gòu)的指針和一組文件操作函數(shù)集合。這些數(shù)據(jù)從inode獲得。然后調(diào)用特定的文件系統(tǒng)實現(xiàn)的open()文件操作執(zhí)行相關(guān)的任務。這是VFS交換功能的一個實現(xiàn)。文件結(jié)構(gòu)被加入進程的文件表述表。
讀、寫和關(guān)閉文件(以及其它相關(guān)的VFS操作)通過用戶空間的文件描述表獲取對應的文件結(jié)構(gòu),然后調(diào)用請求的文件結(jié)構(gòu)來實現(xiàn)需要得功能。一旦文件被打開,目錄結(jié)構(gòu)將保持在使用狀態(tài),表示VFS inode處于被訪問狀態(tài)。

二、注冊和加載文件系統(tǒng)
注冊和注銷一個文件系統(tǒng)時,使用下面的API:
   #include <linux/fs.h>
   extern int register_filesystem(struct file_system_type *);
   extern int unregister_filesystem(struct file_system_type *);
傳遞的參數(shù)file_system_type結(jié)構(gòu)描述了注冊的文件系統(tǒng)。當生成將一個設(shè)備掛載到文件空間的一個目錄時,VFS將調(diào)用相應文件系統(tǒng)所實現(xiàn)的get_sb()方法。接著,被掛載點的目錄結(jié)構(gòu)將被更新指向新文件系統(tǒng)的root inode節(jié)點。
在/proc/filesystems中可以看到在內(nèi)核中注冊的所有文件系統(tǒng)。
1、file_system_type結(jié)構(gòu)
該結(jié)構(gòu)對文件系統(tǒng)進行描述,在2.6.20內(nèi)核中,其在include/linux/fs.h定義如下:
struct file_system_type {
const char *name;
int fs_flags;
int (*get_sb) (struct file_system_type *, int,
         const char *, void *, struct vfsmount *);
void (*kill_sb) (struct super_block *);
struct module *owner;
struct file_system_type * next;
struct list_head fs_supers;
struct lock_class_key s_lock_key;
struct lock_class_key s_umount_key;
};
name:   文件系統(tǒng)類型名,如"ext2", "iso9660", "msdos"等
fs_flags: 幾種文件系統(tǒng)flag標志(FS_REQUIRES_DEV, FS_NO_DCACHE等)
get_sb:  加載(mount)新的文件系統(tǒng)實例時會調(diào)用的方法。sb指super block
kill_sb: 卸載(unmount)文件系統(tǒng)實例時調(diào)用
owner:  VFS內(nèi)部使用,大多數(shù)情況下,應該被初始化為 THIS_MODULE
next:  VFS內(nèi)部使用,初始化為NULL
s_lock_key:
s_umount_key:
get_sb參數(shù)如下:
struct super_block *sb: superblock結(jié)構(gòu),該結(jié)構(gòu)部分由vFS初始化,其余的在get_sb()方法中初始化
int flags:  掛載標志
const char *dev_name: 掛載的設(shè)備名
void *data:  掛載屬性選項,通常為ASCII字符串
int silent:  出錯時的處理方式
get_sb()方法必須superblock中指定的塊設(shè)備是否包含該方法支持的文件系統(tǒng)。執(zhí)行成功,就返回指向superblock的指針,出錯則返回NULL
s_op成員是get_sb中需要關(guān)注的項,它是一個指向結(jié)構(gòu)"struct super_operations"的指針,該結(jié)構(gòu)描述了文件系統(tǒng)的底層實現(xiàn)。
通常,一個文件系統(tǒng)使用get_sb()的具體實現(xiàn)中的一個,并提供fill_super方法。具體方法如下:
get_sb_bdev: 掛載塊設(shè)備上的文件系統(tǒng)
get_sb_nodev:掛載無設(shè)備文件系統(tǒng)
get_sb_single:掛載在掛載點之間共享實例的文件系統(tǒng)
fill_super方法實現(xiàn)含有的變量如下:
struct super_block *sb: super_block結(jié)構(gòu),由fill_super()初始化
void *data:  掛載屬性選項,通常為ASCII字符串
int silent:  出錯時的處理方式

三、Superblock對象
一個Superblock對象代表了一個掛載的文件系統(tǒng)。
1、super_operations結(jié)構(gòu)
該結(jié)構(gòu)描述了VFS操作文件系統(tǒng)的方式。在2.6.20內(nèi)核中,其在include/linux/fs.h定義如下:
struct super_operations {
    struct inode *(*alloc_inode)(struct super_block *sb);
void (*destroy_inode)(struct inode *);
void (*read_inode) (struct inode *);
 
    void (*dirty_inode) (struct inode *);
int (*write_inode) (struct inode *, int);
void (*put_inode) (struct inode *);
void (*drop_inode) (struct inode *);
void (*delete_inode) (struct inode *);
void (*put_super) (struct super_block *);
void (*write_super) (struct super_block *);
int (*sync_fs)(struct super_block *sb, int wait);
void (*write_super_lockfs) (struct super_block *);
void (*unlockfs) (struct super_block *);
int (*statfs) (struct dentry *, struct kstatfs *);
int (*remount_fs) (struct super_block *, int *, char *);
void (*clear_inode) (struct inode *);
void (*umount_begin) (struct vfsmount *, int);
int (*show_options)(struct seq_file *, struct vfsmount *);
int (*show_stats)(struct seq_file *, struct vfsmount *);
#ifdef CONFIG_QUOTA
ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
#endif
};
所有的方法調(diào)用時除非特別要求,不會持有任何鎖。這意味著,這些方法可以安全的阻塞。這些發(fā)放必須在進程的上下文中調(diào)用。(不能通過中斷句柄或者下半部bottom half調(diào)用——沒有進程上下文)
alloc_inode: 該方法由inode_alloc調(diào)用,為inode結(jié)構(gòu)分配空間和初始化。如果未定義該方法,將分配一個簡單的inode結(jié)構(gòu)。通常,alloc_inode被用來分配一個包含inode結(jié)構(gòu)的大型數(shù)據(jù)結(jié)構(gòu)。
destroy_inode: 該方法由destroy_inode調(diào)用,用以釋放為inode結(jié)構(gòu)分配的資源。它只在alloc_inode方法被定義時有效,簡單的逆向執(zhí)行(undo)alloc_inode中的處理。
read_inode: 該方法被用來從掛載的文件系統(tǒng)中讀取一個特定的inode。VFS設(shè)置inode結(jié)構(gòu)中的i_ino成員來指示被讀取得inode。其它的成員由該方法設(shè)置。
dirty_inode: VFS調(diào)用該方法來標記一個臟inode節(jié)點。
write_inode: VFS調(diào)用該方法將inode結(jié)構(gòu)協(xié)會磁盤。第二個參數(shù)標示使用同步寫還是異步方式,不是所有的文件系統(tǒng)都檢查該標記。
put_inode: 在VFS的inode從cache中移除時調(diào)用。。
drop_inode: 在最后一個對該inode節(jié)點的訪問操作被放棄時調(diào)用,該操作持有inode_lock自旋鎖。該方法必須或為空(NULL,通常意義上的Unix文件系統(tǒng)語義),或為"generic_delete_inode"(為不需要緩存inode的文件系統(tǒng),以使無論i_nlink為何值的情況下,都會調(diào)用"delete_inode")  "generic_delete_inode()"和曾經(jīng)在 put_inode()中使用的"force_delete"行為相似,但是不會存在"force_delete"方法的競爭。
delete_inode: VFS調(diào)用該方法刪除一個inode節(jié)點。
put_super; VFS調(diào)用該方法釋放一個superblock(如umount)。在持有superblock鎖時調(diào)用
write_super: 載VFS superblock需要寫入磁盤時調(diào)用,該方法為可選。
sync_fs: 在VFS寫一個superblock相關(guān)的所有inode節(jié)點時調(diào)用。第二個參數(shù)指示是否等待所有的寫操作完成后再執(zhí)行。可選。
write_super_lockfs: 在VFS鎖住一個文件系統(tǒng)時調(diào)用,并強制進入一致狀態(tài)。該方法現(xiàn)在由邏輯卷管理器(LVM)使用。
unlockfs; VFS調(diào)用該方法釋放文件系統(tǒng)的鎖,使其重新可寫。
statfs:  在VFS需要獲得文件系統(tǒng)統(tǒng)計信息時調(diào)用。該方法調(diào)用需要獲得內(nèi)核鎖。
remount_fs: 在文件系統(tǒng)重新掛載時調(diào)用。該方法調(diào)用需要獲得內(nèi)核鎖。
clear_inode: 在VFS清除一個inode節(jié)點試調(diào)用。可選。
umount_begin; 在VFS卸載文件系統(tǒng)時調(diào)用。
//sync_inodes; VFS寫superblock關(guān)聯(lián)的臟數(shù)據(jù)時調(diào)用。 --2.6.20中取消
show_options: 在VFS顯示/proc/<pid>/mounts的掛載參數(shù)時調(diào)用。
show_stats:
quota_read: VFS調(diào)用該方法讀取文件系統(tǒng)的配額文件。
quota_write; VFS調(diào)用該方法寫入文件系統(tǒng)的配額文件。
read_inode()方法負責填充i_op域,該域是一個指向inode_operations結(jié)構(gòu)的指針,該結(jié)構(gòu)描述了每個inodes的操作方法。

四、inode對象

inode是文件系統(tǒng)中的對象元素。

1、inode_operations結(jié)構(gòu)

該結(jié)構(gòu)描述了VFS如何操作文件系統(tǒng)中的inode。在2.6.20中定義如下:

struct inode_operations {
 int (*create) (struct inode *,struct dentry *,int, struct nameidata *);
 struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *);
 int (*link) (struct dentry *,struct inode *,struct dentry *);
 int (*unlink) (struct inode *,struct dentry *);
 int (*symlink) (struct inode *,struct dentry *,const char *);
 int (*mkdir) (struct inode *,struct dentry *,int);
 int (*rmdir) (struct inode *,struct dentry *);
 int (*mknod) (struct inode *,struct dentry *,int,dev_t);
 int (*rename) (struct inode *, struct dentry *,
   struct inode *, struct dentry *);
 int (*readlink) (struct dentry *, char __user *,int);
 void * (*follow_link) (struct dentry *, struct nameidata *);
 void (*put_link) (struct dentry *, struct nameidata *, void *);
 void (*truncate) (struct inode *);
 int (*permission) (struct inode *, int, struct nameidata *);
 int (*setattr) (struct dentry *, struct iattr *);
 int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
 int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
 ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
 ssize_t (*listxattr) (struct dentry *, char *, size_t);
 int (*removexattr) (struct dentry *, const char *);
 void (*truncate_range)(struct inode *, loff_t, loff_t);
};

所有方法除非特別要求,調(diào)用時不必持有鎖。

create:  由open(2)和create(2)系統(tǒng)調(diào)用調(diào)用。只在需要支持常規(guī)文件時必須定義。獲得的目錄結(jié)構(gòu)不能存在inode(如,消極entry.如果有,就不需要創(chuàng)建了)。也許還需要為該dentry和新創(chuàng)建的inode調(diào)用d_instantiate()。

lookup:  在VFS需要從父目錄里查找一個inode時調(diào)用。查找的名字從dentry中獲得。該方法將找到的inode通過調(diào)用 d_add()插入到目錄結(jié)構(gòu)中。結(jié)構(gòu)中的i_count項增1。如果該名字的inode不存在,則在dentry中增加一個空的inode(該 dentryb被稱為消極dentry)

link:  由link(2)系統(tǒng)調(diào)用調(diào)用,只在需要支持硬鏈接(hard link)時必須定義。和在create()方法中類似,需要調(diào)用d_instantiate()。

ulink:  由ulink(2)系統(tǒng)調(diào)用調(diào)用,只在需要支持刪除inode時必須定義。

symlink: 由symlink(2)系統(tǒng)調(diào)用調(diào)用,只在需要支持軟鏈接(symbolick link)時必須定義。和在create()方法中類似,需要調(diào)用d_instantiate()。

mkdir:  由mkdir(2)系統(tǒng)調(diào)用調(diào)用,只在需要支持軟鏈接(symbolick link)時必須定義。和在create()方法中類似,需要調(diào)用d_instantiate()。

rmdir:  由rmdir(2)系統(tǒng)調(diào)用調(diào)用,只在需要支持刪除子目錄時必須定義。

mknod:  由mknode(2)系統(tǒng)調(diào)用用來為設(shè)備(字符或塊),命名管道或者套接字創(chuàng)建inode時調(diào)用,只在需要支持創(chuàng)建這類inode時必須定義。和在create()方法中類似,需要調(diào)用d_instantiate()。

rename:  由rename(2)系統(tǒng)調(diào)用調(diào)用,將源inode和dentry(前兩個)改為目標inode和dentry(后兩個)的父目錄和文件名。

readlink: 由readlink(2)系統(tǒng)調(diào)用調(diào)用,只在需要支持軟鏈接(symbolick link)時必須定義。

follow_link: 由VFS調(diào)用,用來獲得一個軟鏈接所指向的inode,只在需要支持軟鏈接(symbolick link)時必須定義。該方法返回一個可以傳給put_link()方法的空指針。

put_link: 由VFS調(diào)用,用來釋放由follow_link分配的資源。該方法的最后一個參數(shù)是由follow_up返回的一個空指針的值參。它在頁緩存不穩(wěn)定的文件系統(tǒng)(如,NFS)中應用。

truncate: 由VFS調(diào)用,用來改變一個文件的大小。必須在該方法調(diào)用前用需要得大小來設(shè)置inode的i_size值。該方法被truncate(2)以及相關(guān)的系統(tǒng)調(diào)用調(diào)用。

permission: VFS調(diào)用該方法檢查在POSIX類的文件系統(tǒng)上的訪問權(quán)限。

serattr: VFS調(diào)用該方法設(shè)置文件的屬性。該方法被chmod(2)以及相關(guān)的系統(tǒng)調(diào)用調(diào)用。

getattr: 獲得文件屬性。由stat(2)以及相關(guān)系統(tǒng)調(diào)用調(diào)用。

setxattr: VFS調(diào)用該方法設(shè)置文件的擴展屬性信息。擴展屬性是inode相關(guān)的"name:value"對。該方法由setxattr(2)系統(tǒng)調(diào)用調(diào)用。

getxattr; VFS調(diào)用該方法獲得給定文件擴展屬性的值。該方法由getxattr(2)系統(tǒng)調(diào)用調(diào)用。

listxattr: VFS調(diào)用該方法列出給定文件的所有擴展屬性信息。該方法由listxattr(2)系統(tǒng)調(diào)用調(diào)用。

removexattr: VFS調(diào)用該方法移除給定文件的所有擴展屬性信息。該方法由removexattr(2)系統(tǒng)調(diào)用調(diào)用。

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美午夜电影在线| 国产精品久久久久久久久久免费| 玖玖国产精品视频| 亚洲午夜精品视频| 国产伦精品一区二区三区视频孕妇| 欧美日韩第一页| 亚洲淫性视频| 午夜视频久久久| 亚洲国产精品一区二区三区| 美女视频黄a大片欧美| 久久久久中文| 亚洲精品女人| 亚洲午夜日本在线观看| 国产一区高清视频| 亚洲第一页中文字幕| 欧美另类99xxxxx| 午夜电影亚洲| 久久久久国产精品麻豆ai换脸| 欧美sm视频| 亚洲一区二区三区视频| 亚洲免费视频一区二区| 一色屋精品视频在线看| 欧美国产日本高清在线| 国产精品二区在线| 久久天堂精品| 欧美日韩一区二区三区在线看| 黄色成人在线免费| 亚洲福利在线视频| 国产精品久久毛片a| 老色鬼久久亚洲一区二区| 欧美日本不卡| 久久婷婷国产麻豆91天堂| 欧美啪啪成人vr| 久久久久久国产精品mv| 欧美了一区在线观看| 久久女同精品一区二区| 欧美揉bbbbb揉bbbbb| 女同性一区二区三区人了人一 | 亚洲日本电影在线| 亚洲精选久久| 欧美激情一二区| 久久激情视频久久| 国产精品国产精品| 亚洲国产激情| 黄色一区二区三区四区| 宅男噜噜噜66一区二区66| 最新中文字幕一区二区三区| 欧美一区=区| 午夜精彩视频在线观看不卡 | 欧美成人精品不卡视频在线观看 | 欧美成年人网站| 欧美日韩综合不卡| 欧美激情一区二区久久久| 国产午夜精品美女毛片视频| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲综合视频在线| 一二三四社区欧美黄| 久久久久免费视频| 久久久久9999亚洲精品| 国产老肥熟一区二区三区| 中国成人黄色视屏| 亚洲欧美国产精品va在线观看| 亚洲免费在线看| 亚洲欧美日产图| 国产精品久久久久9999高清 | 亚洲国产视频一区二区| 欧美一区二区三区精品电影| 欧美影院在线播放| 国产日韩欧美高清| 欧美在线亚洲综合一区| 久久中文欧美| 亚洲国产精品国自产拍av秋霞| 欧美激情成人在线视频| 亚洲福利免费| 欧美刺激午夜性久久久久久久| 99这里只有精品| 欧美国产日韩a欧美在线观看| 亚洲欧美色婷婷| 国产精品亚洲激情| 欧美在线亚洲一区| 欧美韩日精品| 一本到高清视频免费精品| 欧美日韩伊人| 亚洲一区二区久久| 欧美中文字幕在线播放| 韩国成人福利片在线播放| 久久免费视频网站| 亚洲精品视频一区| 欧美一区二区啪啪| 在线成人性视频| 欧美日韩精品久久久| 亚洲伊人观看| 欧美电影在线| 亚洲欧美日韩天堂| 永久域名在线精品| 欧美三级日本三级少妇99| 午夜天堂精品久久久久| 亚洲福利专区| 性欧美暴力猛交另类hd| 欲色影视综合吧| 欧美三区在线| 久久在线播放| 亚洲欧美视频在线观看视频| 欧美88av| 久久成人国产精品| 日韩视频一区| 国产一区二区三区在线免费观看| 国产精品99久久久久久久久久久久 | 国产视频一区三区| 蜜桃av一区二区三区| 亚洲一区成人| 亚洲国产视频直播| 午夜精品久久久久久| 亚洲电影第1页| 国产精品综合视频| 欧美日韩视频在线| 久久综合影视| 欧美一区二区视频97| 9久re热视频在线精品| 欧美fxxxxxx另类| 久久国产天堂福利天堂| 亚洲无毛电影| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩国产a| 久久香蕉国产线看观看av| 亚洲午夜电影网| 亚洲精品综合在线| 亚洲黄色在线| 美女久久一区| 麻豆久久婷婷| 久久九九全国免费精品观看| 亚洲午夜女主播在线直播| 亚洲美女视频在线观看| 1769国产精品| 亚洲国产成人久久| 激情欧美一区二区| 黄色成人免费网站| 韩国女主播一区二区三区| 国产午夜精品久久久久久久| 国产精品日韩| 国产日韩欧美一区| 国产日韩欧美在线观看| 国产精品美女久久福利网站| 欧美午夜免费| 国产精品亚洲成人| 国产欧美一区二区精品婷婷| 国产精品日日摸夜夜摸av| 国产精品免费福利| 国产精品视频yy9099| 国产精品午夜春色av| 国产精品入口麻豆原神| 国产女主播在线一区二区| 国产免费观看久久黄| 国产毛片一区| 韩日成人在线| 亚洲国产天堂久久国产91| 91久久在线播放| 亚洲视频在线看| 亚洲欧美在线高清| 欧美一区日本一区韩国一区| 久久久久久久久综合| 久久综合色8888| 亚洲二区在线视频| 日韩午夜在线电影| 亚洲一区尤物| 另类av一区二区| 欧美日本韩国| 国产免费观看久久| 亚洲电影毛片| 亚洲一区二区三区视频播放| 久久爱www.| 亚洲国产mv| 亚洲一区国产| 免费欧美网站| 国产精品在线看| 亚洲国产高清aⅴ视频| 日韩午夜在线电影| 亚洲欧美日韩一区二区三区在线| 日韩午夜精品视频| 亚洲欧美中文另类| 欧美激情按摩| 亚洲深爱激情| 麻豆成人在线| 国产欧美精品在线| 夜色激情一区二区| 久久久久久穴| 一区二区三区成人| 美女被久久久| 国产美女诱惑一区二区| 日韩午夜av| 久久综合国产精品台湾中文娱乐网| 欧美一区日韩一区| 欧美高清视频在线播放| 亚洲欧美在线另类| 欧美理论电影网| 在线看一区二区| 欧美在线观看一区二区| 亚洲精品乱码久久久久久按摩观| 欧美成年网站| 香蕉成人啪国产精品视频综合网|