Reliance Edge v2.6, January 2022
Common Code Changes
- Introduce a new on-disk layout where directory data blocks have a signature, CRC (checksum), and sequence number, like all other metadata blocks.
- Support for the original on-disk layout is retained. Old disks do not need to be reformatted.
- Formatter options have been introduced to allow formatting with the original on-disk layout if desired.
- The FSE API continues to use the original on-disk layout because it does not have directory data blocks.
- Add new "rollback" APIs: red_rollback() and RedFseRollback(). Thanks to Jean-Christophe Dubois for suggesting and implementing these APIs.
- Updated the block buffer cache to support configurable buffer alignment to allow the buffers to be used in DMA transfers. This adds a new macro to redconf.h:
REDCONF_BUFFER_ALIGNMENT
. - Implement an alternative block buffer cache (commercial kit only) to improve file system performance. Features of the new cache:
- No longer limited to a maximum of 255 block buffers. The new cache can support many thousands of buffers, which can improve performance on systems which have sufficient RAM for many block buffers.
- Support for RAM-constrained systems is retained. The new cache and the old cache use about the same amount of RAM given the same buffer count.
- Optional write-gather buffer which can improve write throughput serveralfold in some use cases. This adds a new macro to redconf.h:
REDCONF_BUFFER_WRITE_GATHER_SIZE_KB
. For the open source release, this new macro must have a value of0U
.
- Optimized block-aligned writes to make one pass over the metadata rather than two passes, which slightly improves performance of such writes.
- Critical error messages now print the file name and line number where the error message originated, to assist with debugging.
- Fixed an endian-swapping bug that prevented little-endian host tools from operating an a volume from a big-endian target, and vice versa.
- Fix a bug where, after deleting all the files in a directory, the directory could still have a nonzero size, preventing it from being deleted. This bug could only manifest when the directory entry size was not an integral divisor of the block size. In other words, when the following was true:
REDCONF_BLOCK_SIZE % (REDCONF_NAME_MAX + 4) != 0
INTEGRITY Port Changes
Fixed several bugs which affected the client-server configuration (libredfs.a). The unified configuration (libredfs_unified.a) was unaffected by these issues. The bugs were:
- A client was unable to mount a volume that was already mounted by another client.
- If a client unmounted a volume with the
MNT_FORCE
flag, it would fail to close its open handles if another client had the volume mounted, which could lead to spuriousEMFILE
orEBUSY
errors later on. Note that this bug could not manifest, due to the prior bug preventing multiple client mounts. - When the Reliance Edge checker (fsck_redfs) was invoked, the client library was sending the wrong opcode to the server, causing the volume to be reformatted rather than checked.
SafeRTOS Port Changes
Added support for SafeRTOS in the commercial kit. SafeRTOS is a safety-critical real-time operating system from WITTENSTEIN high integrity systems. See the "SafeRTOS Integration" chapter of the Developer's Guide for further details on SafeRTOS support.