From 2a5de4ebc65b59492b15c8fe4703b8077a79a1b2 Mon Sep 17 00:00:00 2001 From: Julian Oes Date: Mon, 29 Dec 2025 14:40:18 +1300 Subject: [PATCH] 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 --- fs/littlefs/lfs_vfs.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/fs/littlefs/lfs_vfs.c b/fs/littlefs/lfs_vfs.c index e279d779205..3396635663e 100644 --- a/fs/littlefs/lfs_vfs.c +++ b/fs/littlefs/lfs_vfs.c @@ -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)); if (ret > 0) { - buf->f_bfree -= ret; - buf->f_bavail -= ret; + /* Clamp to prevent underflow - lfs_fs_size can return more than + * 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; }