3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

UBIFS

發(fā)布時間:2024/8/24 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 UBIFS 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考:http://www.linux-mtd.infradead.org/doc/ubifs.html

UBIFS - UBI File-System

Table of contents

Big red note
Overview
Power-cuts tolerance
UBIFS and MLC NAND flash
The unstable bits issue
Source code
Mailing list
User-space tools
Scalability
Write-back support
Write-back knobs in Linux
UBIFS write-buffer
UBIFS in synchronous mode vs JFFS2
Synchronization exceptions for buggy applications
Compression
Checksumming
Read-ahead
Space for superuser
Extended attributes
Mount options
Flash space accounting issues
Documentation
Raw flash vs. FTL devices

Big red note

One thing people have to understand when dealing with UBIFS is that UBIFS is very different to any traditional file system - itdoes notwork on top of block devices (likehard drives,MMC/SD cards,USB flash drives,SSDs, etc). UBIFS was designed to work on top ofrawflash, which has nothing to do with block devices. This is why UBIFS does not work onMMC cardsand the like - they look like block devices to the outside world because they implementFTL(Flash Translation Layer) support in hardware, which simply speaking emulates a block device on top of the built-in raw flash. Please, make sure you understand the differences between raw flash and, say, MMC flash before dealing with UBIFS.Thissection should help.

Overview

UBIFS is a new flash file system developed by Nokia engineers with help ofthe University of Szeged. In a way, UBIFS may be considered as the next generation of the JFFS2 file-system.

JFFS2 file system works on top of MTD devices, but UBIFS works on top of UBI volumes and cannot operate on top of MTD devices. In other words, there are 3 subsystems involved:

MTD subsystem, which provides uniform interface to access flash chips. MTD provides an notion of MTD devices (e.g.,/dev/mtd0) which basically represents raw flash;
UBI subsystem, which is a wear-leveling and volume management system for flash devices; UBI works on top of MTD devices and provides a notion of UBI volumes; UBI volumes are higher level entities than MTD devices and they are devoid of many unpleasant issues MTD devices have (e.g., wearing and bad blocks); seeherefor more information;
UBIFS file system, which works on top of UBI volumes.

Here is a list of some of UBIFS features:

scalability- UBIFS scales well with respect to flash size; namely, mount time, memory consumption and I/O speed does not depend on flash size (currently it is not 100% true for memory consumption, but the dependency is very weak, and this may be fixed); UBIFS (not UBI!) should work fine for hundreds of GiB flashes; however, UBIFS depends on UBI which has scalability limitations (seehere); nonetheless, the UBI/UBIFS stack scales much better than JFFS2, and if UBI becomes a bottleneck, it is always possible to implement UBI2 without changing UBIFS;
fast mount- unlike JFFS2, UBIFS does not have to scan whole media when mounting, it takes milliseconds for UBIFS to mount the media, and this does not depend on flash size; however, UBI initialization time depends on flash size and has to be taken into account (seeherefor more details);
write-back support- this dramatically improves the throughput of the file system in many workloads, comparing to JFFS2, which is write-through; seeherefor more details;
tolerance to unclean reboots- UBIFS is a journaling file system and it tolerates sudden crashes and unclean reboots; UBIFS just replays the journal and recovers from the unclean reboot; mount time is a little bit slower in this case, because of the need to replay the journal, but UBIFS does not need to scan whole media, so it anyway takes fractions of a second to mount UBIFS; note, authors payed special attention to this UBIFS aspect, seehere;
fast I/O- even with write-back disabled (e.g., if UBIFS is mounted with the "-o sync" mount option) UBIFS shows good performance which is close to JFFS2 performance; bear in mind, it is extremely difficult to compete with JFFS2 in synchronous I/O, because JFFS2 does not maintain indexing data structures on flash, so it does not have the maintenance overhead, while UBIFS does have it; but UBIFS is still fast because of the way UBIFS commits the journal - it does not move the data physically from one place to another but instead, it just adds corresponding information to the file system index and picks different eraseblocks for the new journal (i.e., UBIFS has sort of "wandering" journal which constantly changes the position); there are other tricks like multi-headed journal which make UBIFS perform well;
on-the-flight compression- the data are stored in compressed form on the flash media, which makes it possible to put considerably more data to the flash than if the data were not compressed; this is very similar to what JFFS2 has; UBIFS also allows to switch the compression on/off on per-inode basis, which is very flexible; for example, one may switch the compression off by default and enable it only for certain files which are supposed to compress well; or one may switch compression on by default but disable it for supposedly uncompressible data like multimedia files; at the moment UBIFS supports only zlib and LZO compressors and it is not difficult to add more; seethissection for more information.
recoverability- UBIFS may be fully recovered if the indexing information gets corrupted; each piece of information in UBIFS has a header which describes this piece of information, and it is possible to fully reconstruct the file system index by scanning the flash media; this is very similar to JFFS2; to make it more clear, imaging you have wiped out the FAT table on your FAT file system; for FAT FS this would be fatal; but if you similarly wipe out UBIFS index, you still may re-construct it, although a special user-space tool would be required to do this (this utility is not implemented at the moment, though);
integrity- UBIFS (as well as UBI) checksums everything it writes to the flash media to guarantee data integrity, UBIFS does not leave data or meta-data corruptions unnoticed (JFFS2 is doing the same); By default, UBIFS checks only meta-data CRC when it reads from the media, but not the data CRC; however, you may force CRC checking for data using one of the UBIFS mount options - seehere.

Power-cuts tolerance

Both UBI (seehere) and UBIFS are tolerant to power-cuts, and they were designed with this property in mind.

Year 2011 note: however, there is an unsolvedunstable bitsissue which makes UBI/UBIFS fail to recover after a power cut on modern SLC and MLC flashes. This issue has not been observed on older SLC NANDs back at the time UBI/UBIFS was being developed. Note, the below text is quite old and has been written before the unstable bits issue has been first discovered.

UBIFS has internal debugging infrastructure to emulate power failures and the authors used it for extensive testing. It was tested for long time with power-fail emulation. The advantage of the emulation is that it emulates power failures even at the situations which happen not very often. For example, when the master node is updated, or the log is changed. The probability to interrupt the system at those moments is very low in real-life.

There is also a powerful user-space test program calledintegckwhich performs a lot of random I/O operations and checks the integrity of the FS after remount. This test can also handle emulated power-cuts and check the FS integrity.

Real power-cut tests have also been done on OneNAND flash. We used Power Node devices which are controlled via serial line and can switch the power of the connected device on and off. UBIFS survived more than 100000 power-cuts while running stress tests.

We've also done real power-cut tests on Spansion NOR flash. Some problems were found, but they were fixed and the board survived 10000 power-cuts after this. Please, see related discussions at theMTD mailing list. The thread has "UBIFS Corrupt during power failure" subject. The beginning of the thread may be foundhere, then it continueshere, and then continueshere, andhere, andhere.

UBIFS and MLC NAND flash

UBIFS authors never tested UBI/UBIFS on MLC flash devices. Let's consider some specific aspects of MLC NAND flashes:

[OK] MLC NAND flashes are more "faulty" than SLC, so they use stronger ECC codes; these ECC codes often occupy whole OOB area (as do the ECC codes on some newer SLC flashes, which are more error-prone than previous generations of flash); this is not a problem for UBI/UBIFS, because neither UBIFS nor UBI use OOB area;
[OK] when the data are written to an eraseblock, they have to be written sequentially, from the beginning of the eraseblock to the end of it; this is also not a problem because it is exactly what UBI and UBIFS do (see alsothissection);
[OK] MLC flashes have rather short eraseblock life-cycles of just a few thousand erase cycles; this is not a problem because UBI uses a deterministic wear-leveling algorithm. However, the default 4096 erases wear-levelling threshold may need to be lessened for MLC.
[NEED WORK] MLC flashes exhibit bit-flips as a result of "program disturb" and "read disturb" errors (seehere). These errors are sometimes referred to as "reversible" errors in NAND datasheets, meaning that they disappear once the block in which they are located is erased; as opposed to "irreversible" errors which are due to cell wear and cause permanent bit failures. Note that SLC flashes have these same errors, but they are much more common on MLC:[NEED WORK] There is another aspect of MLC flashes which may need closer attention: the "paired pages" problem (e.g., seethisPower Point presentation). Namely, MLC NAND pages are coupled in a sense that if you cut power while writing to a page, you corrupt not only this page, but also one of the previous pages which is paired with the current one. For example, pages 0 and 3, 1 and 4, 2 and 5, 3 and 6 in and so on (in the same eraseblock) may be paired (page distance is 4, but there may be other distances). So if you write data to, say, page 3 and cut the power, you may end up with corrupted data in page 0. UBIFS is not ready to handle this problem at the moment and this needs some work.

NAND flashes have a so called "read-disturb" property, which means that a NAND page read operation may introduce a persistent bit change, not necessarily located in the page being read; the ECC code would fix it, but more read operations may introduce more bit changes and correctable ECC errors may turn into uncorrectable ECC errors; however, when these errors occur on the same page that is being read, this should not be a problem because UBI is doing scrubbing; in other words, once UBI notices that there is a correctable bit-flip in an eraseblock, it moves the contents of this physical eraseblock to a different physical eraseblock, and re-maps the corresponding logical eraseblock to the new physical eraseblock; so UBI refreshes the data and gets rid of bit-flips, thus improving data integrity.
"Read-disturb" errors can also occur on a pageotherthat the one being read, but which is within the same eraseblock. This is not a problem if page read operations are spread around somewhat evenly within the eraseblock, since the bit-flip will soon be detected and corrected through the "scrubbing" process described above. However, if a particular page within a block is rarely read, scrubbing will not have a chance to fix errors, and they may accumulate over time until they become unfixable. This is very similar the next problem.
NAND flashes also have a "program-disturb" property, which means that if you program a NAND page, you may introduce a bit-flip in a different NAND page. The bit change can be fixed by ECC, but with time the changes may accumulate and become unfixable. Current UBI bit-flip handling only partially helps here, because it is passive, which means that UBI notices bit-flips only when performing users' read requests. So if you never read the NAND page which accumulates bit-flips, UBI will never notice this.

The read and program disturb issues should be possible to handle by implementing a kind of "flash crawler" which would read all of the NAND pages in the background from time to time (at UBI level) making UBI notice and fix bit-flips. This is not implemented though, and this can probably be done from user-space.

UBIFS can handle this problem by avoiding using the rest of free space in LEBs after a sync or commit operation. E.g., if start writing to a new journal LEB, and then have a sync or commit, we should "waste" some amount of free space in this LEB to make sure that the previous paired page does not contain synced data. This way we guarantee that a power cut will not corrupt the synced or committed data. And the "wasted" free space can be re-used after that LEB has been garbage-collected. Similar to all the other LEBs we write to (LPT, log, orphan, etc). This would require some work and would make UBIFS slower, so this should probably be optional. The way to attack this issue is to improve UBIFS power cut emulation and implement "paired-pages" emulation, then use theintegcktest for testing. After all the issues are fixed, real power-cut tests could be carried out.

[NEED WORK] The "unstable bits issue", which is not MLC-specific, describedhere.

The unstable bits issue

In the MTD community the "unstable bits" term is used to describe data instabilities caused by power cuts while writing or erasing. The unstable bits issue is still not resolved in UBI and UBIFS, and it was reported several times in the MTD mailing list. In theory, this issue should be visible in any flash, but for some reason back at the times when we developed UBI/UBIFS and extensively tested them on a robust SLC NAND, we did not observe it. No one reported about this issue for NOR flash yet. However, on modern SLC and MLC flashes this problem is reproducible.

The unstable bits are the result of a power cut during a program or erase operation. Depending on when the power cut has happened, they can corrupt the data or the free space. Consider the following 4 situations:

The power cut happens just before the NAND page program operation finishes. After reboot the page may be read correctly and without a single bit-flip say, 2 times, and the 3rd time you may get an ECC error. This happens because the page contains a number of unstable bits which are sometimes read correctly and sometimes not.
The power cut happens just after the NAND page program operation starts. After reboot, the page may be read correctly (return all 0xFFs) most of the time, but sometimes you may get some bits set to zero. Moreover, if you then program this page, it also may be sometimes read correctly, but sometimes return an ECC error. The reason is again the unstable bits in the NAND page.
The power cut happens just before the eraseblock erase operation finishes. After reboot, the eraseblock may contain unstable bits and data in this eraseblock may suddenly become corrupted.
The power cut happens just after the eraseblock erase operation starts. After reboot, the eraseblock may contain unstable bits and sometimes return zero bits on read, or corrupted data if you program it.

The number of unstable bits resulting from a power-cut may be greater than what the ECC algorithm is able to correct. This is why a previously readable page may suddenly become unreadable, or conversely a previously unreadable page may suddenly become readable.

Here is an example scenario how UBIFS may fail. UBIFS writes data node A to the journal LEB, and a power cut of type 1 happens. After the reboot, UBIFS recovery code reads that LEB, no bit-flips are reported by MTD, all the CRCs match, everything looks fine. UBIFS just assume that this LEB is all-right and the free space at the end of this LEB can be used for writing more data. UBIFS performs the commit operations, writes more user data, and everything works fine until the user reads node A by reading the corresponding file: an ECC error happens and the user gets theEIOerror.

TheEIOmay be what the user gets instead of his/her data also if a type 2 power cut happens, and UBIFS re-uses the corrupted free space for writing new nodes, and then these nodes are read.

The solution is to teach UBIFS to erase-cycle any LEB which could potentially be written to when the power cut happened. This is not only about the journal LEBs, but also LPT, log, master and orphan LEBs. This means that the valid data from this LEB has to be read (and only once!) and then it should be written back to this LEB using theatomic LEB changeUBI operation. This has to be done even if the LEB looks all-right - no corruptions, all 0xFFs at the end.

Similarly, UBI has to erase-cycle every eraseblock which could potentially be erased when the power cut happened.

The other requirement is that during the recovery UBI/UBIFS should read data from the media only once. This is easy to demonstrate on the delayed recovery example. The delayed recovery happens when after a power cut the file-system is mounted R/O, in which case UBIFS must not write anything to the flash, and the real recovery is delayed until the FS is re-mounted R/W. Currently UBIFS just scans the journal during mounting R/O, drops (or "remembers") corrupted nodes, and "does not let" users read them. But there is no guarantee that UBIFS spots all the corrupted nodes during the first scanning, so users may getEIOwhile reading data from the R/O-mounted FS.

When UBIFS is then remounted R/W, it actually drops the corrupted nodes from the flash media by erase-cycling the corresponding LEBs. And UBIFS re-reads all the LEB data again. And there is no guarantee that UBIFS will get the same corruptions again.

So it is important to make sure that the corrupted LEBs are read only once. E.g., we can cache the results of the first scanning, and then use that data when running the delayed recovery, instead of re-reading the data. Probably we may remember only the last NAND page containing valid nodes, not whole LEB, since for the journal only unstable bits of type 1 and 2 are relevant.

There are similar double-read issues in UBI scanning - when it finds 2 PEBs belonging to the same LEB and it has to find out which one is newer. The volume table has to be erase-cycled as well in UBI.

There are more issues related to unstable bits of type 2 and 3 in UBI, I think. This all needs a very careful look, and this is not trivial to fix because of the complexity: UBIFS as any file-system has many interfaces and a lot of states. The best strategy to attack this problem would be:

Improve the existing power cut emulation infrastructure in UBIFS and start emulating unstable bits. Start with emulating only one type of unstable bits, e.g., type 1.
Use theintegcktest to stress the file-system with power cut emulation enabled - the test can re-start when an emulated power cut happens. This will allow you to very quickly emulate hundreds of power cuts in interesting places. Fix all the bugs. Make sure it is rock solid. Of course, if you have various independent issues, you may temporary hack the power cut emulation code to emulate unstable bits only at certain places, to temporarily limit the amount of problems you have to simultaneously deal with.
Start emulating other types of unstable bits, and fix all the issues one-by-one.
Go down to UBI and add a similar power cut emulation infrastructure. But emulate unstable bits only in UBI-specific on-flash data structures - the EC/VID headers and the volume table. Improve theintegcktest to support that infrastructure and fix all the issues.
Run real power cut tests on real hardware.

Source code

The UBIFS git tree is

git://git.infradead.org/ubifs-2.6.git

Hereis the corresponding Git-web view.

The git tree hasmasterandlinux-nextbranches. Themasterbranch contains the most recent stuff which is often incomplete, buggy, or not tested very well. This branch may be re-based from time to time. Thelinux-nextbranch contains stable UBIFS updates and fixes. This branch is included to thelinux-nextgit tree and goes to main-line. This branch contains patched which will be merged upstream during the merge window.

There are also3.0-3.6kernel back-ports which may be found here:

git://git.infradead.org/~dedekind/ubifs-v3.10.git
git://git.infradead.org/~dedekind/ubifs-v3.9.git
git://git.infradead.org/~dedekind/ubifs-v3.8.git
git://git.infradead.org/~dedekind/ubifs-v3.7.git
git://git.infradead.org/~dedekind/ubifs-v3.6.git
git://git.infradead.org/~dedekind/ubifs-v3.5.git
git://git.infradead.org/~dedekind/ubifs-v3.4.git
git://git.infradead.org/~dedekind/ubifs-v3.3.git
git://git.infradead.org/~dedekind/ubifs-v3.2.git
git://git.infradead.org/~dedekind/ubifs-v3.1.git
git://git.infradead.org/~dedekind/ubifs-v3.0.git

Mailing list

You are welcome to send feed-back, bug-reports, patches, etc to theMTD mailing list. Feel free to ask questions, but please, check theUBIFS FAQbefore doing this.

User-space tools

There is only one UBIFS user-space tool at the moment -mkfs.ubifs, which creates UBIFS images. The tool may be found in theMTD utilsrepository (themkfs.ubifssub-directory):


git://git.infradead.org/mtd-utils.git

The images produced bymkfs.ubifsmay be written to UBI volumes usingubiupdatevolor may be further fed to theubinizetool to create an UBI image which may be put to the raw flash.

Scalability

All the data structures UBIFS is using are trees, so it scales logarithmically in terms of flash size. However, UBI scales linearly (seehere) which makes overall UBI/UBIFS stack scalability to be linear. But UBIFS authors believe it is possible to create logarithmically scalable UBI2 and improve the situation. Current UBI should be OK for 2-16GiB raw flashes, depending on the I/O speed and the requirements.

Note, although UBI scalability is linear, it anyway scales much better than JFFS2, which was originally designed for small ~32MiB NOR flashes. JFFS2 has scalability issues on the "file system level", while UBI/UBIFS stack has scalability issues only on lower "raw flash level". The following table describes the issues in more details.

Scalability issue JFFS2 UBIFS
Mount time linearly depends on the flash size True, the dependency is linear, because JFFS2 has to scan whole flash media when mounting. UBIFS mount time does not depend on the flash size. But UBI needs to scan the flash media, which is actually quicker than JFFS2 scanning. So overall, UBI/UBIFS has this linear dependency.
Memory consumption linearly depends on the flash size True, the dependency is linear. UBIFS memory does depend on the flash size in the current implementation, because the LPT shrinker is not implemented. But it is not difficult to implement the LPT shrinker and get rid of the dependency. It is not implemented only because the memory consumption is too small to make the coding work worth it. UBI memory consumption linearly depends on flash size. Thus, overall UBI/UBIFS stack has the linear dependency.
Mount time linearly depends on the file system contents True, the more data are stored on the file system, the longer it takes to mount it, because JFFS2 has to do more scanning work. False, mount time does not depend on the file system contents. At the worst case (if there was an unclean reboot), UBIFS has to scan and replay the journal which has fixed and configurable size.
Full file system checking is required after each mount True. JFFS2 has to check whole file system just after it has been mounted in case of NAND flash. The checking involves reading all nodes for each inode and checking their CRC checksums, which consumes a lot of CPU. For example, this may be observed by runningtopjust after JFFS2 has been mounted. This slows down overall system boot-up time. Fundamentally, this is needed because JFFS2 does not store space accounting information (i.e., free/dirty space) on the flash media but instead, gathers this information by scanning the flash media. False. UBIFS does not scan/check whole file system because it stores the space accounting information on the flash media in the so-called LPT (Logical eraseblock Properties Tree) tree.
Memory consumption linearly depends on file system contents True. JFFS2 keeps a small data structure in RAM for each node on flash, so the more data are stored on the flash media, the more memory JFFS2 consumes. False. UBIFS memory consumption does not depend on how much data are stored on the flash media.
File access time linearly depends on its size True. JFFS2 has to keep in RAM so-called "fragment tree" for each inode corresponding to an opened file. The fragment tree is an in-memory RB-tree which is indexed by file offset and refers on-flash nodes corresponding to this offset. The fragment tree isnotstored on the flash media. Instead, it is built on-the-flight when the file is opened for the first time. To build the fragment tree, JFFS2 has to read each data node corresponding to this inode from the flash. This means, the larger is the file, the longer it takes to open it for the first time. And the larger is the file the more memory it takes when it is opened. Depending on the system, JFFS2 becomes nearly unusable starting from certain file size. False. UBIFS stores all the indexing information on the media in the indexing B-tree. Whenever a piece of data has to be read from the file system, the B-tree is looked-up and the corresponding flash address to read is found. There is a TNC cache which caches the B-tree nodes when the B-tree is looked-up, and the cache is shrinkable, which means it can be shrunk when the kernel needs more memory.
File-system performance depends on I/O history True. Since JFFS2 is fully synchronous, it writes data to the flash media as soon as the data arrives. If one changes few bytes in the middle of a file, JFFS2 writes a data node which contains those bytes to the flash. If there are many random small writes all over the place, the file system becomes fragmented. JFFS2 merges small fragments to 4KiB chunks, which involves re-compression and re-writing the data. But this "defragmentation" is happening during garbage collection and at random time, because JFFS2 wear-leveling algorithm is based on random eraseblock selection. So if there were a lot of small writes, JFFS2 becomes slower some time later - the performance just goes down out of the blue which makes the system less predictable. False. UBIFS always writes in 4KiB chunks. This does not hurt the performance much because of the write-back support: the data changes do not go to the flash straight away - they are instead deferred and are done later, when (hopefully) more data are changed at the same data page. And write-back usually happens in background.

Write-back support

UBIFS supports write-back, which means that file changes do not go to the flash media straight away, but they are cached and go to the flash later, when it is absolutely necessary. This helps to greatly reduce the amount of I/O which results in better performance. Write-back caching is a standard technique which is used by most file systems likeext3orXFS.

In contrast,JFFS2does not have write-back support and all the JFFS2 file system changes go the flash synchronously. Well, this is not completely true and JFFS2 does have a small buffer of a NAND page size (if the underlying flash is NAND). This buffer contains last written data and is flushed once it is full. However, because the amount of cached data are very small, JFFS2 is very close to a synchronous file system.

Write-back support requires the application programmers to take extra care about synchronizing important files in time. Otherwise the files may corrupt or disappear in case of power-cuts, which happens very often in many embedded devices. Let's take a glimpse at Linux manual pages:

$ man 2 write
....
NOTES
       A  successful return from write() does not make any guarantee that data
       has been committed to disk.  In fact, on some buggy implementations, it
       does  not  even guarantee that space has successfully been reserved for
       the data.  The only way to be sure is to call fsync(2)  after  you  are
       done writing all your data.
...

This is true for UBIFS (except of the "some buggy implementations" part, because UBIFS does reserves space for cached dirty data). This is also true for JFFS2, as well as for any other Linux file system.

However, some (perhaps not very good) user-space programmers do not take write-back into account. They do not read manual pages carefully. When such applications are used in embedded systems which run JFFS2 - they work fine, because JFFS2 is almost synchronous. Of course, the applications are buggy, but they appear to work well enough with JFFS2. But the bugs show up when UBIFS is used instead. Please, be careful and check/test your applications with respect to power cut tolerance if you switch from JFFS2 to UBIFS. The following is a list of useful hints and advices.

If you want to switch into synchronous mode, use the-o syncoption when mounting UBIFS; however, the file system performance will drop - be careful. Also remember that UBIFS mounted in synchronous mode provides less guarantees than JFFS2 - referthissection for details.
Always keep in mind the above statement from the manual pages and runfsync()for all important files you change; of course, there is no need to synchronize "throw-away" temporary files; Just think how important the file data is and decide; do not usefsync()unnecessarily, because this will hit the performance.
If you want to be more accurate, you may usefdatasync(), in which cases only data changes will be flushed, but not inode meta-data changes (e.g., "mtime" or permissions); this might be more optimal than usingfsync()if the synchronization is done often, e.g., in a loop; otherwise just stick withfsync().
In shell, thesynccommand may be used, but it synchronizes the whole file system which might not be optimal; and there is a similarlibcsync()function.
You may use theO_SYNCflag of theopen()call; this will make sure all the data (but not meta-data) changes go to the media before thewrite()operation returns; but in general, it is better to usefsync(), becauseO_SYNCmakes each write to be synchronous, whilefsync()allows to accumulate many writes and synchronize them at once.
It is possible to make certain inodes to be synchronous by default by setting the "sync" inode flag; in a shell, thechattr +Scommand may be used; inCprograms, use theFS_IOC_SETFLAGSioctlcommand; Note, themkfs.ubifstool checks for the "sync" flag in the original FS tree, so the synchronous files in the original FS tree will be synchronous in the resulting UBIFS image.

Let us stress that the above items are true for any Linux file system, includingJFFS2.

fsync()may be called for directories - it synchronizes the directory inode meta-data. The "sync" flag may also be set for directories to make the directory inode synchronous. But the flag is inherited, which means all new children of this directory will also have this flag. New files and sub-directories of this directory will also be synchronous, and their children, and so forth. This feature is very useful if one needs to create a whole sub-tree of synchronous files and directories, or to make all new children of some directory to be synchronous by default (e.g.,/etc).

Thefdatasync()call for directories is "no-op" in UBIFS and all UBIFS operations which change directory entries are synchronous. However, you should not assume this for portability (e.g., this is not true forext2). Similarly, the "dirsync" inode flag has no effect in UBIFS.

The functions mentioned above work on file-descriptors, not on streams (FILE *). To synchronize a stream, you should first get its file descriptor using thefileno()libcfunction, then flush the stream usingfflush(), and then synchronize the file usingfsync()orfdatasync(). You may use other synchronization methods, but remember to flush the stream before synchronizing the file. Thefflush()function flushes thelibc-level buffers, whilesync(),fsync(), etc flushkernel-level buffers.

Please, referthisFAQ entry for information about how to atomically update the contents of a file. Also, theTheodore Tso'sarticle is a good reading.

Write-back knobs in Linux

Linux has several knobs in "/proc/sys/vm" which you may use to tune write-back. The knobs are global, so they affect all file-systems. Please, refer the "Documentation/sysctl/vm.txt" file fore more information. The file may be found in the Linux kernel source tree. Below are interesting knobs described in UBIFS context and in a simplified form.

dirty_writeback_centisecs- how often the Linux periodic write-back thread wakes up and writes out dirty data. This is a mechanism which makes sure all dirty data hits the media at some point.
dirty_expire_centisecs- dirty data expire period. This is maximum time data may stay dirty. After this period of time it will be written back by the Linux periodic write-back thread. IOW, the periodic write-back thread wakes up every "dirty_writeback_centisecs" centi-seconds and synchronizes data which was dirtied "dirty_expire_centisecs" centi-seconds ago.
dirty_background_ratio- maximum amount of dirty data in percent of total memory. When the amount of dirty data becomes larger, the periodic write-back thread starts synchronizing it until it becomes smaller. Even non-expired data will be synchronized. This may be used to set a "soft" limit for the amount of dirty data in the system.
dirty_ratio- maximum amount of dirty data at which writers will first synchronize the existing dirty data before adding more. IOW, this is a "hard" limit of the amount of dirty data in the system.

Note, UBIFS additionally has smallwrite-bufferswhich are synchronized every 3-5 seconds. This means that most of the dirty data are delayed bydirty_expire_centisecscenti-seconds, but the last few KiB are additionally delayed by 3-5 seconds.

UBIFS write-buffer

UBIFS is asynchronous file-system (readthissection for more information). As other Linux file-system, it utilizes the page cache. The page cache is a generic Linux memory-management mechanism. It may be very large and cache a lot of data. When you write to a file, the data are written to the page cache, marked as dirty, and the write returns (unless the file is synchronous). Later the data are written-back.

Write-buffer is an additional UBIFS buffer, which is implemented inside UBIFS, and it sits between the page cache and the flash. This means that write-back actually writes to the write-buffer, not directly to the flash.

The write-buffer is designated to speed-up UBIFS on NAND flashes. NAND flashes consist of NAND pages, which are usually 512, 2KiB or 4KiB in size. NAND page is the minimal read/write unit of NAND flash (seethissection).

Write-buffer size is equivalent to NAND page size (so it is tiny comparing to the page cache). It's purpose is to accumulate small writes, and write full NAND pages instead of partially filled. Indeed, imagine we have to write 4 512-byte nodes with half a second interval, and NAND page size is 2KiB. Without write-buffer we would have to write 4 NAND pages and waste 6KiB of flash space, while write-buffer allows us to write only once and waste nothing. This means we write less, we create less dirty space so UBIFS garbage collector will have to do less work, we save power.

Well, the example shows an ideal situation, and even with the write-buffer we may waste space, for example in case of synchronous I/O, or if the data arrives with long time intervals. This is because the write-buffer has an associated timer, which flushes it every 3-5 seconds, even if it isn't full. We do this for data integrity reasons.

Of course, when UBIFS has to write a lot of data, it does not use write buffer. Only the last part of the data which is smaller than the NAND page ends up in the write-buffer and waits more for data, until it is flushed by the timer.

The write-buffer implementation is a little more complex, and we actually have several of them - one for each journal head. But this does not change the basic idea behind the write-buffer.

Few notes with regards to synchronization:

"sync()" also synchronizes all write-buffers;
"fsync(fd)" also synchronizes all write-buffers which contain pieces of "fd";
synchronousfiles, as well as files opened with "O_SYNC", bypass write-buffers, so the I/O is indeed synchronous for this files;
write-buffers are also bypassed if the file-system is mounted with the "-o sync" mount option.

Take into account that write-buffers delay the data synchronization timeout defined by "dirty_expire_centisecs" (seehere) by 3-5 seconds. However, since write-buffers are small, only few data are delayed.

UBIFS in synchronous mode vs JFFS2

When UBIFS is mounted in synchronous mode (-o syncmount options) - all file system operations become synchronous. This means that all data are written to flashbeforethe file-system operations return.

For example, if you write 10MiB of data to a filef.datusing thewrite()call, and UBIFS is in synchronous mode, then UBIFS guarantees that all 10MiB of data and the meta-data (file size and date changes) will reach the flash media beforewrite()returns. And if a power cut happens after thewrite()call returns, the file will contain the written data.

The same is true for situations whenf.dathas was opened withO_SYNCor has thesyncflag (seeman 2 chattr).

It is well-known that the JFFS2 file-system is synchronous (except a small write-buffer). However, UBIFS in synchronous mode is not the same as JFFS2 and provides somewhat less guarantees that JFFS2 does with respect to sudden power cuts.

In JFFS2 all the meta-data (like inodeatime/mtime/ctime, inode size, UID/GID, etc) are stored in the data node headers. Data nodes carry 4KiB of (compressed) data. This means that the meta-data information is duplicated in many places, but this also means that every time JFFS2 writes a data node to the flash media, it updates inode size as well. So when JFFS2 mounts it scans the flash media, finds the latest data node, and fetches the inode size from there.

In practice this means that JFFS2 will write these 10MiB of data sequentially, from the beginning to the end. And if you have a power cut, you will just lose some amount of data at the end of the inode. For example, if JFFS2 starts writing those 10MiB of data, write 5MiB, and a power cut happens, you will end up with a 5MiBf.datfile. You lose only the last 5MiB.

Things are a little bit more complex in case of UBIFS, where data are stored in data nodes and meta-data are stored in (separate) inode nodes. The meta-data are not duplicated in each data node, like in JFFS2. UBIFS never writes data nodes beyond the on-flash inode size. If it has to write a data node and the data node is beyond the on-flash inode size (the in-memory inode has up-to-data size, but it is dirty and was not flushed yet), then UBIFS first writes the inode to the media, and then it starts writing the data. And if you have an interrupt, you lose data nodes and you have holes (or old data nodes, if you are overwriting). Lets consider an example.

User creates an empty filef.dat. The file is synchronous, or UBIFS is mounted in synchronous mode. User calls thewrite()function with a 10MiB buffer.
The kernel first copies all 10MiB of the data to the page cache. Inode size is changed to 10MiB as well and the inode is marked as dirty. Nothing has been written to the flash media so far. If a power cut happens at this point, the user will end up with an emptyf.datfile.
UBIFS sees that the I/O has to be synchronous, and starts synchronizing the inode. First of all, it writes the inode node to the flash media. If a power cut happens at this moment, the user will end up with a 10MiB file which contains no data (hole), and if he read this file, he will get 10MiB of zeroes.
UBIFS starts writing the data. If a power cut happens at this point, the user will end up with a 10MiB file containing a hole at the end.

Note, if the I/O was not synchronous, UBIFS would skip the last step and would just return. And the actual write-back would then happen in back-ground. But power cuts during write-back could anyway lead to files with holes at the end.

Thus, synchronous I/O in UBIFS provides less guarantees than JFFS2 I/O - UBIFS has an effect of holes at the end of files. In ideal world applications should not assume anything about the contents of files which were not synchronized before a power-cut has happened. And "mainstream" file-systems likeext3do not provide JFSS2-like guarantees.

However, UBIFS is sometimes used as a JFFS2 replacement and people may want it to behave the same way as JFFS2 if it is mounted synchronously. This is doable, but needs some non-trivial development, so this was not implemented so far. On the other hand, there was no strong demand. You may implement this as an exercise, or you may try to convince UBIFS authors to do this.

Synchronization exceptions for buggy applications

Asthissection describes, UBIFS is an asynchronous file-system, and applications should synchronize their files whenever it is required. The same applies to most Linux file-systems, e.g.XFS.

However, many applications ignore this and do not synchronize files properly. And there was a huge war between user-space and kernel developers related to ext4 delayed allocation feature. Please, see theTheodore Tso's blog post. More information may be found in thisLWN article.

In short, the flame war was about 2 cases. The first case was about theatomic re-name, where many user-space programs did not synchronize the copy before re-naming it. The second case was about applications which truncate files, then change them. There was no final agreement, but the "we cannot ignore the real world" argument found ext4 developers' understanding, and there were 2 ext4 changes which help both problems.

Roughly speaking, the first change made ext4 synchronize files on close if they were previously truncated. This was a hack from file-system point of view, but it "fixed" applications which truncate files, write new contents, and close the files without synchronizing them.

The second change made ext4 synchronize the renamed file.

Well, this is not exactly correct description, because ext4 does not write the files synchronously, but actually initiates asynchronous write-out of the files, so the performance hit is not very high. For the truncation case this means that the file is synchronized soon after it is closed. For the re-name case this means that ext4 writes data before it writes the re-name meta-data.

However, the application writers should never rely on these things, because this is not portable. Instead, they should properly synchronize files. The ext4 fixes were because there were many broken user-space applications in the wild already.

We have plans to implement these features in UBIFS, but this has not been done yet. The problem is that UBI/MTD are fully synchronous and we cannot initiate asynchronous write-out, so we'd have to synchronously write files on close/rename, which is slow. So implementing these features would require implementing asynchronous I/O in UBI, which is a big job. But feel free to do this :-).

Compression

UBIFS supports on-the-fly compression, which means it compresses data before writing them to the flash media, and decompresses before reading them, and this is absolutely transparent to the users. UBIFS compresses only regular files data. Directories, device nodes and so on are not compressed. Meta-data and the indexing information are not compressed as well.

At the moment UBIFS supportsLZOandzlibcompressors. Zlib provides better compression ratio, but LZO is faster in both compression and decompression. LZO is the default compressor for UBIFS and for themkfs.ubifsutility. And of course you may disable UBIFS compression altogether using the "-x none"mkfs.ubifsoption.

UBIFS splits all data on 4KiB chunks and compresses each chunk independently. This is not optimal, because larger chunks of data would compress better, but this still provides noticeable flash space economy. For example, real-life root file-system image for an ARM platform becomes ~40% smaller with LZO compression and ~50% smaller with zlib compression. This means that you may fit a 300MiB rootfs image into a 256MiB UBI volume and still have about 100MiB of free space. However, the figures may be different depending on the contents of the file-system. For example, if your file-system mostly containsmp3files, UBIFS will be unable to efficiently compress them, just becausemp3files are already compressed.

In UBIFS it is possible to enable or disable compression individually for each inode by setting or cleaning their compression flag. Note, the compression flag of directories is inherited, which means that when files and sub-directories are created, they inherit the compression flag of the parent directory. Please, referthissection for instruction about how the compression flag may be toggled.

It is also possible to somewhat combine LZO and zlib compressors, seethisFAQ section.

It's also worth noting that JFFS2 LZO compression is a little bit different to UBIFS zlib compression. UBIFS uses the crypto-API deflate method, while JFFS2 uses zlib library directly. As a result, UBIFS and JFFS2 use different zlib compression options. Namely, JFFS2 uses deflate level 3 and window bits 15, while UBIFS uses deflate level 6 and window bits -11 (minus makes zlib avoid putting a header to the output data stream). Experiments with compressing ARM codeshowedthat JFFS2 compression ratio is slightly smaller, decompression speed is also slightly slower, but compression speed is a bit faster.

Checksumming

Every piece of information UBIFS writes to the media has a CRC-32 checksum. UBIFS protects both data and meta-data with CRC. Every time the meta-data is read, the CRC checksum is verified. CRC-32 is quite strong function and any data corruption will most probably be noticed. The same is true for UBI, by the way, it verifies every piece of meta-data.

The data CRC is not verified by default. We do this to improve the default file-system read speed. But UBIFS allows to switch the data verification on using thechk_data_crcmount option. This decreases UBIFS read speed a little, but provides better integrity protection. With this option on you may be sure that any piece of information UBIFS reads from the media will be verified and any corruption will most probably be noticed.

Note, currently UBIFS cannot disable CRC-32 calculations on write, because UBIFS recovery process depends on in. When recovering from an unclean reboot and re-playing the journal, UBIFS has to be able to detect broken and half-written UBIFS nodes and drop them, and UBIFS depends on the CRC-32 checksum here.

In other words, if you use UBIFS with data CRC-32 checking disabled, you still have the CRC-32 checksum attached to each piece of data, and you may mount UBIFS with thechk_data_crcoption to enable CRC-32 checking at any time (e.g., when you suspect the file-system might be corrupted because you visited theLarge Hadron Colliderand exposed your flash to proton beams).

NOTE!: before 2.6.39 the default UBIFS behavior was the oppsite - it did check data CRC-32 by default and theno_chk_data_crchad to be used.

Read-ahead

Read-ahead is an optimization technique which makes the file system read a little bit more data than users actually ask. The idea is that files are often read sequentially from the beginning to the end, so the file system tries to make next data available before the user actually asks for them.

Linux VFS is capable of doing read-ahead and this does not require any support from the file system. This probably works well for traditional block-based file systems, however this does not work well for UBIFS. UBIFS works with UBI API, which works with MTD API, which is synchronous. MTD API is pretty trivial and does not have any request queues. This means that VFS blocks UBIFS readers and makes them wait for read-ahead process. In opposite, block-device API is asynchronous and readers do not wait for read-ahead.

VFS read-ahead was designed for hard drives, and it was benchmarked with hard-drives. But the nature of raw flash devices is very different to the nature of Hard Drives Raw flash devices do not heave such a huge seek time as hard drives do, so the techniques which work for HDDs do not necessarily work well for flash.

That said, VFS read-ahead only slows UBIFS down instead of improving it, so UBIFS disables VFS read-ahead. But UBIFS has its own internal read-ahead, which we call "bulk-read". You may enable bulk-read using the "bulk_read" UBIFS mount option.

Some flashes may read faster if the data are read at one go, rather than at several read requests. For example, OneNAND can do "read-while-load" if it reads more than one NAND page. So UBIFS may benefit from reading large data chunks at one go, and this is exactly what bulk-read does.

If UBIFS notices that a file is being read sequentially (at least 3 sequential 4KiB blocks has been read), and if UBIFS sees that the further file data resides sequentially at the same eraseblock, it starts reading data ahead using large read requests, which makes it possible to read at higher rates. So UBIFS reads more than it is asked to, and it pushes the read-ahead data to the file caches, so the data become instantly available for the further user read requests.

Here is an example. Suppose the user is reading a file sequentially. We are lucky and the file is not fragmented on the media. Suppose LEB 25 contains data nodes belonging to this file, and the data nodes are logically (in terms of logical file offset) and physically (in terms of LEB/offset addresses) sequential. Suppose user requests to read data node at LEB 25 offset 0. In this case UBIFS will actually read whole LEB 25 at one go, then populate the file cache with all the read data. And when the user asks the next piece of data, it will already be in the cache.

Obviously, the bulk-read feature may slow UBIFS down in some work-loads, so you should be careful. It is also worth noting that bulk-read feature cannot help on highly fragmented file-systems. Although UBIFS does not fragment file-systems (e.g., the Garbage-Collector does not re-order data nodes), but UBIFS does not try to defragment them. For example, if you write a file sequentially, it won't be fragmented. But if you write more than one file at a time, they may become fragmented (well, this also depends on how write-back flushes the changes), and UBIFS won't automatically defragment them. However, it is possible to implement a background defragmenter. It is also possible to have per-inode journal head and avoid mixing data nodes belonging to different inodes in the same LEB. So there is room for improvements.

Space for superuser

UBIFS reserves some space for the superuser (root), which means that when the file-system is full for normal users, there is still little space for the super-user. File-systems likeext2have a similar feature.mkfs.ubifshas-Roption which may be used to specify the reserved space size.

By default only root may use the reserved space. But it is possible to extend the list of power users who are able to utilize the reserved space. UBIFS may record several user and group IDs at the superblock and allow them to utilize the reserved space as well. However, currentmkfs.ubifsutility does not have corresponding command line options, but it should be trivial to implement them.

Note, UBIFS prints the amount of reserved space when mounts the file-system. See UBIFS messages in the system log.

Extended attributes

UBIFS supports extended attributes if the corresponding configuration option is enabled (no additional mount options are required). It supports theuser,trusted, andsecurityname-spaces. However, access control lists (ACL) support is not implemented.

Note, currentlymkfs.ubifsignores extended attributes and does not write them to the target file-system image.

Mount options

The following are UBIFS-specific mount options.

chk_data_crc(default) - check data CRC-32 checksums;
no_chk_data_crc- do not check data CRC-32 checksums, seethissection for more details;
bulk_read- enable bulk-read, seehere;
no_bulk_read(default) - do not bulk-read.

Example:

$ mount -o no_chk_data_crc /dev/ubi0_0 /mnt/ubifs

mounts UBIFS file-system to/mnt/ubifsand disables data CRC checking.

Besides, UBIFS supports the standardsyncmount option which may be used to disable UBIFS write-back and write-buffer caching and make it fully synchronous. Note, UBIFS does not support "atime", so theatimemount option has no effect.

Flash space accounting issues

Traditional file systems likeext2can easily calculate amount of free space. The calculation is usually quite precise and users are accustomed to this. However, the situation is very different in UBIFS - it cannot really report precise amount of free space which confuses users. Instead, it reportsminimumamount of free space, which usually less than the real amount. Sometimes the mistake may be very high. For example, UBIFS may report (via thestatfs()system call) that there is no free space, but one would still be able to write quite a lot.

To put it differently, UBIFS is oftenlyingabout the amount of free space it has. As a rule, it may fit considerably more bytes than it reports. However, it never reports more free space than it has. It reports less, and very rarely it may report the exact amount. And this is not because UBIFS authors are jerks, there are fundamental reasons for this, which are discussed below.

Effect of compression

The first factor is UBIFS on-flight compression. Users usually seem to expect that if file system reportsNbytes of free space, than it is possible to create anN-byte file. And because of the compression, this is not quite true for UBIFS. Depending on how well the file data compresses, UBIFS may fit several times more than it reports.

When UBIFS calculates free space, it does not a-priori know anything about the data which is going to be written, so it cannot take into account the compression, so it always assumes the worst-case scenario when the data does not compress.

Well, this does not sound as a big issue. However, compression becomes an issue for free space reporting when compression is combined withwrite-back. Namely, UBIFS cannot know how well the cached dirty data would compress, and the only way to find this out is to actually compress it. See below.

Effect of write-back

Suppose there areXbytes of dirty file data in the page cache. They will be flushed to the flash media later, but they are in RAM so far. UBIFS (namely, the budgeting sub-system) hasreservedX+Obytes on the flash media for this data, whereOis file system overhead (e.g., the data has to be indexed, each data node has a header, etc).

The problem is that UBIFS cannot accurately calculateXandO, and it uses pessimistic worst-case calculations, so that when the cached data are flushed, they may take considerably less flash space than the reservedX+O. For example, this may lead to the following situations.

$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
ubi0:ubifs               49568     49568         0 100% /mnt/ubifs
$ sync
$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
ubi0:ubifs               49568     39164      7428  85% /mnt/ubifs

First timedfreported zero free space, but after thesyncit reported15%free space. This is because there were a lot of cached dirty data, and UBIFS reserved all flash space for them. But once the data has reached the flash media, they took considerably less flash space.

Here are the reasons why UBIFS reserves more space than it is needed.

One of the reasons is again related to the compression. The data are stored in the uncompressed form in the cache, and UBIFS does know how well it would compress, so it assumes the data wouldn't compress at all. However, real-life data usually compresses quite well (unless it already compressed, e.g. it belongs to a.tgzor.mp3file). This leads to major over-estimation of theXcomponent.
Due to the design, UBIFS nodes never cross logical eraseblock (or LEB, seehere) boundaries, so there are small spots of wasted space at the end of eraseblocks. The amount of this wasted flash space depends on the data and in which order this data has been written or changed. And traditionally UBIFS pessimistically assumes maximum possible amount of wasted space, which leads to over-estimation of theOcomponent. See the next sub-section.

Thus, UBIFS reportsmore accuratefree space value if it is synchronized.

Wastage

As it was mentioned above, UBIFS nodes do not cross LEB boundaries. Consider the following numbers:

maximum UBIFS node size (non-compressed data node) is 4256 bytes;
smallest UBIFS node size (a data node with 8 bytes of data, corresponding to a file tail) is 56 bytes;
depending on name length, directory entry nodes take 56-304 bytes;
typical LEB size in case of NAND flash with 128KiB physical eraseblocks and 2048 bytes NAND page is 126KiB (or 124KiB if the NAND chip does not support sub-pages, seehere).

Thus, if the vast majority of nodes on the flash were non-compressed data nodes, UBIFS would waste 1344 bytes at the ends of 126KiB LEBs. But real-life data are often compressible, so data node sizes vary, and the amount of wasted space at the ends of eraseblocks varies from 0 to 4255.

UBIFS is doing some job to put small nodes like directory entries to the ends of LEBs to lessen the amount of wasted space, but it is not ideal and UBIFS still may waste unnecessarily large chunks of flash space at the ends of eraseblocks.

When reporting free space, UBIFS does not know which kind of data are going to be written to the flash media, and in which sequence. Thus, it assumes the maximum possible wastage of 4255 bytes per LEB. This calculation is too pessimistic for most real-life situations and the average real-life wastage is considerably less than 4255 bytes per LEB. However, UBIFS reports the absolute minimum amount of free space user-space applications may count on.

The above means that the larger is LEB size, the better is UBIFS free space prediction. E.g., UBIFS is better in this respect on NANDs with 128KiB eraseblock size, comparing to NANDs with 16KiB eraseblock size.

Dirty space

Dirty space is the flash space occupied by UBIFS nodes which were invalidated because they were changed or removed. For example, if the contents of a file is re-written, than corresponding data nodes are invalidated and new data nodes are written to the flash media. The invalidated nodes comprise dirty space. There are other mechanisms how dirty space appears as well.

UBIFS cannot re-use dirty space straight away, because corresponding flash areas do not contain all 0xFF bytes. Before dirty space can be re-used, UBIFS has to garbage-collect corresponding LEBs. The idea of Garbage collector which reclaims dirty space is the same as in JFFS2. Please, refer theJFFS2 design documentfor more information.

Roughly, UBIFS garbage collector picks a victim LEB which has some dirty space and moves valid UBIFS nodes from the victim LEB to the LEB which was reserved for GC. This produces some amount of free space at the end of the reserved LEB. Then GC pick new victim LEB, and moves the data to the reserved LEB. When the reserved LEB is full, UBIFS picks another empty LEB (e.g., the old victim which had been made free a step ago), and continues moving nodes from the victim LEB to the new reserved LEB. The process continues until a full empty LEB is produced.

UBIFS has a notion of minimum I/O unit size, which characterizes minimum amount of data which may be written to the flash (seeherefor more information). Typically, UBIFS works on large-page NAND flashes and min. I/O size is 2KiB.

Consider a situation when GC picks eraseblocks with less than min. I/O unit size dirty space. When all nodes from the victim LEB have been moved to the reserved LEB, the last min. I/O unit of the reserved LEB has to be written to the flash media, which means no space would be reclaimed. The reason why the last min. I/O unit of the reserved LEB has to me written immediately is because the victim LEB cannot be erasedbeforeall the moved nodes have reached the media. Indeed, otherwise an unclean reboot would result in lost data.

Well, things are actually not that simple and UBIFS GC actually tries not to waste space, but it is not always possible and UBIFS GC is far from being ideal. Anyway, what matters is that UBIFS cannot always reclaim dirty space if the amount of it is less than min. I/O unit size.

When UBIFS reports free space to the users, it treats dirty space as available for new data, because after garbage-collection dirty space becomes free space. But we have just showed, UBIFS cannot reclaimalldirty space and turn it into free space. Worse, UBIFS does not precisely know how much dirty space it can reclaim. So it again uses pessimistic calculations.

Thus, the less dirty space the FS has, and the smaller is dirty space fragmentation, the more precise is UBIFS free space reporting. In practice this means that a file system which is close to be full has less accurate free space reporting comparing to a less full file system, because this file system presumably has more dirty space.

Note, to fix this issue, UBIFS would need to run GC instatfs(), which would turn as much dirty space as possible into free space, which would result in more precise free space reporting. However, this would makestatfs()very slow. Another possibility would be to implement background GC in UBIFS (just like in JFFS2), which would lessen effect of dirty space with time.

Precise index size is not known

As you probably know, UBIFS maintain the FS index on flash. The index takes some flash space. There also UBIFS journal, which contain FS data. The FS data in the journal is not indexed, which means that on-flash index does not refer it. Instead, UBIFS keeps indexing information for the journal in RAM. When the file system is mounted, UBIFS has to scan the journal and build this part of the index in RAM. So the journal is like a small JFFS2 file system inside UBIFS.

The journal becomes indexed as the result of the commit operation. During the commit UBIFS updates the on-flash index and makes it refer information in the journal. Then UBIFS picks other LEBs for the new journal, so the journal changes is position after the commit.

UBIFS maintains precise accounting of the index size. That is, UBIFS always knows how many bytes the on-flash index takes. However, UBIFS does not know precisely how much will the index grow (or shrink) after the commit. This means, it does not know whether how much will the index size change after the journal data references will be included into the on-flash index. And UBIFS again makes pessimistic calculations here and assumes worst-case scenario.

However, after the commit operation, UBIFS knows exact index size again. Thesync()system not only flushes all dirty data, but it also call makes UBIFS commit the journal. This means that file system synchronization the makes free space prediction mistake lower.

It is worth noting that this is not a fundamental thing. It is just an UBIFS implementation detail. UBIFS could calculate precise index size without actually running the commit operation, but the UBIFS authors found it difficult to implement. And the effect of the index size uncertainty should be low.

Documentation

If flash file systems is a completely new area for you, it is recommended to start from learning JFFS2, because many basic ideas are the same in UBIFS. Read theJFFS2 designdocument.

You may find the description of main JFFS2 issues, as well as very basic UBIFS ideas in theJFFS3 designdocument. Remember, the document in general is old and out-of-date. We do not use the "JFFS3" name anymore, and JFFS3 was re-named to UBIFS. The document was written when UBI did not exist and the document assumes that JFFS3 is talking directly to the MTD device, just like JFFS2. However, theJFFS2 overview,JFFS3 Requirements, andIntroduction to JFFS3chapters are still mostly valid and give a good introduction into basic UBIFS ideas like wandering tree and the journal. Although please note, that the superblock description is irrelevant for UBIFS. UBIFS is based on UBI and does not need that trick. However, the superblock location idea may be used to create new scalable UBI2 layer.

This web-page as well as theUBIFS FAQcontains a plenty of UBIFS information. And you have to study UBI as well, because UBIFS depends on the services provided by the UBI layer. See theUBI documentationandUBI FAQsections.

Look at UBIFS presentation slides (ubifs.odp) which give another UBI/UBIFS overview. The slides were prepared in OpenOffice.org Impress 2.4, so you needOpenOfficeto see them. The slides contain animation, so you have to watch them in "slide show" mode (useF5key). And if you do not have any possibility to get OpenOffice, here is apdf version, but it is very ugly because it does not store the animation and draws all animation steps at once.

There is anUBIFS white-paperdocument available as well. However, it might be rather difficult for newbies, so we recommend to start with the JFFS3 design document. The UBIFS white-paper gives a complete UBIFS design picture and describes the UBIFS internals. The white-paper does not contain some details which you may find at this web-page or in the UBIFS FAQ, and vice-versa.

And finally, there isUBIFS source code. The code has a great deal of comments, so we recommend to look there if you need all the details. And of course, you are welcome to ask questions at theUBIFS mailing list.

Raw flash vs. FTL devices

FTL stands for "Flash Translation Layer" and it is software which emulates a block device on top of flash hardware. At early days FTL ran on the host computer. For example, old PCMCIA flash devices were essentially raw flash devices, and the PCMCIA standard defined the media storage format for them. So the host computer had to run the FTL software driver which implemented PCMCIA FTL. However, nowadays FTL is usually firmware, and it is run by the controller which is built into the storage device. For example, if you look inside an USB flash drive, you'll find there a NAND chip (or several of them), and a micro-controller, which runs FTL firmware. Some USB flash drives are known to have quite powerful ARM processors inside. Similarly, MMC, eMMC, SD, SSD, and other FTL devices have a built-in controller which runs FTL firmware.

All FTL devices have an interface which provides block I/O access. Well, the interfaces are different and they are defined by different specifications, e.g., MMC, eMMC, SD, USB mass storage, ATA, and so on. But all of them provide block-based access to the device. By block-based access we mean that whole device is represented as an linear array of (usually 512-byte) blocks. Each block may be read or written.

Linux has an abstraction of a block device. For example hard drives are block devices. Linux has many file systems and the block I/O subsystem, which includes elevators and so on which have been created to work with block devices (historically - hard drives). So the idea is that the same software may be used with FTL devices. For example, you may use FAT file system on your MMC card, or ext3 file system or your SSD.

Although most flashes on the commodity hardware have FTL, there are systems which have bare flashes and do not use FTL. Those are mostly various handheld devices and embedded systems. Raw flash devices are very different to block devices. They have different work model, they have tighter constraints and more issues than block devices. In case of FTL devices these constraints and issues are hidden, but in case of raw flash the software has to deal with them. Please refer tothistable for some more details about the difference between block devices and raw flashes.

UBIFS file system has been designed for raw flash. It doesn't work with block devices and it assumes the raw flash device model. In other words, it assumes the device has eraseblocks, which may be written to, read from, or erased. UBIFS takes care of writing all data out-of-place, doing garbage-collection and so on. UBIFS utilizes UBI, which is doing stuff like wear-leveling and bad eraseblock handling. All these things are not normally needed for block devices.

Very often people ask questions like "why would one need to use raw flash and why not just use eMMC, or something like this?". Well, there is no simple answer, and the following is what UBIFS developers think. Please, take into account the date of this writing (3 May 2009). The answer is given in form of a list of non-structured items, and the reader should structure it in a way which is appropriate for his system. And because mass storage systems mostly use NAND flash (modern FTL devices also have NAND flash arrays inside), we talk specifically about NAND flashes. Also, we'd like to emphasize that we do not give general recommendations and everything depends on system requirements.

Bare NAND chips are cheaper and simpler, which is very important for small system. However, it seems like the industry pushes FTL devices forward and the situation is not that simple and obvious anymore. Indeed, an FTL device is more complex than a raw NAND of similar size, because an FTL device has an additional controller inside, and so on. But since the industry tends to produce a lot of FTL devices, and actually sell a lot of them, the price is going down.
If you need a flash storage where you are going to use FAT file system, then in most cases you should stick with an FTL device (eMMC, MMC, SD or whatever). Just make sure the FTL device is doing proper wear-leveling.
The other situation is when you are going to use your FTL device for system storage (e.g. for rootfs) and use a more robust file system like ext3. In this situation you should take into account various system requirements like tolerance to sudden power cuts. The following items are mostly related to system storage situations.
FTL devices are "black boxes". FTL algorithms are normally vendor secrets. But we know that NAND flash has issues like wear-leveling, bad blocks handling, read-disturb and so on. And it is important to get them right, especially in case of MLC NAND flash, which may have very short eraseblock life-time (e.g., only 1000 erase-cycles). But because FTL algorithms are closed, it is difficult to be sure whether a specific FTL device gets everything right or not.
If you start thinking about how FTL could be implemented, you realize that it must do things like garbage collection (sometimes referred to as "reclaim process"). And flash hardware pretty much requires most writes to be out-of-place. But how does FTL behave in case of sudden power-cuts? What if a power-cut happens while it is in the middle of doing garbage collection? Does the FTL device guarantee that the data which was on the flash media before the power cut happens will not disappear or become corrupted?
The power-cut tolerance may be tested, while it is quite difficult to test stuff like wear-leveling or read-disturb handling, because it may require too much time.
We have heard reports that some USB flash drives wear out very quickly, i.e., they start reporting I/O errors after few weeks of intensive use. This means that FTL does not do proper wear-leveling. This does not mean that all USB flash drives are bad - just that you should be careful.
We have heard reports that MMC, eMMC, and SD cards corrupt and lose data if power is cut during writing. Even the data which were there long time before may corrupt or disappear. This means that they have bad FTL which does not do things properly. But again, this does not have to be true for all MMCs/eMMCs and SDs - there are many different vendors. Be careful, though.
In general, if you glance back into the history, many FTL devices were mostly used with FAT file system for storing stuff like photo and video. FAT file system is not reliable by definition, which suggests that FTL devices may also be not very reliable, just because historically this was not really required. Indeed, it is not a big deal to lose a couple of photos. However, it is crucial to make sure that system libraries do not corrupt because of power-cuts.
Good FTL must be a rather complex piece of software, especially if it deals with MLC NAND (which is used in most modern mass storage devices). Implementing it in firmware might be a difficult task, and running it might require a powerful controller. Instead, we suspect that vendors may user various tricks or compromises to keep their devices "good enough" and cheap. For example, it is known that some vendors optimize their FTL devices for FAT, and if you start using ext3 on top of one, you might face some unexpected problems or the device may become worse than you would imagine. Of course, it is often difficult to verify this with closed FTL.
SSD drives are probably very different to eMMC, MMC/SD etc. We have not worked with SSD drives. They are expensive and probably have powerful CPUs that run complex firmware which probably gets things right.
FTL devices are becoming more popular and better, although it is not easy to distinguish between good and bad FTL devices (of course vendors would assure you their device is perfect). Generally, there is nothing wrong in using an FTL device as long as you trust it, you have tested it, or it simply fits your system requirements.
In case of raw flash we know exactly what we are doing. UBI/UBIFS handles all aspects of NAND flash like bad erase-blocks and wear-leveling. It guarantees power-cut tolerance. It is open and available, so you may always validate, test, and fix it. There is no lie about what it can and cannot do. On the other hand, with FTL devices you do not have much visibility to what is going on inside, vendors may lie about how good their FTL device is. If you find a bug in the firmware, vendors do not usually provide you a fast and easy way to update it, and so on.
Theoretically, UBIFS may do a better job because it knows much more information about the files than FTL. For example, UBIFS knows about deleted files, while FTL does not, so FTL may do unneeded work trying to preserve the sectors belonging to deleted files. However, some FTL devices support "discard" requests and may benefit from the file system hints about unused sectors. Nevertheless, in general, UBIFS should do a better job on a bare NAND than a traditional FS on an FTL device with a similar NAND chip. On the other hand, FTL devices may include multiple NAND chips, highly parallelize things and provide fast I/O. SSDs are probably good examples.
Obviously, the advantage of FTL devices is that you use old and trusted software on top of them. Be careful, though, as sometimes this may not be 100% true. UBIFS authors once tested a good brand eMMC with respect to the power cut tolerance. Some severe problems were found. Also, it was found that ext3 was not really usable with that eMMC either. What happened was that power cuts sometimes left some eMMC sectors not readable - the read operation returned ECC errors. But for ext3 read errors are fatal - it is not designed to handle them. Thefsck.ext3tool also refused to repair a file system which had unreadable sectors.

So it is indeed difficult to give an answer. Just think about cons and pros, take into account your system requirements and decide. Nonetheless, raw flashes are used, mostly in the embedded world, and this is why UBIFS has been developed.

總結(jié)

以上是生活随笔為你收集整理的UBIFS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产又粗又硬又大爽黄老大爷视 | 欧美黑人巨大xxxxx | 亚洲啪av永久无码精品放毛片 | 天堂无码人妻精品一区二区三区 | 国产精品久久国产三级国 | 亚洲色在线无码国产精品不卡 | 久久99精品国产.久久久久 | 强奷人妻日本中文字幕 | 亚洲日韩av片在线观看 | 亚洲a无码综合a国产av中文 | 国产亚洲人成a在线v网站 | 国产在线aaa片一区二区99 | 国产在线精品一区二区高清不卡 | 国产黑色丝袜在线播放 | 国产成人无码av片在线观看不卡 | 丝袜足控一区二区三区 | 国产av剧情md精品麻豆 | 亚洲精品午夜国产va久久成人 | 未满成年国产在线观看 | www国产亚洲精品久久网站 | 亚洲 a v无 码免 费 成 人 a v | 日韩成人一区二区三区在线观看 | 欧美xxxx黑人又粗又长 | 在线欧美精品一区二区三区 | 国产成人人人97超碰超爽8 | 亚洲欧美日韩综合久久久 | 黑森林福利视频导航 | 无码纯肉视频在线观看 | 亚洲精品鲁一鲁一区二区三区 | 高清不卡一区二区三区 | 成人亚洲精品久久久久 | 亚洲 另类 在线 欧美 制服 | 成人性做爰aaa片免费看 | 亚洲中文字幕无码一久久区 | 好爽又高潮了毛片免费下载 | 午夜时刻免费入口 | 鲁一鲁av2019在线 | 99久久婷婷国产综合精品青草免费 | 国产农村妇女高潮大叫 | 欧美人与牲动交xxxx | 中文亚洲成a人片在线观看 | 婷婷色婷婷开心五月四房播播 | 免费国产成人高清在线观看网站 | 丰满肥臀大屁股熟妇激情视频 | 又湿又紧又大又爽a视频国产 | 丰满少妇人妻久久久久久 | 亚洲国产精品美女久久久久 | 国产性生交xxxxx无码 | 欧美国产亚洲日韩在线二区 | 无码精品国产va在线观看dvd | 麻豆国产人妻欲求不满 | 午夜成人1000部免费视频 | 亚洲成色在线综合网站 | 精品久久久久久人妻无码中文字幕 | 激情亚洲一区国产精品 | 久久99精品久久久久久 | 天堂亚洲免费视频 | 伦伦影院午夜理论片 | 欧美黑人性暴力猛交喷水 | 亚洲国产成人a精品不卡在线 | 亚洲一区二区三区国产精华液 | 99精品无人区乱码1区2区3区 | 国产sm调教视频在线观看 | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久亚洲中文字幕精品一区 | 成人影院yy111111在线观看 | 成人av无码一区二区三区 | 欧美黑人巨大xxxxx | 亚洲乱码国产乱码精品精 | 欧美三级不卡在线观看 | 性生交大片免费看l | 日韩人妻无码一区二区三区久久99 | 精品乱子伦一区二区三区 | 国产乱人偷精品人妻a片 | 国产美女精品一区二区三区 | 一本大道伊人av久久综合 | 无码国产色欲xxxxx视频 | 亚洲日本va午夜在线电影 | 131美女爱做视频 | 国产超碰人人爽人人做人人添 | 日本va欧美va欧美va精品 | 成在人线av无码免费 | 免费无码的av片在线观看 | 又大又黄又粗又爽的免费视频 | 久久精品99久久香蕉国产色戒 | 国产精品自产拍在线观看 | 熟女体下毛毛黑森林 | 精品欧洲av无码一区二区三区 | 丰满诱人的人妻3 | 日日麻批免费40分钟无码 | 女人色极品影院 | 亚洲男人av香蕉爽爽爽爽 | 又大又硬又爽免费视频 | 成人无码视频在线观看网站 | 中国女人内谢69xxxxxa片 | 亚洲国产精品一区二区第一页 | 亚洲欧美日韩综合久久久 | 亚洲毛片av日韩av无码 | 国产乱人伦av在线无码 | 亚洲高清偷拍一区二区三区 | 精品熟女少妇av免费观看 | 欧美自拍另类欧美综合图片区 | 国产人妻久久精品二区三区老狼 | 99精品久久毛片a片 | 国产明星裸体无码xxxx视频 | 国产乱码精品一品二品 | 欧洲欧美人成视频在线 | 亚洲区欧美区综合区自拍区 | 天天摸天天碰天天添 | 亚洲综合伊人久久大杳蕉 | 妺妺窝人体色www在线小说 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产乱人伦偷精品视频 | 精品 日韩 国产 欧美 视频 | 精品无码一区二区三区爱欲 | 中文精品无码中文字幕无码专区 | 国色天香社区在线视频 | 久精品国产欧美亚洲色aⅴ大片 | 18无码粉嫩小泬无套在线观看 | 国产成人无码专区 | 亚洲第一网站男人都懂 | 玩弄人妻少妇500系列视频 | 日本欧美一区二区三区乱码 | 国产人妻精品一区二区三区 | 亚洲国产日韩a在线播放 | 久久精品人人做人人综合试看 | 免费中文字幕日韩欧美 | 中国女人内谢69xxxxxa片 | 国产av一区二区精品久久凹凸 | 无码一区二区三区在线观看 | 亚洲成a人片在线观看日本 | 日韩欧美中文字幕公布 | 精品夜夜澡人妻无码av蜜桃 | 性色av无码免费一区二区三区 | 一个人看的www免费视频在线观看 | 亚洲欧美精品伊人久久 | 青草青草久热国产精品 | 日韩欧美中文字幕在线三区 | 国产美女精品一区二区三区 | 熟女少妇在线视频播放 | 骚片av蜜桃精品一区 | 日日夜夜撸啊撸 | 丰满人妻翻云覆雨呻吟视频 | 日韩欧美群交p片內射中文 | 一本久道久久综合狠狠爱 | 妺妺窝人体色www在线小说 | 国内精品久久毛片一区二区 | 动漫av一区二区在线观看 | 国产精品欧美成人 | 亚洲精品久久久久久久久久久 | 99re在线播放 | 在线观看免费人成视频 | 性生交片免费无码看人 | 国产乱子伦视频在线播放 | 欧美日韩人成综合在线播放 | 亚洲一区二区三区无码久久 | 国产综合色产在线精品 | 牲交欧美兽交欧美 | 久激情内射婷内射蜜桃人妖 | 2020久久香蕉国产线看观看 | 日本又色又爽又黄的a片18禁 | 国产精品亚洲а∨无码播放麻豆 | 四虎国产精品一区二区 | 国产在线无码精品电影网 | 熟妇女人妻丰满少妇中文字幕 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 俄罗斯老熟妇色xxxx | 思思久久99热只有频精品66 | 久久精品国产99精品亚洲 | 一区二区三区乱码在线 | 欧洲 | 欧美阿v高清资源不卡在线播放 | 国产精品成人av在线观看 | 成熟女人特级毛片www免费 | 欧美第一黄网免费网站 | 精品国产av色一区二区深夜久久 | 成人欧美一区二区三区 | av在线亚洲欧洲日产一区二区 | 中文字幕av无码一区二区三区电影 | 久久精品国产一区二区三区 | 国产精品久久久久久无码 | 亚洲日韩中文字幕在线播放 | 亚洲欧美精品aaaaaa片 | 人妻有码中文字幕在线 | 国产激情无码一区二区app | 久久aⅴ免费观看 | 久久久亚洲欧洲日产国码αv | 秋霞成人午夜鲁丝一区二区三区 | 精品久久久无码人妻字幂 | 性做久久久久久久免费看 | 精品国产精品久久一区免费式 | 乱人伦中文视频在线观看 | 精品人妻人人做人人爽 | 真人与拘做受免费视频 | 老熟女重囗味hdxx69 | 麻花豆传媒剧国产免费mv在线 | 国产成人无码专区 | 国产成人精品无码播放 | 天天av天天av天天透 | 欧美午夜特黄aaaaaa片 | 色狠狠av一区二区三区 | 曰本女人与公拘交酡免费视频 | 国产口爆吞精在线视频 | 国内综合精品午夜久久资源 | 丰满人妻翻云覆雨呻吟视频 | 久久久久久久久蜜桃 | 精品人妻人人做人人爽夜夜爽 | 欧美老妇交乱视频在线观看 | 精品无人区无码乱码毛片国产 | а天堂中文在线官网 | 九一九色国产 | 久久综合色之久久综合 | 乌克兰少妇性做爰 | 国产av一区二区精品久久凹凸 | 国产人妻大战黑人第1集 | 欧美成人午夜精品久久久 | 国产精品无码久久av | 好男人www社区 | 99久久精品国产一区二区蜜芽 | 好屌草这里只有精品 | 欧洲精品码一区二区三区免费看 | 国产亲子乱弄免费视频 | 亚洲成av人影院在线观看 | 中文字幕人妻无码一区二区三区 | 国产色视频一区二区三区 | 在线亚洲高清揄拍自拍一品区 | av在线亚洲欧洲日产一区二区 | 少妇性荡欲午夜性开放视频剧场 | 日韩亚洲欧美精品综合 | 欧美第一黄网免费网站 | 东京热无码av男人的天堂 | 亚洲国产成人a精品不卡在线 | 人人妻人人澡人人爽欧美精品 | 日韩 欧美 动漫 国产 制服 | 久久久久亚洲精品中文字幕 | 中文字幕av无码一区二区三区电影 | 99久久婷婷国产综合精品青草免费 | 男女猛烈xx00免费视频试看 | 日本精品高清一区二区 | 亚洲成a人一区二区三区 | 成人影院yy111111在线观看 | 成人欧美一区二区三区 | 精品国产国产综合精品 | 亚洲va中文字幕无码久久不卡 | 妺妺窝人体色www婷婷 | 国产人妻精品一区二区三区不卡 | 无码人妻少妇伦在线电影 | 性做久久久久久久免费看 | 久久国产精品二国产精品 | 日本成熟视频免费视频 | 国产精品久久久久9999小说 | 国产两女互慰高潮视频在线观看 | 红桃av一区二区三区在线无码av | 麻豆md0077饥渴少妇 | 天堂久久天堂av色综合 | 日本乱偷人妻中文字幕 | 色偷偷人人澡人人爽人人模 | 人妻插b视频一区二区三区 | 奇米影视7777久久精品 | 大肉大捧一进一出好爽视频 | 成人av无码一区二区三区 | 97久久超碰中文字幕 | 乱人伦中文视频在线观看 | 欧美性生交xxxxx久久久 | 国产精品久久久久影院嫩草 | 日本一区二区更新不卡 | 欧美日韩一区二区免费视频 | 国产精品久久久午夜夜伦鲁鲁 | 无码一区二区三区在线 | 久久www免费人成人片 | 国产xxx69麻豆国语对白 | 暴力强奷在线播放无码 | 夜先锋av资源网站 | 熟女俱乐部五十路六十路av | 国产精品无码一区二区三区不卡 | 高清国产亚洲精品自在久久 | 蜜桃av抽搐高潮一区二区 | 青草视频在线播放 | 亚洲色www成人永久网址 | 精品国偷自产在线视频 | 牛和人交xxxx欧美 | 国精产品一区二区三区 | 正在播放老肥熟妇露脸 | 国产国产精品人在线视 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 免费人成网站视频在线观看 | 麻花豆传媒剧国产免费mv在线 | 国产在线精品一区二区高清不卡 | 国产成人精品久久亚洲高清不卡 | 成人三级无码视频在线观看 | 99re在线播放 | 少妇激情av一区二区 | 亚洲乱码中文字幕在线 | 久久久久久亚洲精品a片成人 | 国产精品久久久久无码av色戒 | 亚洲自偷精品视频自拍 | 国产两女互慰高潮视频在线观看 | 免费看少妇作爱视频 | 亚洲一区二区三区 | 久久99精品国产麻豆蜜芽 | 国产 精品 自在自线 | 熟妇人妻无码xxx视频 | 无码午夜成人1000部免费视频 | 男女性色大片免费网站 | 久在线观看福利视频 | 国产又爽又猛又粗的视频a片 | 欧美人与禽zoz0性伦交 | 夜精品a片一区二区三区无码白浆 | 久久亚洲中文字幕无码 | 自拍偷自拍亚洲精品被多人伦好爽 | 人妻插b视频一区二区三区 | 蜜臀aⅴ国产精品久久久国产老师 | 性开放的女人aaa片 | 欧美zoozzooz性欧美 | 少妇愉情理伦片bd | 网友自拍区视频精品 | 欧美成人高清在线播放 | 女人被男人躁得好爽免费视频 | 国内精品久久久久久中文字幕 | 九九热爱视频精品 | 欧美35页视频在线观看 | 亚无码乱人伦一区二区 | 色情久久久av熟女人妻网站 | 精品午夜福利在线观看 | 国产在线精品一区二区高清不卡 | 久久久中文久久久无码 | 伊在人天堂亚洲香蕉精品区 | 国产精品亚洲五月天高清 | 东京热一精品无码av | 一本色道久久综合狠狠躁 | 99精品视频在线观看免费 | 亚洲爆乳无码专区 | 欧美日本日韩 | 最新国产乱人伦偷精品免费网站 | 日本丰满护士爆乳xxxx | 国产精品成人av在线观看 | 国产熟妇另类久久久久 | 国产高潮视频在线观看 | 精品国产麻豆免费人成网站 | 一二三四社区在线中文视频 | 亚洲熟妇色xxxxx亚洲 | 色婷婷综合激情综在线播放 | 人妻少妇被猛烈进入中文字幕 | 国产舌乚八伦偷品w中 | 成人免费无码大片a毛片 | 亚洲欧美日韩国产精品一区二区 | 永久免费精品精品永久-夜色 | 色一情一乱一伦一视频免费看 | 人妻互换免费中文字幕 | 性欧美疯狂xxxxbbbb | 国产成人一区二区三区别 | 亚洲色www成人永久网址 | 无码人妻精品一区二区三区不卡 | 丰满人妻翻云覆雨呻吟视频 | 国色天香社区在线视频 | 高潮毛片无遮挡高清免费视频 | 久久精品国产大片免费观看 | 亚洲精品久久久久avwww潮水 | 波多野结衣aⅴ在线 | 久久久久久亚洲精品a片成人 | 中文字幕无码av波多野吉衣 | 狠狠色欧美亚洲狠狠色www | 少妇久久久久久人妻无码 | 久精品国产欧美亚洲色aⅴ大片 | 成年美女黄网站色大免费视频 | 国产真实伦对白全集 | 无套内谢老熟女 | 强伦人妻一区二区三区视频18 | 国产精品亚洲综合色区韩国 | 少妇太爽了在线观看 | 男人的天堂av网站 | 久久人人爽人人爽人人片av高清 | 无码av免费一区二区三区试看 | 国产免费观看黄av片 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲中文字幕在线无码一区二区 | 美女黄网站人色视频免费国产 | 亚洲综合另类小说色区 | 午夜成人1000部免费视频 | 成人综合网亚洲伊人 | 亚洲理论电影在线观看 | 少妇的肉体aa片免费 | 亚洲综合无码一区二区三区 | 日本一卡二卡不卡视频查询 | 97精品人妻一区二区三区香蕉 | 天天躁日日躁狠狠躁免费麻豆 | 高清不卡一区二区三区 | 日本www一道久久久免费榴莲 | 欧美喷潮久久久xxxxx | 色婷婷欧美在线播放内射 | 少妇人妻av毛片在线看 | 国产av一区二区精品久久凹凸 | 久久综合九色综合欧美狠狠 | 全黄性性激高免费视频 | 成在人线av无码免观看麻豆 | av香港经典三级级 在线 | 亚洲综合无码一区二区三区 | 欧美激情内射喷水高潮 | 夜夜躁日日躁狠狠久久av | 麻花豆传媒剧国产免费mv在线 | 久久久久免费看成人影片 | 亚洲精品午夜国产va久久成人 | 亚洲爆乳无码专区 | 欧美熟妇另类久久久久久多毛 | 无码人妻少妇伦在线电影 | 女高中生第一次破苞av | 亚洲精品欧美二区三区中文字幕 | 国产亚洲精品久久久久久大师 | 性色欲情网站iwww九文堂 | 国产真人无遮挡作爱免费视频 | 久9re热视频这里只有精品 | 色偷偷人人澡人人爽人人模 | 国产无套内射久久久国产 | 欧美日韩亚洲国产精品 | 高潮毛片无遮挡高清免费 | 日韩精品无码免费一区二区三区 | 纯爱无遮挡h肉动漫在线播放 | 狠狠色丁香久久婷婷综合五月 | 免费看男女做好爽好硬视频 | 中国女人内谢69xxxx | 又大又硬又爽免费视频 | 亚洲aⅴ无码成人网站国产app | 日韩人妻无码中文字幕视频 | 日韩精品成人一区二区三区 | 亚洲综合久久一区二区 | ass日本丰满熟妇pics | 四虎永久在线精品免费网址 | 国内少妇偷人精品视频免费 | 日本熟妇大屁股人妻 | 大屁股大乳丰满人妻 | 欧美日韩视频无码一区二区三 | 中文亚洲成a人片在线观看 | 一本加勒比波多野结衣 | 老熟女重囗味hdxx69 | 男女性色大片免费网站 | 亚洲狠狠婷婷综合久久 | 久久久精品国产sm最大网站 | 999久久久国产精品消防器材 | 99久久婷婷国产综合精品青草免费 | 日韩无套无码精品 | 青青青手机频在线观看 | 国产精品久久久久久无码 | 国产无遮挡吃胸膜奶免费看 | 欧美日韩人成综合在线播放 | 国产亚洲精品精品国产亚洲综合 | 无码人妻出轨黑人中文字幕 | 欧美人妻一区二区三区 | 亚洲欧洲中文日韩av乱码 | √天堂资源地址中文在线 | 中文字幕乱码中文乱码51精品 | a在线观看免费网站大全 | 中文精品无码中文字幕无码专区 | 国产一区二区三区四区五区加勒比 | 亚洲国产av美女网站 | 蜜桃av抽搐高潮一区二区 | 久久久无码中文字幕久... | 国内精品九九久久久精品 | 中文字幕无码av波多野吉衣 | 日韩精品无码免费一区二区三区 | 亚洲va欧美va天堂v国产综合 | 强伦人妻一区二区三区视频18 | 久久久精品456亚洲影院 | 亚洲区欧美区综合区自拍区 | 无码一区二区三区在线观看 | 无码帝国www无码专区色综合 | 色综合久久久无码网中文 | а√资源新版在线天堂 | 一个人看的视频www在线 | 99久久精品日本一区二区免费 | 精品一二三区久久aaa片 | 国产午夜福利亚洲第一 | 一本久道高清无码视频 | a国产一区二区免费入口 | 无码午夜成人1000部免费视频 | 亚洲色大成网站www国产 | 97精品人妻一区二区三区香蕉 | √8天堂资源地址中文在线 | 欧美黑人性暴力猛交喷水 | 国产在线一区二区三区四区五区 | 午夜性刺激在线视频免费 | 成人免费视频视频在线观看 免费 | 色婷婷综合中文久久一本 | 在线精品亚洲一区二区 | 久久亚洲中文字幕无码 | 丰满少妇熟乱xxxxx视频 | 中文字幕人成乱码熟女app | 亚洲精品久久久久avwww潮水 | 色综合久久久无码中文字幕 | 国产人妻久久精品二区三区老狼 | 欧美成人免费全部网站 | 无码人妻黑人中文字幕 | 日本一卡2卡3卡四卡精品网站 | 国产亚洲欧美在线专区 | 精品国产国产综合精品 | 波多野结衣av一区二区全免费观看 | 国产农村乱对白刺激视频 | 99精品久久毛片a片 | 精品无码av一区二区三区 | 亚洲成色www久久网站 | 97无码免费人妻超级碰碰夜夜 | 白嫩日本少妇做爰 | 女人和拘做爰正片视频 | 国产免费久久久久久无码 | 2019午夜福利不卡片在线 | 久久精品国产大片免费观看 | 色婷婷香蕉在线一区二区 | 成人精品视频一区二区 | 欧美日韩一区二区综合 | 少妇被黑人到高潮喷出白浆 | 亚洲男女内射在线播放 | 精品无码成人片一区二区98 | 国产av无码专区亚洲a∨毛片 | 色诱久久久久综合网ywww | 日本肉体xxxx裸交 | 在线观看国产一区二区三区 | 亚洲精品国产a久久久久久 | 久久综合给合久久狠狠狠97色 | 久激情内射婷内射蜜桃人妖 | 国产特级毛片aaaaaa高潮流水 | 狠狠色噜噜狠狠狠7777奇米 | 国产精品久久久久久亚洲影视内衣 | 大肉大捧一进一出视频出来呀 | 狂野欧美激情性xxxx | 精品国产乱码久久久久乱码 | 无码吃奶揉捏奶头高潮视频 | 人妻天天爽夜夜爽一区二区 | 国产极品美女高潮无套在线观看 | 无码人妻出轨黑人中文字幕 | 少妇被粗大的猛进出69影院 | 天堂无码人妻精品一区二区三区 | 日韩无码专区 | 国产av无码专区亚洲a∨毛片 | 九九在线中文字幕无码 | 久久久亚洲欧洲日产国码αv | 久久综合九色综合欧美狠狠 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲欧美日韩综合久久久 | 日本护士毛茸茸高潮 | 激情内射亚州一区二区三区爱妻 | 国产人妻精品一区二区三区不卡 | 99久久久无码国产精品免费 | 亚洲国产精华液网站w | 久久这里只有精品视频9 | 偷窥村妇洗澡毛毛多 | 国产精品丝袜黑色高跟鞋 | 好男人社区资源 | 国产内射爽爽大片视频社区在线 | 漂亮人妻洗澡被公强 日日躁 | 亚洲人成影院在线无码按摩店 | 在线天堂新版最新版在线8 | 人妻天天爽夜夜爽一区二区 | 日本xxxx色视频在线观看免费 | 奇米影视7777久久精品人人爽 | 曰本女人与公拘交酡免费视频 | 欧美日韩视频无码一区二区三 | 中文字幕日韩精品一区二区三区 | 亚洲欧洲中文日韩av乱码 | 清纯唯美经典一区二区 | 久久久亚洲欧洲日产国码αv | 少妇久久久久久人妻无码 | 亚洲午夜无码久久 | 狠狠躁日日躁夜夜躁2020 | 日产精品高潮呻吟av久久 | 亚洲一区二区观看播放 | 少妇久久久久久人妻无码 | 亚洲 a v无 码免 费 成 人 a v | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲精品国偷拍自产在线观看蜜桃 | 日韩欧美中文字幕公布 | 久久国内精品自在自线 | 国产在热线精品视频 | 啦啦啦www在线观看免费视频 | 欧美自拍另类欧美综合图片区 | 国产激情精品一区二区三区 | 欧美丰满熟妇xxxx性ppx人交 | 永久免费精品精品永久-夜色 | 亚洲欧美中文字幕5发布 | 亚洲中文字幕无码中文字在线 | 午夜福利电影 | 亚洲中文字幕无码中文字在线 | 免费无码的av片在线观看 | 国产激情综合五月久久 | 国产电影无码午夜在线播放 | 天天爽夜夜爽夜夜爽 | 亚洲国产综合无码一区 | 小sao货水好多真紧h无码视频 | 亚洲综合另类小说色区 | 久久久久av无码免费网 | 日韩亚洲欧美中文高清在线 | 十八禁视频网站在线观看 | 色偷偷人人澡人人爽人人模 | 97精品人妻一区二区三区香蕉 | 午夜精品久久久久久久久 | 日本成熟视频免费视频 | 内射老妇bbwx0c0ck | 国产熟妇另类久久久久 | 荫蒂被男人添的好舒服爽免费视频 | 国产亚洲精品久久久久久久久动漫 | 少妇人妻av毛片在线看 | 荫蒂添的好舒服视频囗交 | 免费人成网站视频在线观看 | 久久久久久久女国产乱让韩 | 永久免费观看美女裸体的网站 | 最新版天堂资源中文官网 | 领导边摸边吃奶边做爽在线观看 | 天天拍夜夜添久久精品 | 牛和人交xxxx欧美 | 亚洲精品一区二区三区在线 | 强伦人妻一区二区三区视频18 | 色偷偷人人澡人人爽人人模 | 精品国产一区二区三区四区在线看 | 欧洲精品码一区二区三区免费看 | 中文字幕 亚洲精品 第1页 | 亚洲色无码一区二区三区 | 国产精品久久久av久久久 | 亚洲成在人网站无码天堂 | 无码国产激情在线观看 | 国产深夜福利视频在线 | 色综合天天综合狠狠爱 | 色狠狠av一区二区三区 | 天下第一社区视频www日本 | 97精品国产97久久久久久免费 | 久久人人爽人人爽人人片ⅴ | 国产麻豆精品精东影业av网站 | 午夜精品久久久内射近拍高清 | 精品成人av一区二区三区 | 国产精品a成v人在线播放 | 国产香蕉97碰碰久久人人 | 亚洲精品国产精品乱码视色 | av在线亚洲欧洲日产一区二区 | www成人国产高清内射 | 成人免费视频一区二区 | 午夜性刺激在线视频免费 | 亚洲人成影院在线无码按摩店 | 国产人妻精品午夜福利免费 | 天天躁日日躁狠狠躁免费麻豆 | 精品国产成人一区二区三区 | 岛国片人妻三上悠亚 | 精品国产青草久久久久福利 | 亚洲欧美日韩成人高清在线一区 | 无码人妻黑人中文字幕 | 在线a亚洲视频播放在线观看 | 大地资源网第二页免费观看 | 国产av人人夜夜澡人人爽麻豆 | 久久午夜夜伦鲁鲁片无码免费 | 日本xxxx色视频在线观看免费 | 内射欧美老妇wbb | 国产成人午夜福利在线播放 | 欧美一区二区三区 | 成人免费视频视频在线观看 免费 | 99久久婷婷国产综合精品青草免费 | 综合人妻久久一区二区精品 | 亚洲日韩一区二区三区 | av小次郎收藏 | 风流少妇按摩来高潮 | 亚洲狠狠婷婷综合久久 | 无码人妻av免费一区二区三区 | 97精品人妻一区二区三区香蕉 | 国产无套内射久久久国产 | 天天拍夜夜添久久精品大 | 久久精品一区二区三区四区 | 成年美女黄网站色大免费全看 | 美女黄网站人色视频免费国产 | 久久熟妇人妻午夜寂寞影院 | 精品成在人线av无码免费看 | 一本久久a久久精品亚洲 | 成年美女黄网站色大免费全看 | 88国产精品欧美一区二区三区 | 国内综合精品午夜久久资源 | 丰满诱人的人妻3 | 亚洲精品一区二区三区在线观看 | 男女下面进入的视频免费午夜 | 人人澡人人透人人爽 | 成人无码视频免费播放 | 亚洲小说春色综合另类 | 亚洲中文字幕无码中文字在线 | 人妻少妇被猛烈进入中文字幕 | 午夜肉伦伦影院 | 国产精品久久久久久无码 | 精品无码国产一区二区三区av | 国产片av国语在线观看 | 亚洲色欲色欲欲www在线 | 国产麻豆精品精东影业av网站 | 亚洲欧美国产精品专区久久 | 亚洲精品一区二区三区大桥未久 | 国产97色在线 | 免 | 亚洲色偷偷男人的天堂 | 西西人体www44rt大胆高清 | 午夜丰满少妇性开放视频 | 久久久久99精品成人片 | 精品久久久久久人妻无码中文字幕 | 无码人妻丰满熟妇区毛片18 | 99视频精品全部免费免费观看 | 国产内射爽爽大片视频社区在线 | 人妻少妇精品无码专区动漫 | 99精品视频在线观看免费 | 欧美性生交活xxxxxdddd | 欧美真人作爱免费视频 | 熟妇女人妻丰满少妇中文字幕 | 久在线观看福利视频 | 亚洲理论电影在线观看 | 理论片87福利理论电影 | 色综合久久久久综合一本到桃花网 | 亚洲中文字幕无码中字 | 久久人人爽人人爽人人片av高清 | 国产无套内射久久久国产 | 欧美性生交活xxxxxdddd | 国产精品香蕉在线观看 | 久久精品国产一区二区三区肥胖 | 国产热a欧美热a在线视频 | 一本加勒比波多野结衣 | 西西人体www44rt大胆高清 | 日本www一道久久久免费榴莲 | 无码福利日韩神码福利片 | 亚洲国产综合无码一区 | 成人精品一区二区三区中文字幕 | 性欧美牲交xxxxx视频 | 国产性生交xxxxx无码 | 亚洲精品综合一区二区三区在线 | 国产精品a成v人在线播放 | ass日本丰满熟妇pics | 亚洲欧美综合区丁香五月小说 | 色欲久久久天天天综合网精品 | 国产精品丝袜黑色高跟鞋 | 国产三级精品三级男人的天堂 | 亚洲小说春色综合另类 | 亚洲中文字幕无码中字 | 天天摸天天透天天添 | 国产区女主播在线观看 | 亚洲综合伊人久久大杳蕉 | 色婷婷久久一区二区三区麻豆 | 午夜不卡av免费 一本久久a久久精品vr综合 | 亚洲天堂2017无码 | 九九在线中文字幕无码 | 久久国产精品精品国产色婷婷 | 欧美性生交xxxxx久久久 | 亚洲乱码国产乱码精品精 | 少妇被黑人到高潮喷出白浆 | 色综合视频一区二区三区 | 国产 精品 自在自线 | 黑人粗大猛烈进出高潮视频 | 欧美变态另类xxxx | 欧美日韩精品 | 国产精品亚洲一区二区三区喷水 | 日韩av无码中文无码电影 | 色老头在线一区二区三区 | 国产精品亚洲五月天高清 | 亚洲精品久久久久久一区二区 | 国产精品手机免费 | av小次郎收藏 | 中文字幕人妻无码一区二区三区 | 精品aⅴ一区二区三区 | 熟妇人妻无乱码中文字幕 | 性欧美videos高清精品 | аⅴ资源天堂资源库在线 | 亚洲中文字幕在线无码一区二区 | 男人的天堂2018无码 | 久久国内精品自在自线 | 亚洲自偷精品视频自拍 | 欧美乱妇无乱码大黄a片 | 美女毛片一区二区三区四区 | 国产乱人无码伦av在线a | 国产av无码专区亚洲awww | 色一情一乱一伦 | 色欲av亚洲一区无码少妇 | 午夜福利一区二区三区在线观看 | 又色又爽又黄的美女裸体网站 | 未满小14洗澡无码视频网站 | 亚洲国产精品成人久久蜜臀 | 男女超爽视频免费播放 | 国产亚洲人成a在线v网站 | 欧美人与禽猛交狂配 | 国产人成高清在线视频99最全资源 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 18禁止看的免费污网站 | 乱人伦人妻中文字幕无码 | 少妇被粗大的猛进出69影院 | 日本熟妇人妻xxxxx人hd | 欧美色就是色 | 亚洲人成影院在线无码按摩店 | 久久久国产精品无码免费专区 | 国产精品久久久久影院嫩草 | 欧美乱妇无乱码大黄a片 | 亚洲无人区午夜福利码高清完整版 | 久久综合狠狠综合久久综合88 | 中文无码成人免费视频在线观看 | 国产午夜亚洲精品不卡 | 内射后入在线观看一区 | 香港三级日本三级妇三级 | 亚洲精品一区三区三区在线观看 | 色综合久久久久综合一本到桃花网 | 国内揄拍国内精品人妻 | 帮老师解开蕾丝奶罩吸乳网站 | 国产精品无套呻吟在线 | 97人妻精品一区二区三区 | 欧美 亚洲 国产 另类 | 欧美日韩人成综合在线播放 | 网友自拍区视频精品 | 亚洲精品成人福利网站 | 天天拍夜夜添久久精品大 | 久久人人爽人人爽人人片av高清 | 色五月五月丁香亚洲综合网 | 人人妻人人澡人人爽人人精品 | 在线观看国产午夜福利片 | 欧洲熟妇色 欧美 | 狠狠cao日日穞夜夜穞av | 国内综合精品午夜久久资源 | 亚洲国产午夜精品理论片 | 中文久久乱码一区二区 | 久久久久久国产精品无码下载 | 日本熟妇乱子伦xxxx | 99久久久国产精品无码免费 | 欧美 日韩 人妻 高清 中文 | ass日本丰满熟妇pics | 人妻少妇被猛烈进入中文字幕 | 亚洲精品久久久久久一区二区 | 樱花草在线社区www | 帮老师解开蕾丝奶罩吸乳网站 | 国产成人综合在线女婷五月99播放 | 综合网日日天干夜夜久久 | 国产亚av手机在线观看 | 国产精品亚洲一区二区三区喷水 | 亚洲国产精品无码久久久久高潮 | 国产人妻精品午夜福利免费 | 久久综合给久久狠狠97色 | 国产真实夫妇视频 | 久久成人a毛片免费观看网站 | 激情亚洲一区国产精品 | 九九热爱视频精品 | 性欧美大战久久久久久久 | 色婷婷av一区二区三区之红樱桃 | 成人性做爰aaa片免费看不忠 | а天堂中文在线官网 | 国产亚洲精品久久久久久大师 | 亚洲成在人网站无码天堂 | 黑人巨大精品欧美一区二区 | 久久zyz资源站无码中文动漫 | 精品国产一区av天美传媒 | 亚洲国产欧美日韩精品一区二区三区 | 国产精品嫩草久久久久 | 天下第一社区视频www日本 | 丰满人妻一区二区三区免费视频 | 国产在线精品一区二区三区直播 | 扒开双腿疯狂进出爽爽爽视频 | 无码人妻精品一区二区三区下载 | 久久精品人人做人人综合试看 | 人人妻人人澡人人爽欧美一区 | 日韩亚洲欧美中文高清在线 | 成人无码视频在线观看网站 | 日本一卡二卡不卡视频查询 | 欧美激情综合亚洲一二区 | 成 人影片 免费观看 | 久久精品人妻少妇一区二区三区 | 爱做久久久久久 | 色综合久久久久综合一本到桃花网 | 亚洲国产高清在线观看视频 | 亚无码乱人伦一区二区 | 国产精品久久久久无码av色戒 | 精品国产av色一区二区深夜久久 | 红桃av一区二区三区在线无码av | 久久久久亚洲精品男人的天堂 | 亚洲爆乳无码专区 | 亚洲精品www久久久 | 中文字幕无码人妻少妇免费 | 国产亚洲人成a在线v网站 | 久久精品人人做人人综合 | 久久99精品国产麻豆蜜芽 | 国内揄拍国内精品人妻 | 少妇的肉体aa片免费 | 激情五月综合色婷婷一区二区 | 亚洲精品一区二区三区四区五区 | 亚洲中文字幕av在天堂 | 久9re热视频这里只有精品 | 欧洲美熟女乱又伦 | 亚洲国产高清在线观看视频 | 久久婷婷五月综合色国产香蕉 | 精品一区二区三区波多野结衣 | 55夜色66夜色国产精品视频 | 无遮挡啪啪摇乳动态图 | 国产成人无码av在线影院 | 俄罗斯老熟妇色xxxx | 亚欧洲精品在线视频免费观看 | 夜精品a片一区二区三区无码白浆 | 麻豆国产丝袜白领秘书在线观看 | 国产真实伦对白全集 | 亚洲精品久久久久avwww潮水 | 国产精品亚洲专区无码不卡 | 亚洲天堂2017无码中文 | 日韩人妻系列无码专区 | 亚洲中文无码av永久不收费 | 欧美放荡的少妇 | 久久综合九色综合欧美狠狠 | 蜜臀aⅴ国产精品久久久国产老师 | 伊人久久大香线焦av综合影院 | 131美女爱做视频 | 国模大胆一区二区三区 | 亚洲国产精华液网站w | 人妻少妇被猛烈进入中文字幕 | 国产高潮视频在线观看 | 国产一区二区三区影院 | 国产无遮挡吃胸膜奶免费看 | 无码中文字幕色专区 | 丰满人妻一区二区三区免费视频 | 四虎国产精品免费久久 | 帮老师解开蕾丝奶罩吸乳网站 | 欧美怡红院免费全部视频 | 特级做a爰片毛片免费69 | 九九在线中文字幕无码 | 国产精品欧美成人 | 老太婆性杂交欧美肥老太 | 国色天香社区在线视频 | 久久久久成人片免费观看蜜芽 | 思思久久99热只有频精品66 | 极品尤物被啪到呻吟喷水 | 日日躁夜夜躁狠狠躁 | 国产人妻精品一区二区三区不卡 | 亲嘴扒胸摸屁股激烈网站 | 纯爱无遮挡h肉动漫在线播放 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲の无码国产の无码影院 | 国产亚洲精品久久久ai换 | 午夜福利试看120秒体验区 | 日日天干夜夜狠狠爱 | 麻豆国产97在线 | 欧洲 | 好男人社区资源 | 国产激情一区二区三区 | 东京无码熟妇人妻av在线网址 | 国内精品九九久久久精品 | 人妻插b视频一区二区三区 | 免费无码肉片在线观看 | 亚洲码国产精品高潮在线 | 精品水蜜桃久久久久久久 | 一本久道高清无码视频 | 成人精品一区二区三区中文字幕 | 又大又紧又粉嫩18p少妇 | 亚洲成在人网站无码天堂 | 亚洲伊人久久精品影院 | 少妇无套内谢久久久久 | 亚洲国产av精品一区二区蜜芽 | 亚洲男人av香蕉爽爽爽爽 | 天天做天天爱天天爽综合网 | 国产办公室秘书无码精品99 | 国产精品-区区久久久狼 | 国产舌乚八伦偷品w中 | 鲁大师影院在线观看 | www一区二区www免费 | 成人无码视频在线观看网站 | 国产香蕉97碰碰久久人人 | 国产精品永久免费视频 | 国产成人av免费观看 | 特级做a爰片毛片免费69 | 国产精品久久久久9999小说 | 草草网站影院白丝内射 | 亚洲乱亚洲乱妇50p | 国产精品久久久久7777 | 一区二区三区乱码在线 | 欧洲 | 色综合久久中文娱乐网 | 国内老熟妇对白xxxxhd | 少妇性l交大片欧洲热妇乱xxx | 国产绳艺sm调教室论坛 | 丁香啪啪综合成人亚洲 | 图片区 小说区 区 亚洲五月 | 国产精品亚洲五月天高清 | 久久精品女人天堂av免费观看 | 中文字幕无码人妻少妇免费 | 粉嫩少妇内射浓精videos | 男女爱爱好爽视频免费看 | 色婷婷av一区二区三区之红樱桃 | 人人妻在人人 | 精品乱码久久久久久久 | 激情五月综合色婷婷一区二区 | 精品国产aⅴ无码一区二区 | 国产熟妇高潮叫床视频播放 | 欧美老人巨大xxxx做受 | 亚洲欧美日韩国产精品一区二区 | 少妇激情av一区二区 | 国内少妇偷人精品视频 | 少妇一晚三次一区二区三区 | 色 综合 欧美 亚洲 国产 | 性啪啪chinese东北女人 | 亚洲国产精品久久人人爱 | www国产亚洲精品久久网站 | 欧美一区二区三区视频在线观看 | 欧美日本日韩 | 久久综合激激的五月天 | 欧美35页视频在线观看 | 亚洲日韩一区二区 | 午夜肉伦伦影院 | 高清国产亚洲精品自在久久 | 熟妇女人妻丰满少妇中文字幕 | 人妻插b视频一区二区三区 | 亚洲精品久久久久avwww潮水 | 国产av无码专区亚洲awww | 又色又爽又黄的美女裸体网站 | 亚拍精品一区二区三区探花 | 亚洲中文字幕在线无码一区二区 | 亚洲日韩中文字幕在线播放 | 亚洲综合在线一区二区三区 | 熟女俱乐部五十路六十路av | 久久国语露脸国产精品电影 | 性欧美大战久久久久久久 | 国产欧美亚洲精品a | 久久综合给久久狠狠97色 | 国产成人精品视频ⅴa片软件竹菊 | 国产口爆吞精在线视频 | 亚洲精品成人福利网站 | 99久久99久久免费精品蜜桃 | 亚洲无人区午夜福利码高清完整版 | 国产成人无码a区在线观看视频app | 老熟女重囗味hdxx69 | 无码播放一区二区三区 | 大肉大捧一进一出好爽视频 | 日韩人妻系列无码专区 | 国产亚洲精品精品国产亚洲综合 | 国产69精品久久久久app下载 | 国内精品久久久久久中文字幕 | 真人与拘做受免费视频 | 无码帝国www无码专区色综合 | 亚洲色无码一区二区三区 | 无遮挡国产高潮视频免费观看 | 亚洲国产精品久久久天堂 | 偷窥日本少妇撒尿chinese | 青春草在线视频免费观看 | 亚洲色欲色欲欲www在线 | 少妇被粗大的猛进出69影院 | 丝袜人妻一区二区三区 | 97se亚洲精品一区 | 呦交小u女精品视频 | 国产成人精品一区二区在线小狼 | 国产成人无码午夜视频在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精品永久免费视频 | 午夜性刺激在线视频免费 | √天堂中文官网8在线 | 国产精品久久久av久久久 | 欧美国产亚洲日韩在线二区 | 亚洲欧美精品aaaaaa片 | 一区二区三区高清视频一 | 亚洲熟悉妇女xxx妇女av | 精品熟女少妇av免费观看 | 国产一区二区三区日韩精品 | 亚洲 日韩 欧美 成人 在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 久久国产精品_国产精品 | 激情综合激情五月俺也去 | 少妇性l交大片 | 国产亚洲人成在线播放 | 国产无遮挡又黄又爽免费视频 | 国产内射爽爽大片视频社区在线 | 色诱久久久久综合网ywww | 中文字幕色婷婷在线视频 | 精品国产一区二区三区四区在线看 | 精品无码国产自产拍在线观看蜜 | 国产乡下妇女做爰 | 国产熟女一区二区三区四区五区 | 成人无码视频在线观看网站 | 国产激情无码一区二区 | 国产69精品久久久久app下载 | 乱人伦中文视频在线观看 | 骚片av蜜桃精品一区 | 亚洲经典千人经典日产 | 妺妺窝人体色www婷婷 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 日日天日日夜日日摸 | 久久久亚洲欧洲日产国码αv | 国产97人人超碰caoprom | 亚洲男人av天堂午夜在 | 日本高清一区免费中文视频 | 偷窥日本少妇撒尿chinese | 亚洲の无码国产の无码步美 | 国产精品亚洲专区无码不卡 | 四十如虎的丰满熟妇啪啪 | а天堂中文在线官网 | 又紧又大又爽精品一区二区 | 一本久久伊人热热精品中文字幕 | 国产97在线 | 亚洲 | 国产特级毛片aaaaaaa高清 | 日本www一道久久久免费榴莲 | 国产免费久久久久久无码 | 亚洲日韩av片在线观看 | 久久人人爽人人爽人人片ⅴ | 国产亚洲精品久久久久久国模美 | 亚洲狠狠婷婷综合久久 | 国产亚洲精品久久久ai换 | 久久午夜无码鲁丝片秋霞 | 中文字幕无码免费久久99 | 熟妇人妻无码xxx视频 | 亚洲欧美日韩国产精品一区二区 | 中文无码伦av中文字幕 | 麻豆果冻传媒2021精品传媒一区下载 | 蜜桃av抽搐高潮一区二区 | 东京热无码av男人的天堂 | 天堂亚洲2017在线观看 | 99riav国产精品视频 | 高中生自慰www网站 | 人妻少妇精品视频专区 | 精品成在人线av无码免费看 | 国产性生大片免费观看性 | 国产精品久久久久久无码 | 亚洲欧洲无卡二区视頻 | 国产激情精品一区二区三区 | 久9re热视频这里只有精品 | 久久午夜无码鲁丝片午夜精品 | 欧美日韩视频无码一区二区三 | 日日干夜夜干 | 最新国产麻豆aⅴ精品无码 | 天堂无码人妻精品一区二区三区 | 正在播放老肥熟妇露脸 | 日韩av无码一区二区三区 | 精品国偷自产在线视频 | 男女爱爱好爽视频免费看 | 久久久精品欧美一区二区免费 | 婷婷六月久久综合丁香 | 国产做国产爱免费视频 | 内射巨臀欧美在线视频 | 丰满少妇女裸体bbw | 又大又紧又粉嫩18p少妇 | 欧美阿v高清资源不卡在线播放 | 亚洲精品综合一区二区三区在线 | 东京无码熟妇人妻av在线网址 | 亚洲色www成人永久网址 | 亚洲国产精品毛片av不卡在线 | 正在播放老肥熟妇露脸 | www成人国产高清内射 | 美女张开腿让人桶 | 国产乱人无码伦av在线a | 毛片内射-百度 | 国内少妇偷人精品视频免费 | 18精品久久久无码午夜福利 | 在线播放无码字幕亚洲 | 国产av无码专区亚洲awww | 日本一区二区三区免费播放 | 在线天堂新版最新版在线8 | 欧美午夜特黄aaaaaa片 | 东京无码熟妇人妻av在线网址 | 熟女少妇人妻中文字幕 | 精品夜夜澡人妻无码av蜜桃 | 久久精品国产99久久6动漫 | 国产麻豆精品一区二区三区v视界 | 国产一精品一av一免费 | 美女毛片一区二区三区四区 | 精品偷自拍另类在线观看 | 国产人成高清在线视频99最全资源 | 成 人 免费观看网站 | 亚洲精品综合五月久久小说 | 亚洲一区二区观看播放 | 日本大乳高潮视频在线观看 | 国产成人人人97超碰超爽8 | 日韩av无码一区二区三区 | 99久久久无码国产精品免费 | 东京热男人av天堂 | 偷窥日本少妇撒尿chinese | 无码乱肉视频免费大全合集 | 亚洲成av人片天堂网无码】 | 亚洲色偷偷偷综合网 | 精品无人国产偷自产在线 | 3d动漫精品啪啪一区二区中 | 亚洲欧美精品伊人久久 | 国产成人无码午夜视频在线观看 | 爱做久久久久久 | 久久久久免费看成人影片 | 男人和女人高潮免费网站 | 午夜福利不卡在线视频 | 成熟人妻av无码专区 | 天堂а√在线地址中文在线 | 天堂在线观看www | 精品国产成人一区二区三区 | 99国产精品白浆在线观看免费 | 亚洲精品国产第一综合99久久 | 国产成人无码一二三区视频 | 成年美女黄网站色大免费全看 | 2019午夜福利不卡片在线 | 欧美喷潮久久久xxxxx | 波多野结衣高清一区二区三区 | 欧美 丝袜 自拍 制服 另类 | www国产亚洲精品久久网站 | 国产精品久久国产三级国 | 久久精品丝袜高跟鞋 | 亚洲日韩中文字幕在线播放 | 亚洲综合无码一区二区三区 | 天下第一社区视频www日本 | 草草网站影院白丝内射 | 爽爽影院免费观看 | 国产深夜福利视频在线 | 又大又硬又黄的免费视频 | 国产av一区二区精品久久凹凸 | 亚洲成a人片在线观看日本 | 国产精品美女久久久网av | 无码av岛国片在线播放 | 亚洲成在人网站无码天堂 | 日日摸天天摸爽爽狠狠97 | 色一情一乱一伦一视频免费看 | 色五月丁香五月综合五月 | √天堂资源地址中文在线 | 激情综合激情五月俺也去 | 亚洲日韩av一区二区三区中文 | 又大又硬又爽免费视频 | 色 综合 欧美 亚洲 国产 | 国产亚洲tv在线观看 | 国产免费观看黄av片 | 亚洲色欲久久久综合网东京热 | 久久久成人毛片无码 | 欧美大屁股xxxxhd黑色 | 在线看片无码永久免费视频 | 国产国语老龄妇女a片 | 午夜精品一区二区三区在线观看 | 成人免费视频一区二区 | 无码av岛国片在线播放 | 无码播放一区二区三区 | 国产人妻精品一区二区三区 | 黑人巨大精品欧美黑寡妇 | 久久久久av无码免费网 | 麻豆成人精品国产免费 | 免费无码av一区二区 | 欧美日韩一区二区综合 | 97精品国产97久久久久久免费 | 天天躁日日躁狠狠躁免费麻豆 | 国产亚洲日韩欧美另类第八页 | 欧美性生交活xxxxxdddd | 麻豆av传媒蜜桃天美传媒 | 综合网日日天干夜夜久久 | 55夜色66夜色国产精品视频 | 黑森林福利视频导航 | 性开放的女人aaa片 | 老子影院午夜伦不卡 | 成人无码影片精品久久久 | a在线观看免费网站大全 | 97资源共享在线视频 | 乱中年女人伦av三区 | 扒开双腿吃奶呻吟做受视频 | 麻豆国产丝袜白领秘书在线观看 | 午夜熟女插插xx免费视频 | 成熟人妻av无码专区 | 性欧美疯狂xxxxbbbb | 成人无码精品一区二区三区 | 蜜桃臀无码内射一区二区三区 | 野外少妇愉情中文字幕 | 无码任你躁久久久久久久 | 欧美 日韩 人妻 高清 中文 | 暴力强奷在线播放无码 | 国产三级精品三级男人的天堂 | 暴力强奷在线播放无码 | 日韩欧美群交p片內射中文 | 无码av岛国片在线播放 | 国产两女互慰高潮视频在线观看 | 久久国产劲爆∧v内射 | 日本va欧美va欧美va精品 | 国产乱码精品一品二品 | 美女扒开屁股让男人桶 | 丝袜 中出 制服 人妻 美腿 | 亚洲性无码av中文字幕 | 午夜免费福利小电影 | 又大又紧又粉嫩18p少妇 | 无码人妻丰满熟妇区毛片18 | 亚洲中文字幕无码一久久区 | 综合激情五月综合激情五月激情1 | 亚洲精品一区二区三区婷婷月 | 久久综合给合久久狠狠狠97色 | 国产色精品久久人妻 | 欧美xxxxx精品 | 亚洲人亚洲人成电影网站色 | 伊人久久大香线焦av综合影院 | 狠狠色欧美亚洲狠狠色www | 国产97在线 | 亚洲 | 久久成人a毛片免费观看网站 | 夜夜高潮次次欢爽av女 | 中文字幕久久久久人妻 | aⅴ亚洲 日韩 色 图网站 播放 | 欧美三级a做爰在线观看 | 漂亮人妻洗澡被公强 日日躁 | 性欧美疯狂xxxxbbbb | 亚洲 另类 在线 欧美 制服 | 国产sm调教视频在线观看 | 久久97精品久久久久久久不卡 | 无码人妻黑人中文字幕 | 少女韩国电视剧在线观看完整 | 日韩av无码中文无码电影 | 水蜜桃亚洲一二三四在线 | 午夜福利一区二区三区在线观看 | 日本高清一区免费中文视频 | 99re在线播放 | 男女性色大片免费网站 | 精品午夜福利在线观看 | 日韩精品无码免费一区二区三区 | 日本精品高清一区二区 | 无码人妻少妇伦在线电影 | 国产精品.xx视频.xxtv | 中文精品久久久久人妻不卡 | 少妇性l交大片 | 国产69精品久久久久app下载 | 亚洲精品国产品国语在线观看 | 精品国产一区二区三区av 性色 | 久精品国产欧美亚洲色aⅴ大片 | 色偷偷人人澡人人爽人人模 | 亚洲精品国产精品乱码不卡 | 国产香蕉尹人视频在线 | 六月丁香婷婷色狠狠久久 | 亚洲精品久久久久中文第一幕 | 色婷婷综合激情综在线播放 | 99久久精品日本一区二区免费 | 日本熟妇人妻xxxxx人hd | 国产无遮挡又黄又爽免费视频 | 樱花草在线播放免费中文 | 女人和拘做爰正片视频 | 亚洲国产成人a精品不卡在线 | 亚洲欧美中文字幕5发布 | 久久久久久久人妻无码中文字幕爆 | 无码乱肉视频免费大全合集 | 少妇高潮喷潮久久久影院 | 精品一区二区不卡无码av | 日韩精品乱码av一区二区 | 97se亚洲精品一区 | 人人妻人人藻人人爽欧美一区 | 国产区女主播在线观看 | 国产午夜亚洲精品不卡 | 精品午夜福利在线观看 | 狠狠躁日日躁夜夜躁2020 | 成人精品一区二区三区中文字幕 | 亚洲 欧美 激情 小说 另类 | 少妇厨房愉情理9仑片视频 | 狠狠色丁香久久婷婷综合五月 | 无码福利日韩神码福利片 | 国产电影无码午夜在线播放 | 久久精品中文闷骚内射 | 人人澡人摸人人添 | 亚洲中文字幕无码一久久区 | 国产麻豆精品精东影业av网站 | 久久精品丝袜高跟鞋 | 男人的天堂av网站 | 人妻少妇被猛烈进入中文字幕 | 内射白嫩少妇超碰 | 久久99热只有频精品8 | 丁香啪啪综合成人亚洲 | 黑人玩弄人妻中文在线 | 兔费看少妇性l交大片免费 | 国产成人无码一二三区视频 | 亚洲国产欧美国产综合一区 | 久久精品成人欧美大片 | 在线视频网站www色 | 亚洲精品中文字幕乱码 | 欧美日韩视频无码一区二区三 | 成人三级无码视频在线观看 | 中文字幕无码人妻少妇免费 | 久久99热只有频精品8 | 中文字幕无线码 | 搡女人真爽免费视频大全 | 亚洲人成网站免费播放 | 亚洲欧洲中文日韩av乱码 | 亚洲爆乳无码专区 | 欧美老妇交乱视频在线观看 | 一本加勒比波多野结衣 | 啦啦啦www在线观看免费视频 | 欧美一区二区三区视频在线观看 | 99精品久久毛片a片 | 亚欧洲精品在线视频免费观看 | 蜜桃av抽搐高潮一区二区 | 色婷婷欧美在线播放内射 | 亚洲一区二区三区偷拍女厕 | 一个人看的www免费视频在线观看 | 大肉大捧一进一出好爽视频 | 51国偷自产一区二区三区 | 亚洲高清偷拍一区二区三区 | 免费播放一区二区三区 | 中文字幕 亚洲精品 第1页 | 国产凸凹视频一区二区 | 性欧美大战久久久久久久 | 正在播放老肥熟妇露脸 | 亚洲自偷精品视频自拍 | 亚洲成a人片在线观看无码3d | 色噜噜亚洲男人的天堂 | 丁香啪啪综合成人亚洲 | 男人扒开女人内裤强吻桶进去 | 中文无码成人免费视频在线观看 | 国产农村妇女高潮大叫 | 377p欧洲日本亚洲大胆 | 妺妺窝人体色www婷婷 | 国产又粗又硬又大爽黄老大爷视 | 日韩亚洲欧美精品综合 | 国产精品无码一区二区三区不卡 | 18精品久久久无码午夜福利 | 小泽玛莉亚一区二区视频在线 | 国产精品国产三级国产专播 | 亚洲熟熟妇xxxx | 激情国产av做激情国产爱 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲欧美国产精品专区久久 | 国产内射爽爽大片视频社区在线 | 色诱久久久久综合网ywww | 日本乱偷人妻中文字幕 | 亚洲国产精品久久久久久 | 成人综合网亚洲伊人 | 欧美精品无码一区二区三区 | 久久精品国产大片免费观看 | 午夜不卡av免费 一本久久a久久精品vr综合 | 国产网红无码精品视频 | 色情久久久av熟女人妻网站 | 日韩人妻无码中文字幕视频 | 国产精品欧美成人 | 最近的中文字幕在线看视频 | 亚洲一区二区三区播放 | 国产猛烈高潮尖叫视频免费 | 精品 日韩 国产 欧美 视频 | 色欲av亚洲一区无码少妇 | 中文字幕无码日韩专区 | 亚洲国产欧美国产综合一区 | 久久久久久亚洲精品a片成人 | 中文字幕无码乱人伦 | 亚洲色偷偷偷综合网 | 一个人看的www免费视频在线观看 | 大胆欧美熟妇xx | 熟女体下毛毛黑森林 | 国产真实乱对白精彩久久 | 久激情内射婷内射蜜桃人妖 | 娇妻被黑人粗大高潮白浆 | 欧美阿v高清资源不卡在线播放 | 麻豆精品国产精华精华液好用吗 | 中文字幕乱妇无码av在线 | 国产无遮挡又黄又爽免费视频 | 福利一区二区三区视频在线观看 | 97久久精品无码一区二区 | 无码精品人妻一区二区三区av | 内射爽无广熟女亚洲 | 日韩精品无码一本二本三本色 | 国产 精品 自在自线 | 久久无码专区国产精品s | 亚洲大尺度无码无码专区 | 久久精品国产精品国产精品污 | 一本久道久久综合婷婷五月 | 免费看男女做好爽好硬视频 | 樱花草在线社区www | 日本大乳高潮视频在线观看 | 国产精品久久久一区二区三区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久午夜无码鲁丝片 | 欧美日本免费一区二区三区 | 亚洲人成影院在线观看 | aa片在线观看视频在线播放 | 亚洲成av人影院在线观看 | 色情久久久av熟女人妻网站 | 国产成人无码a区在线观看视频app | 亚洲va欧美va天堂v国产综合 | 久久综合色之久久综合 | 少女韩国电视剧在线观看完整 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲国产日韩a在线播放 | 欧美色就是色 | 日韩人妻少妇一区二区三区 | 国产精品亚洲专区无码不卡 | 亚洲精品无码国产 | 亚洲欧洲日本无在线码 | 综合网日日天干夜夜久久 | 一本久道久久综合狠狠爱 | 欧美成人家庭影院 | 色 综合 欧美 亚洲 国产 | 天下第一社区视频www日本 | 男女性色大片免费网站 | 久久综合狠狠综合久久综合88 | 久久久久99精品国产片 | 特级做a爰片毛片免费69 | 日本又色又爽又黄的a片18禁 | 欧美激情综合亚洲一二区 | 色诱久久久久综合网ywww | 欧美怡红院免费全部视频 | 无码毛片视频一区二区本码 | 狠狠cao日日穞夜夜穞av | 鲁一鲁av2019在线 | 一本大道久久东京热无码av | 国精产品一品二品国精品69xx | 国产精品视频免费播放 | 暴力强奷在线播放无码 | 一本久久a久久精品vr综合 | 亚洲精品午夜无码电影网 | 久久久精品欧美一区二区免费 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产精品第一国产精品 | 久久99精品久久久久婷婷 | 久久精品国产一区二区三区肥胖 | 国产精品久久久 | 精品久久8x国产免费观看 | 女人被男人躁得好爽免费视频 | 成人性做爰aaa片免费看不忠 | 久久久国产一区二区三区 | 日韩精品无码一区二区中文字幕 | 精品熟女少妇av免费观看 | 欧美成人家庭影院 | 牲欲强的熟妇农村老妇女 | aⅴ在线视频男人的天堂 | 国产猛烈高潮尖叫视频免费 | 乱人伦人妻中文字幕无码久久网 | 亚洲精品一区二区三区在线观看 | 中文字幕色婷婷在线视频 | 国产精品自产拍在线观看 | 玩弄人妻少妇500系列视频 | 亚洲欧美日韩综合久久久 | 一本大道伊人av久久综合 | 国色天香社区在线视频 | 久久久久成人精品免费播放动漫 | 成熟妇人a片免费看网站 | 久久国产精品偷任你爽任你 | 日本一区二区三区免费高清 | 国产免费无码一区二区视频 | 男人的天堂av网站 | 欧美丰满熟妇xxxx性ppx人交 | 无码乱肉视频免费大全合集 | 中文精品无码中文字幕无码专区 | 中国女人内谢69xxxx | 久久国产自偷自偷免费一区调 | 精品国产一区二区三区四区 | www国产亚洲精品久久网站 | 人人妻人人藻人人爽欧美一区 | 无码人妻av免费一区二区三区 | 国产精品国产三级国产专播 | 亚洲成色在线综合网站 | 国产精品第一区揄拍无码 | 国产精品久久久久久久9999 | 青青草原综合久久大伊人精品 | av无码久久久久不卡免费网站 | 国产综合在线观看 | 少妇人妻av毛片在线看 | 亚洲精品中文字幕乱码 | 日韩精品无码免费一区二区三区 | 亚洲第一网站男人都懂 | 18黄暴禁片在线观看 | av无码久久久久不卡免费网站 | 性开放的女人aaa片 | 中文字幕人成乱码熟女app | 男女性色大片免费网站 | 国产成人精品必看 | 免费人成网站视频在线观看 | 在线看片无码永久免费视频 | 午夜时刻免费入口 | а√天堂www在线天堂小说 | 亚洲国产精品久久久久久 | 又色又爽又黄的美女裸体网站 | 欧美 丝袜 自拍 制服 另类 | 2019nv天堂香蕉在线观看 | 午夜丰满少妇性开放视频 | 女人被男人爽到呻吟的视频 | av无码电影一区二区三区 | 波多野结衣乳巨码无在线观看 | 久久亚洲中文字幕精品一区 | 精品成人av一区二区三区 | 国产美女极度色诱视频www | 亚洲综合色区中文字幕 | 欧美黑人性暴力猛交喷水 | 免费网站看v片在线18禁无码 | 国产日产欧产精品精品app | 国产特级毛片aaaaaaa高清 | 国产精品亚洲综合色区韩国 | 亚洲国产av美女网站 | 国内揄拍国内精品人妻 | 国产精品香蕉在线观看 | 天堂无码人妻精品一区二区三区 | 妺妺窝人体色www在线小说 | 老太婆性杂交欧美肥老太 | 色一情一乱一伦一区二区三欧美 | 久久精品国产99精品亚洲 | 国产精品久免费的黄网站 | a片在线免费观看 | 51国偷自产一区二区三区 | 台湾无码一区二区 | 午夜成人1000部免费视频 | 伊人久久大香线焦av综合影院 | 欧美怡红院免费全部视频 | 欧美性生交活xxxxxdddd | 久久精品人妻少妇一区二区三区 | 国产精品办公室沙发 | 300部国产真实乱 | 中文字幕乱妇无码av在线 | 国产人妻大战黑人第1集 | 日本乱偷人妻中文字幕 | 香港三级日本三级妇三级 | 国产精品久久国产三级国 | 色五月五月丁香亚洲综合网 | 无码人妻精品一区二区三区下载 | 国色天香社区在线视频 | 免费国产成人高清在线观看网站 | 亚洲国产精华液网站w | 亚洲精品综合五月久久小说 | 内射巨臀欧美在线视频 | 色妞www精品免费视频 | 扒开双腿疯狂进出爽爽爽视频 | 国产9 9在线 | 中文 | 国内少妇偷人精品视频 | 国产黑色丝袜在线播放 | 国产黑色丝袜在线播放 | 国产九九九九九九九a片 | 久久久久免费看成人影片 | 妺妺窝人体色www婷婷 | 亚洲精品国产品国语在线观看 | 5858s亚洲色大成网站www | 蜜臀av无码人妻精品 | av人摸人人人澡人人超碰下载 | 精品国产aⅴ无码一区二区 | 麻花豆传媒剧国产免费mv在线 | 久久综合九色综合欧美狠狠 | 精品无码国产自产拍在线观看蜜 | 午夜不卡av免费 一本久久a久久精品vr综合 | 99视频精品全部免费免费观看 | aa片在线观看视频在线播放 | 亚洲国产成人a精品不卡在线 | 天堂亚洲2017在线观看 | 久久综合九色综合欧美狠狠 | 成人免费视频在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | 又粗又大又硬又长又爽 | 国产成人精品视频ⅴa片软件竹菊 | 日韩无码专区 | 久久99热只有频精品8 | 国产亚洲精品久久久久久大师 | 国产成人午夜福利在线播放 | 97久久精品无码一区二区 | 色婷婷久久一区二区三区麻豆 | 久久久久久亚洲精品a片成人 | 午夜福利一区二区三区在线观看 | 中文字幕人成乱码熟女app | 日日天日日夜日日摸 | 麻豆国产人妻欲求不满 | 动漫av网站免费观看 | 久久无码中文字幕免费影院蜜桃 | 又大又黄又粗又爽的免费视频 | 亚洲高清偷拍一区二区三区 | 亚洲精品一区二区三区婷婷月 | 亚洲精品久久久久avwww潮水 | 精品一区二区三区无码免费视频 | 少妇邻居内射在线 | 97精品人妻一区二区三区香蕉 | 国产精品99久久精品爆乳 | 久久人人爽人人爽人人片ⅴ | 久久无码中文字幕免费影院蜜桃 | 97色伦图片97综合影院 | 在线a亚洲视频播放在线观看 | 国产亚洲人成在线播放 | 国产极品美女高潮无套在线观看 | 极品尤物被啪到呻吟喷水 | 亚洲综合久久一区二区 | 亚洲狠狠色丁香婷婷综合 | 少妇太爽了在线观看 | 国模大胆一区二区三区 | 亚洲中文字幕在线观看 | 欧美乱妇无乱码大黄a片 | 99久久精品无码一区二区毛片 | 麻豆成人精品国产免费 | 日日橹狠狠爱欧美视频 | 一本色道久久综合狠狠躁 | 国产精品亚洲а∨无码播放麻豆 | 久久久久se色偷偷亚洲精品av | 国产99久久精品一区二区 | 欧美激情内射喷水高潮 | 久久综合久久自在自线精品自 | 亚洲成a人一区二区三区 | 色狠狠av一区二区三区 | 又粗又大又硬又长又爽 | 日本一区二区三区免费播放 | 亚洲精品国产精品乱码视色 | 丰满岳乱妇在线观看中字无码 | 国产成人无码专区 | 国产激情精品一区二区三区 | 久青草影院在线观看国产 | 一区二区三区高清视频一 | 中文字幕人妻无码一夲道 | 国产精品理论片在线观看 | 免费国产成人高清在线观看网站 | 国产艳妇av在线观看果冻传媒 | 红桃av一区二区三区在线无码av | 精品一区二区三区波多野结衣 | 国产欧美精品一区二区三区 | 欧美成人午夜精品久久久 | 色欲av亚洲一区无码少妇 | 日日摸日日碰夜夜爽av | 国产精品人人爽人人做我的可爱 | 无遮挡啪啪摇乳动态图 | 麻豆国产人妻欲求不满谁演的 | 国产免费久久久久久无码 | 久久伊人色av天堂九九小黄鸭 | 国内揄拍国内精品少妇国语 | 自拍偷自拍亚洲精品被多人伦好爽 |