|
@@ -1589,7 +1589,7 @@ static int lfs_dir_compact(lfs_t *lfs,
|
|
|
// for metadata updates.
|
|
// for metadata updates.
|
|
|
if (end - begin < 0xff &&
|
|
if (end - begin < 0xff &&
|
|
|
size <= lfs_min(lfs->cfg->block_size - 36,
|
|
size <= lfs_min(lfs->cfg->block_size - 36,
|
|
|
- lfs_alignup(lfs->cfg->block_size/2,
|
|
|
|
|
|
|
+ lfs_alignup(lfs->metadata_max/2,
|
|
|
lfs->cfg->prog_size))) {
|
|
lfs->cfg->prog_size))) {
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -1674,7 +1674,7 @@ static int lfs_dir_compact(lfs_t *lfs,
|
|
|
.crc = 0xffffffff,
|
|
.crc = 0xffffffff,
|
|
|
|
|
|
|
|
.begin = 0,
|
|
.begin = 0,
|
|
|
- .end = lfs->cfg->block_size - 8,
|
|
|
|
|
|
|
+ .end = lfs->metadata_max - 8,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// erase block to write to
|
|
// erase block to write to
|
|
@@ -1884,7 +1884,7 @@ static int lfs_dir_commit(lfs_t *lfs, lfs_mdir_t *dir,
|
|
|
.crc = 0xffffffff,
|
|
.crc = 0xffffffff,
|
|
|
|
|
|
|
|
.begin = dir->off,
|
|
.begin = dir->off,
|
|
|
- .end = lfs->cfg->block_size - 8,
|
|
|
|
|
|
|
+ .end = lfs->metadata_max - 8,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// traverse attrs that need to be written out
|
|
// traverse attrs that need to be written out
|
|
@@ -2966,7 +2966,7 @@ static lfs_ssize_t lfs_file_rawwrite(lfs_t *lfs, lfs_file_t *file,
|
|
|
if ((file->flags & LFS_F_INLINE) &&
|
|
if ((file->flags & LFS_F_INLINE) &&
|
|
|
lfs_max(file->pos+nsize, file->ctz.size) >
|
|
lfs_max(file->pos+nsize, file->ctz.size) >
|
|
|
lfs_min(0x3fe, lfs_min(
|
|
lfs_min(0x3fe, lfs_min(
|
|
|
- lfs->cfg->cache_size, lfs->cfg->block_size/8))) {
|
|
|
|
|
|
|
+ lfs->cfg->cache_size, lfs->inline_file_max))) {
|
|
|
// inline file doesn't fit anymore
|
|
// inline file doesn't fit anymore
|
|
|
int err = lfs_file_outline(lfs, file);
|
|
int err = lfs_file_outline(lfs, file);
|
|
|
if (err) {
|
|
if (err) {
|
|
@@ -3536,6 +3536,20 @@ static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) {
|
|
|
lfs->attr_max = LFS_ATTR_MAX;
|
|
lfs->attr_max = LFS_ATTR_MAX;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ LFS_ASSERT(lfs->cfg->metadata_max <= lfs->cfg->block_size);
|
|
|
|
|
+ lfs->metadata_max = lfs->cfg->metadata_max;
|
|
|
|
|
+ if (!lfs->metadata_max) {
|
|
|
|
|
+ lfs->metadata_max = lfs->cfg->block_size;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ LFS_ASSERT(lfs->cfg->inline_file_max <= LFS_FILE_MAX);
|
|
|
|
|
+ lfs->inline_file_max = lfs->cfg->inline_file_max;
|
|
|
|
|
+ if (!lfs->inline_file_max) {
|
|
|
|
|
+ lfs->inline_file_max = lfs->cfg->block_size / 8;
|
|
|
|
|
+ } else if(lfs->inline_file_max == -1) {
|
|
|
|
|
+ lfs->inline_file_max = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// setup default state
|
|
// setup default state
|
|
|
lfs->root[0] = LFS_BLOCK_NULL;
|
|
lfs->root[0] = LFS_BLOCK_NULL;
|
|
|
lfs->root[1] = LFS_BLOCK_NULL;
|
|
lfs->root[1] = LFS_BLOCK_NULL;
|
|
@@ -3829,7 +3843,7 @@ int lfs_fs_rawtraverse(lfs_t *lfs,
|
|
|
if (err) {
|
|
if (err) {
|
|
|
return err;
|
|
return err;
|
|
|
}
|
|
}
|
|
|
- } else if (includeorphans &&
|
|
|
|
|
|
|
+ } else if (includeorphans &&
|
|
|
lfs_tag_type3(tag) == LFS_TYPE_DIRSTRUCT) {
|
|
lfs_tag_type3(tag) == LFS_TYPE_DIRSTRUCT) {
|
|
|
for (int i = 0; i < 2; i++) {
|
|
for (int i = 0; i < 2; i++) {
|
|
|
err = cb(data, (&ctz.head)[i]);
|
|
err = cb(data, (&ctz.head)[i]);
|