mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	Fixed corner case with immediate exhaustion and lookahead==block_count
The previous math for determining if we scanned all of disk wasn't set up correctly in the lfs_mount function. If lookahead == block_count the lfs_alloc function would think we had already searched the entire disk. This is only an issue if we manage to exhaust a block on the first pass after mount, since lfs_alloc_ack resets the lookahead region into a valid state after a succesful block allocation.
This commit is contained in:
		
							
								
								
									
										4
									
								
								lfs.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								lfs.c
									
									
									
									
									
								
							| @@ -1922,7 +1922,7 @@ int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) { | ||||
|     memset(lfs->free.buffer, 0, lfs->cfg->lookahead/8); | ||||
|     lfs->free.begin = 0; | ||||
|     lfs->free.off = 0; | ||||
|     lfs->free.end = lfs->free.begin + lfs->cfg->block_count; | ||||
|     lfs->free.end = lfs->free.begin + lfs->free.off + lfs->cfg->block_count; | ||||
|  | ||||
|     // create superblock dir | ||||
|     lfs_alloc_ack(lfs); | ||||
| @@ -2000,7 +2000,7 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) { | ||||
|     // setup free lookahead | ||||
|     lfs->free.begin = -lfs->cfg->lookahead; | ||||
|     lfs->free.off = lfs->cfg->lookahead; | ||||
|     lfs->free.end = lfs->free.begin + lfs->cfg->block_count; | ||||
|     lfs->free.end = lfs->free.begin + lfs->free.off + lfs->cfg->block_count; | ||||
|  | ||||
|     // load superblock | ||||
|     lfs_dir_t dir; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user