@@ -270,8 +270,7 @@ int lfs_deorphan(lfs_t *lfs);
270
270
static int lfs_alloc_lookahead (void * p , lfs_block_t block ) {
271
271
lfs_t * lfs = p ;
272
272
273
- lfs_block_t off = (((lfs_soff_t )(block - lfs -> free .begin )
274
- % (lfs_soff_t )(lfs -> cfg -> block_count ))
273
+ lfs_block_t off = ((block - lfs -> free .off )
275
274
+ lfs -> cfg -> block_count ) % lfs -> cfg -> block_count ;
276
275
277
276
if (off < lfs -> free .size ) {
@@ -283,36 +282,38 @@ static int lfs_alloc_lookahead(void *p, lfs_block_t block) {
283
282
284
283
static int lfs_alloc (lfs_t * lfs , lfs_block_t * block ) {
285
284
while (true) {
286
- while (lfs -> free .off != lfs -> free .size ) {
287
- lfs_block_t off = lfs -> free .off ;
288
- lfs -> free .off += 1 ;
285
+ while (lfs -> free .i != lfs -> free .size ) {
286
+ lfs_block_t off = lfs -> free .i ;
287
+ lfs -> free .i += 1 ;
288
+ lfs -> free .ack -= 1 ;
289
289
290
290
if (!(lfs -> free .buffer [off / 32 ] & (1U << (off % 32 )))) {
291
291
// found a free block
292
- * block = (lfs -> free .begin + off ) % lfs -> cfg -> block_count ;
292
+ * block = (lfs -> free .off + off ) % lfs -> cfg -> block_count ;
293
293
294
294
// eagerly find next off so an alloc ack can
295
295
// discredit old lookahead blocks
296
- while (lfs -> free .off != lfs -> free .size &&
297
- (lfs -> free .buffer [lfs -> free .off / 32 ] &
298
- (1U << (lfs -> free .off % 32 )))) {
299
- lfs -> free .off += 1 ;
296
+ while (lfs -> free .i != lfs -> free .size &&
297
+ (lfs -> free .buffer [lfs -> free .i / 32 ]
298
+ & (1U << (lfs -> free .i % 32 )))) {
299
+ lfs -> free .i += 1 ;
300
+ lfs -> free .ack -= 1 ;
300
301
}
301
302
302
303
return 0 ;
303
304
}
304
305
}
305
306
306
307
// check if we have looked at all blocks since last ack
307
- if (lfs -> free .off == lfs -> free . ack - lfs -> free . begin ) {
308
- LFS_WARN ("No more free space %d" , lfs -> free .off + lfs -> free .begin );
308
+ if (lfs -> free .ack == 0 ) {
309
+ LFS_WARN ("No more free space %d" , lfs -> free .i + lfs -> free .off );
309
310
return LFS_ERR_NOSPC ;
310
311
}
311
312
312
- lfs -> free .begin += lfs -> free .size ;
313
- lfs -> free . size = lfs_min ( lfs -> cfg -> lookahead ,
314
- lfs -> free .ack - lfs -> free .begin );
315
- lfs -> free .off = 0 ;
313
+ lfs -> free .off = ( lfs -> free .off + lfs -> free . size )
314
+ % lfs -> cfg -> block_count ;
315
+ lfs -> free .size = lfs_min ( lfs -> cfg -> lookahead , lfs -> free .ack );
316
+ lfs -> free .i = 0 ;
316
317
317
318
// find mask of free blocks from tree
318
319
memset (lfs -> free .buffer , 0 , lfs -> cfg -> lookahead /8 );
@@ -324,7 +325,7 @@ static int lfs_alloc(lfs_t *lfs, lfs_block_t *block) {
324
325
}
325
326
326
327
static void lfs_alloc_ack (lfs_t * lfs ) {
327
- lfs -> free .ack = lfs -> free . begin + lfs -> free . off + lfs -> cfg -> block_count ;
328
+ lfs -> free .ack = lfs -> cfg -> block_count ;
328
329
}
329
330
330
331
@@ -2103,9 +2104,9 @@ int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) {
2103
2104
2104
2105
// create free lookahead
2105
2106
memset (lfs -> free .buffer , 0 , lfs -> cfg -> lookahead /8 );
2106
- lfs -> free .begin = 0 ;
2107
- lfs -> free .size = lfs_min (lfs -> cfg -> lookahead , lfs -> cfg -> block_count );
2108
2107
lfs -> free .off = 0 ;
2108
+ lfs -> free .size = lfs_min (lfs -> cfg -> lookahead , lfs -> cfg -> block_count );
2109
+ lfs -> free .i = 0 ;
2109
2110
lfs_alloc_ack (lfs );
2110
2111
2111
2112
// create superblock dir
@@ -2182,9 +2183,9 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) {
2182
2183
}
2183
2184
2184
2185
// setup free lookahead
2185
- lfs -> free .begin = 0 ;
2186
- lfs -> free .size = 0 ;
2187
2186
lfs -> free .off = 0 ;
2187
+ lfs -> free .size = 0 ;
2188
+ lfs -> free .i = 0 ;
2188
2189
lfs_alloc_ack (lfs );
2189
2190
2190
2191
// load superblock
0 commit comments