From e4a0cd942d05778379b63f4c2c5c417d3cac4f74 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sun, 11 Mar 2018 22:43:06 -0500 Subject: [PATCH] Take advantage of empty space early in dir search Before, when appending new entries to a directory, we try to find empty space in the last block of a directory chain. This has a nice side-effect that the order of directory entries is maintained. However, this isn't strictly necessary. We're already scanning the directory chain in order, so other than changes to directory order, there's no downside to taking advantage of any free space we come across. --- lfs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lfs.c b/lfs.c index 35bb1646cdb..5563b951d4a 100644 --- a/lfs.c +++ b/lfs.c @@ -683,7 +683,8 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir, lfs_entry_t *entry, struct lfs_region *regions) { // check if we fit, if top bit is set we do not and move on while (true) { - if (dir->d.size + lfs_entry_size(entry) <= lfs->cfg->block_size) { + if ((0x7fffffff & dir->d.size) + lfs_entry_size(entry) + <= lfs->cfg->block_size) { entry->off = dir->d.size - 4; for (struct lfs_region *r = regions; r; r = r->next) { r->off += entry->off;