incubator-nuttx/fs/spiffs/docs/TODO

16 lines
811 B
Plaintext
Raw Normal View History

This commit brings in an inital port of the SPIFFS flash file system into NuttX. The file system is still untested at this point (and subject to some additional review). It is, however, marked EXPERIMENTAL should this should not cause a problem for anyone. Squashed commit of the following: fs/spiffs: Fix last compilation issue. Now compiles without error. It is still not quite ready for testing as there is additional code review that must be be performed. It is now marked as EXPERIMENTAL so that it can be brought onto the master branch with little risk. fs/spiffs: Remove some dead code. fs/spiffs: Weak start of analysis of spiffs_nucleus.c. Renamed to spiffs_core.c fs/spiffs: Rename spiffs_nucleus.c to spiffs_core.c fs/spiffs: Remove spiffs_config.h. All configuration settings are now available in the SPIFFS Kconfig options. fs/spiffs: Finished review, update, and repartitioning of spiffs_check.c. Added spiffs_check.h. fs/spiffs: Finished review, update, and repartitioning of spiffs_cache.c. Added spiffs_cache.h. fs/spiffs: Clean up some defines used in debug output statements. fs/spiffs: Finished review, update, and repartitioning of spiffs_gc.c. Added spiffs_gc.h. fs/spiffs: Now that VFS interface is completed, I have begun the long march of repartitioning the remaining functionality, reviewing logic, identifying dead code, and cleaning up loose ends. fs/spiffs: Initial integration of MTD interface, replacing the SPIFFS native flash interface. Lots of open issues such as the use of pages vs. blocks vs. erase blocks and units of addresses, offsets, and lengths that are passed in function calls. Remove SPIFFS_USE_MAGIC support. That option (which default to OFF anyway), wrote a magic value at the beginning of every sector and support verifiable identification of the file system. It was not being and used and removing it makes life simpler. fs/spiffs: Remove semaphore lock on the file object structure. Ultimately, the file access must modify the volume and access the volume structue which also has a exclusivity lock. So use of the volume lock alone should be sufficient. Integrated the SPIFFS rename logic into the NuttX VFS. Removed non-standard application calls or convert them to IOCTL commands. These were converted to IOCTL commands: (1) integrity check, (2) garbage collection, and (3) format flash. These were removed: (1) Integrity check callback. These provided a lot of good information about the state of the file system, but such callbacks are not compatible with a POSIX compliant file system. (2) Index maps. The index maps were a performance improvement feature. The user could provide the memory and request that a region of a a file use that memory for improved lookup performance when accessing parts of the file. The fallback is the less performance lookup by traversing the FLASH memory. (3) Removed the quick garbage collection interface (the code is still used internally). Only the full garbage collection is available to the user application via IOCTL. configs/sim/spiffs: A simulator configuration to use for testing SPIFFS. fs/spiffs: Integrate SPIFFS logic into NuttX VFS bind() and unbind() methods. fs/mount/fs_mount.c: Add SPIFFS to the list of drivers that require MTD vs block drivers. fs/spiffs: Trivial changes, mostly from analysis of how to integrate the rename() VFS method. fs/spiffs: Connect NuttX VFS unlink method to the SPIFFS_remove() function. Lots of name-changing. fs/spiffs: Remove non-standard errno support. Remove bogus SPIFFS_LOCK() and SPIFFS_UNLOCK() macros. fs/spiffs: Add NuttX VFS implementation for statfs() method. Clean up some of the accumulating compilation problems. fs/spiffs: Add stat(), truncate() methods. Dummy out unsupport mkdir() and rmdir() methods. fs/spiffs: Replace some of the custom error numbers with standard error numbers. fs/spiffs: Hooks read(), write(), fstat(), ioctl(), opendir(), closedir(), rewindif(), and readdir() into the NuttX VFS. fs/spiffs: Beginning the organization to work with the NuttX VFS. Lots of things are get broken! fs/spiffs: Add spiffs.c which will be the interface between SPIFFS and NuttX. No very close at present, however. fs/spiffs: Clean up some compile problems introduced by coding standard changes. fs/spiffs: A little closer to NuttX coding standard. fs/spiffs: Ran tools/indent.sh against all files. Closer to NuttX coding standard, but needs a lot more effort to be fully compliant. fs/spiffs: This commit brings in version 0.3.7 of Peter Anderson's SPIFFS. The initial commit includes the core FS files (with some definitions destributed to their correct header files) and hooks into the build system.
2018-09-25 08:05:09 +08:00
* When mending lost pages, also see if they fit into length specified in object index header
SPIFFS2 thoughts
* Instead of exact object id:s in the object lookup tables, use a hash of span index and object id.
Eg. object id xor:ed with bit-reversed span index.
This should decrease number of actual pages that needs to be visited when looking through the obj lut.
This commit brings in an inital port of the SPIFFS flash file system into NuttX. The file system is still untested at this point (and subject to some additional review). It is, however, marked EXPERIMENTAL should this should not cause a problem for anyone. Squashed commit of the following: fs/spiffs: Fix last compilation issue. Now compiles without error. It is still not quite ready for testing as there is additional code review that must be be performed. It is now marked as EXPERIMENTAL so that it can be brought onto the master branch with little risk. fs/spiffs: Remove some dead code. fs/spiffs: Weak start of analysis of spiffs_nucleus.c. Renamed to spiffs_core.c fs/spiffs: Rename spiffs_nucleus.c to spiffs_core.c fs/spiffs: Remove spiffs_config.h. All configuration settings are now available in the SPIFFS Kconfig options. fs/spiffs: Finished review, update, and repartitioning of spiffs_check.c. Added spiffs_check.h. fs/spiffs: Finished review, update, and repartitioning of spiffs_cache.c. Added spiffs_cache.h. fs/spiffs: Clean up some defines used in debug output statements. fs/spiffs: Finished review, update, and repartitioning of spiffs_gc.c. Added spiffs_gc.h. fs/spiffs: Now that VFS interface is completed, I have begun the long march of repartitioning the remaining functionality, reviewing logic, identifying dead code, and cleaning up loose ends. fs/spiffs: Initial integration of MTD interface, replacing the SPIFFS native flash interface. Lots of open issues such as the use of pages vs. blocks vs. erase blocks and units of addresses, offsets, and lengths that are passed in function calls. Remove SPIFFS_USE_MAGIC support. That option (which default to OFF anyway), wrote a magic value at the beginning of every sector and support verifiable identification of the file system. It was not being and used and removing it makes life simpler. fs/spiffs: Remove semaphore lock on the file object structure. Ultimately, the file access must modify the volume and access the volume structue which also has a exclusivity lock. So use of the volume lock alone should be sufficient. Integrated the SPIFFS rename logic into the NuttX VFS. Removed non-standard application calls or convert them to IOCTL commands. These were converted to IOCTL commands: (1) integrity check, (2) garbage collection, and (3) format flash. These were removed: (1) Integrity check callback. These provided a lot of good information about the state of the file system, but such callbacks are not compatible with a POSIX compliant file system. (2) Index maps. The index maps were a performance improvement feature. The user could provide the memory and request that a region of a a file use that memory for improved lookup performance when accessing parts of the file. The fallback is the less performance lookup by traversing the FLASH memory. (3) Removed the quick garbage collection interface (the code is still used internally). Only the full garbage collection is available to the user application via IOCTL. configs/sim/spiffs: A simulator configuration to use for testing SPIFFS. fs/spiffs: Integrate SPIFFS logic into NuttX VFS bind() and unbind() methods. fs/mount/fs_mount.c: Add SPIFFS to the list of drivers that require MTD vs block drivers. fs/spiffs: Trivial changes, mostly from analysis of how to integrate the rename() VFS method. fs/spiffs: Connect NuttX VFS unlink method to the SPIFFS_remove() function. Lots of name-changing. fs/spiffs: Remove non-standard errno support. Remove bogus SPIFFS_LOCK() and SPIFFS_UNLOCK() macros. fs/spiffs: Add NuttX VFS implementation for statfs() method. Clean up some of the accumulating compilation problems. fs/spiffs: Add stat(), truncate() methods. Dummy out unsupport mkdir() and rmdir() methods. fs/spiffs: Replace some of the custom error numbers with standard error numbers. fs/spiffs: Hooks read(), write(), fstat(), ioctl(), opendir(), closedir(), rewindif(), and readdir() into the NuttX VFS. fs/spiffs: Beginning the organization to work with the NuttX VFS. Lots of things are get broken! fs/spiffs: Add spiffs.c which will be the interface between SPIFFS and NuttX. No very close at present, however. fs/spiffs: Clean up some compile problems introduced by coding standard changes. fs/spiffs: A little closer to NuttX coding standard. fs/spiffs: Ran tools/indent.sh against all files. Closer to NuttX coding standard, but needs a lot more effort to be fully compliant. fs/spiffs: This commit brings in version 0.3.7 of Peter Anderson's SPIFFS. The initial commit includes the core FS files (with some definitions destributed to their correct header files) and hooks into the build system.
2018-09-25 08:05:09 +08:00
* Logical number of each block. When moving stuff in a garbage collected page, the free
page is assigned the same number as the garbage collected. Thus, object index pages do not have to
be rewritten.
* Steal one page, use as a bit parity page. When starting an fs modification operation, write one bit
as zero. When ending, write another bit as zero. On mount, if number of zeroes in page is uneven, a
check is automatically run.