xref: /inferno-os/libnandfs/findfreeblock.c (revision 28942ead413418b56c5be78e8c4c400881fba72e)
1 #include "logfsos.h"
2 #include "logfs.h"
3 #include "nandfs.h"
4 #include "local.h"
5 
6 long
nandfsfindfreeblock(Nandfs * nandfs,long * freeblocksp)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