xref: /inferno-os/libnandfs/reformatblock.c (revision dea4b9f1bb02529d02b0389c1f6b0e514ed7deff)
1 #include "logfsos.h"
2 #include "logfs.h"
3 #include "nandfs.h"
4 #include "local.h"
5 
6 char *
7 nandfsreformatblock(Nandfs *nandfs, long block, uchar tag, ulong path, int xcount, long *xdata, void *llsave, int *markedbad)
8 {
9 	int bad;
10 	char *errmsg;
11 	NandfsBlockData *d;
12 	long nerase;
13 
14 	if (nandfs->blockdata == nil)
15 		return Eperm;
16 
17 	nerase = *(ulong *)llsave;
18 
19 	errmsg = nandfsformatblock(nandfs, block, tag, path,
20 		nandfs->baseblock, nandfs->limitblock - nandfs->baseblock, xcount, xdata, &nerase, &bad);
21 
22 	if (markedbad)
23 		*markedbad = bad;
24 	if (errmsg)
25 		return errmsg;
26 
27 	d = &nandfs->blockdata[block];
28 	d->tag = bad ? LogfsTbad : tag;
29 	d->path = path;
30 	d->nerase = nerase;
31 	d->partial = 0;
32 
33 	return nil;
34 }
35