mirror of
https://github.com/apache/nuttx.git
synced 2026-05-30 05:16:47 +08:00
littlefs: fix statfs underflow during active writes
lfs_fs_size() can return more blocks than block_count during active writes due to copy-on-write blocks. This caused f_bavail to underflow to a large positive number. Add clamping to prevent this. Signed-off-by: Julian Oes <julian@oes.ch>
This commit is contained in:
+14
-2
@@ -1544,8 +1544,20 @@ static int littlefs_statfs(FAR struct inode *mountpt, FAR struct statfs *buf)
|
|||||||
ret = littlefs_convert_result(lfs_fs_size(&fs->lfs));
|
ret = littlefs_convert_result(lfs_fs_size(&fs->lfs));
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
{
|
{
|
||||||
buf->f_bfree -= ret;
|
/* Clamp to prevent underflow - lfs_fs_size can return more than
|
||||||
buf->f_bavail -= ret;
|
* block_count during active writes due to COW blocks
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((fsblkcnt_t)ret < buf->f_bfree)
|
||||||
|
{
|
||||||
|
buf->f_bfree -= ret;
|
||||||
|
buf->f_bavail -= ret;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buf->f_bfree = 0;
|
||||||
|
buf->f_bavail = 0;
|
||||||
|
}
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user