@@ -262,12 +262,12 @@ int lfs_deorphan(lfs_t *lfs);
262
262
static int lfs_alloc_lookahead (void * p , lfs_block_t block ) {
263
263
lfs_t * lfs = p ;
264
264
265
- lfs_block_t off = (((lfs_soff_t )(block - lfs -> free .start )
265
+ lfs_block_t off = (((lfs_soff_t )(block - lfs -> free .begin )
266
266
% (lfs_soff_t )(lfs -> cfg -> block_count ))
267
267
+ lfs -> cfg -> block_count ) % lfs -> cfg -> block_count ;
268
268
269
- if (off < lfs -> cfg -> lookahead ) {
270
- lfs -> free .lookahead [off / 32 ] |= 1U << (off % 32 );
269
+ if (off < lfs -> free . lookahead ) {
270
+ lfs -> free .buffer [off / 32 ] |= 1U << (off % 32 );
271
271
}
272
272
273
273
return 0 ;
@@ -285,30 +285,30 @@ static int lfs_alloc(lfs_t *lfs, lfs_block_t *block) {
285
285
while (true) {
286
286
while (true) {
287
287
// check if we have looked at all blocks since last ack
288
- if (lfs -> free .start + lfs -> free .off == lfs -> free .end ) {
288
+ if (lfs -> free .begin + lfs -> free .off == lfs -> free .end ) {
289
289
LFS_WARN ("No more free space %d" , lfs -> free .end );
290
290
return LFS_ERR_NOSPC ;
291
291
}
292
292
293
- if (lfs -> free .off >= lfs -> cfg -> lookahead ) {
293
+ if (lfs -> free .off >= lfs -> free . lookahead ) {
294
294
break ;
295
295
}
296
296
297
297
lfs_block_t off = lfs -> free .off ;
298
298
lfs -> free .off += 1 ;
299
299
300
- if (!(lfs -> free .lookahead [off / 32 ] & (1U << (off % 32 )))) {
300
+ if (!(lfs -> free .buffer [off / 32 ] & (1U << (off % 32 )))) {
301
301
// found a free block
302
- * block = (lfs -> free .start + off ) % lfs -> cfg -> block_count ;
302
+ * block = (lfs -> free .begin + off ) % lfs -> cfg -> block_count ;
303
303
return 0 ;
304
304
}
305
305
}
306
306
307
- lfs -> free .start += lfs -> cfg -> lookahead ;
307
+ lfs -> free .begin += lfs -> free . lookahead ;
308
308
lfs -> free .off = 0 ;
309
309
310
310
// find mask of free blocks from tree
311
- memset (lfs -> free .lookahead , 0 , lfs -> cfg -> lookahead /8 );
311
+ memset (lfs -> free .buffer , 0 , lfs -> free . lookahead /8 );
312
312
int err = lfs_traverse (lfs , lfs_alloc_lookahead , lfs );
313
313
if (err ) {
314
314
return err ;
@@ -317,7 +317,7 @@ static int lfs_alloc(lfs_t *lfs, lfs_block_t *block) {
317
317
}
318
318
319
319
static void lfs_alloc_ack (lfs_t * lfs ) {
320
- lfs -> free .end = lfs -> free .start + lfs -> free .off + lfs -> cfg -> block_count ;
320
+ lfs -> free .end = lfs -> free .begin + lfs -> free .off + lfs -> cfg -> block_count ;
321
321
}
322
322
323
323
@@ -1786,12 +1786,15 @@ static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) {
1786
1786
}
1787
1787
}
1788
1788
1789
- // setup lookahead
1789
+ // setup lookahead, round down to nearest 32-bits
1790
+ lfs -> free .lookahead = lfs_min (lfs -> cfg -> lookahead , lfs -> cfg -> block_count );
1791
+ lfs -> free .lookahead = 32 * (lfs -> free .lookahead / 32 );
1792
+ assert (lfs -> free .lookahead > 0 );
1790
1793
if (lfs -> cfg -> lookahead_buffer ) {
1791
- lfs -> free .lookahead = lfs -> cfg -> lookahead_buffer ;
1794
+ lfs -> free .buffer = lfs -> cfg -> lookahead_buffer ;
1792
1795
} else {
1793
- lfs -> free .lookahead = malloc (lfs -> cfg -> lookahead /8 );
1794
- if (!lfs -> free .lookahead ) {
1796
+ lfs -> free .buffer = malloc (lfs -> free . lookahead /8 );
1797
+ if (!lfs -> free .buffer ) {
1795
1798
return LFS_ERR_NOMEM ;
1796
1799
}
1797
1800
}
@@ -1816,7 +1819,7 @@ static int lfs_deinit(lfs_t *lfs) {
1816
1819
}
1817
1820
1818
1821
if (!lfs -> cfg -> lookahead_buffer ) {
1819
- free (lfs -> free .lookahead );
1822
+ free (lfs -> free .buffer );
1820
1823
}
1821
1824
1822
1825
return 0 ;
@@ -1829,10 +1832,10 @@ int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) {
1829
1832
}
1830
1833
1831
1834
// create free lookahead
1832
- memset (lfs -> free .lookahead , 0 , lfs -> cfg -> lookahead /8 );
1833
- lfs -> free .start = 0 ;
1835
+ memset (lfs -> free .buffer , 0 , lfs -> free . lookahead /8 );
1836
+ lfs -> free .begin = 0 ;
1834
1837
lfs -> free .off = 0 ;
1835
- lfs -> free .end = lfs -> free .start + lfs -> cfg -> block_count ;
1838
+ lfs -> free .end = lfs -> free .begin + lfs -> cfg -> block_count ;
1836
1839
1837
1840
// create superblock dir
1838
1841
lfs_alloc_ack (lfs );
@@ -1908,9 +1911,9 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) {
1908
1911
}
1909
1912
1910
1913
// setup free lookahead
1911
- lfs -> free .start = - lfs -> cfg -> lookahead ;
1912
- lfs -> free .off = lfs -> cfg -> lookahead ;
1913
- lfs -> free .end = lfs -> free .start + lfs -> cfg -> block_count ;
1914
+ lfs -> free .begin = - lfs -> free . lookahead ;
1915
+ lfs -> free .off = lfs -> free . lookahead ;
1916
+ lfs -> free .end = lfs -> free .begin + lfs -> cfg -> block_count ;
1914
1917
1915
1918
// load superblock
1916
1919
lfs_dir_t dir ;
0 commit comments