Commit Graph

9 Commits (b47c59ce2a14070602f586b843f15bde294b491d)

Author SHA1 Message Date
Cruz Monrreal c59c400093
Merge pull request #5832 from geky/fix-truncate-zero
littlefs: Fix file truncation without writes
2018-01-18 14:25:47 -06:00
Cruz Monrreal b8abbab38b
Merge pull request #5761 from geky/littlefs-fix-lookahead-rewind
littlefs: Fix issue with immediate exhaustion and small unaligned storage
2018-01-18 13:01:25 -06:00
Christopher Haster 5df2b9b0e7 littlefs: Fixed file truncation without writes
In the open call, the LFS_O_TRUNC flag was correctly zeroing the file, but
it wasn't actually writing the change out to disk. This went unnoticed because
in the cases where the truncate was followed by a file write, the
updated contents would be written out correctly.

Marking the file as dirty if the file isn't already truncated fixes the
problem with the least impact. Also added better test cases around
truncating files.
2018-01-11 16:27:33 -06:00
Christopher Haster 5e7c0976fa littlefs: Fixed issue with immediate exhaustion and small unaligned storage
This was a small hole in the logic that handles initializing the
lookahead buffer. To imitate exhaustion (so the block allocator
will trigger a scan), the lookahead buffer is rewound a full
lookahead and set up to look like it is exhausted. However,
unlike normal allocation, this rewind was not kept aligned to
a multiple of the scan size, which is limited by both the
lookahead buffer and the total storage size.

This bug went unnoticed for so long because it only causes
problems when the block device is both:
1. Not aligned to the lookahead buffer (not a power of 2)
2. Smaller than the lookahead buffer

While this seems like a strange corner case for a block device,
this turned out to be very common for internal flash, especially
when a handleful of blocks are reserved for code.
2018-01-04 09:49:13 -06:00
Christopher Haster ffc857ddc9 littlefs: Fixed positive seek bounds checking
This bug was a result of an annoying corner case around intermingling
signed and unsigned offsets. The boundary check that prevents seeking
a file to a position before the file was preventing valid seeks with
positive offsets.

This corner case is a bit more complicated than it looks because the
offset is signed, while the size of the file is unsigned. Simply
casting both to signed or unsigned offsets won't handle large files.
2018-01-03 18:07:17 -06:00
Christopher Haster c6130306e0 littlefs: Removed links to previous repository locations 2017-11-30 11:46:00 -06:00
Amanda Butler 634fcf0cc4 Copy edit littlefs
ExhaustibleBlockDevice.h
- Fix typos for consistent spelling.
ObservingBlockDevice.h
- Fix typos for consistent spelling.
ReadOnlyBlockDevice.h
- Fix typos for consistent spelling.
README.md
- Fix typos, mostly for branding.
DESIGN.md
- Make minor changes for consistent spelling and precise language.
SPEC.md
- Make minor changes for consistent spelling and precise language.
README.md
- Make minor changes for consistent spelling and precise language.
2017-11-29 16:35:06 -06:00
Christopher Haster b52575bc65 littlefs: Added checks for __CLZ instruction in IAR 2017-11-27 19:48:56 -06:00
Christopher Haster 314995f841 Add 'features/filesystem/littlefs/' from commit 'd02b3122f006aa201bca4efc699bae40971e5a00'
git-subtree-dir: features/filesystem/littlefs
git-subtree-mainline: b025ea16d6
git-subtree-split: d02b3122f0
2017-11-22 16:02:21 -06:00