xref: /inferno-os/libnandfs/findfreeblock.c (revision 5d0c4cf3fc288434c41cba52dd998ab1d7375a7b)
1  #include "logfsos.h"
2  #include "logfs.h"
3  #include "nandfs.h"
4  #include "local.h"
5  
6  long
7  nandfsfindfreeblock(Nandfs *nandfs, long *freeblocksp)
8  {
9  	long bestnewblock;
10  	long bestnerase;
11  	long i;
12  
13  	if (freeblocksp)
14  		*freeblocksp = 0;
15  	for (i = 0, bestnewblock = -1, bestnerase = 0x7fffffff; i < nandfs->ll.blocks; i++) {
16  		long nerase;
17  		if (nandfsgettag(nandfs, i) == LogfsTnone) {
18  			if (freeblocksp) {
19  				(*freeblocksp)++;
20  			}
21  			if ((nerase = nandfsgetnerase(nandfs, i)) < bestnerase) {
22  				bestnewblock = i;
23  				bestnerase = nerase;
24  			}
25  		}
26  	}
27  	return bestnewblock;
28  }
29