瀏覽代碼

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.
Christopher Haster 7 年之前
父節點
當前提交
e4a0cd942d
共有 1 個文件被更改,包括 2 次插入1 次删除
  1. 2 1
      lfs.c

+ 2 - 1
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) {
         lfs_entry_t *entry, struct lfs_region *regions) {
     // check if we fit, if top bit is set we do not and move on
     // check if we fit, if top bit is set we do not and move on
     while (true) {
     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;
             entry->off = dir->d.size - 4;
             for (struct lfs_region *r = regions; r; r = r->next) {
             for (struct lfs_region *r = regions; r; r = r->next) {
                 r->off += entry->off;
                 r->off += entry->off;