1 #include "logfsos.h"
2 #include "logfs.h"
3 #include "nandfs.h"
4 #include "local.h"
5
6 char *
nandfsmarkabsblockbad(Nandfs * nandfs,long absblock)7 nandfsmarkabsblockbad(Nandfs *nandfs, long absblock)
8 {
9 NandfsAuxiliary hdr;
10 int page;
11 int ppb;
12
13 memset(&hdr, 0xff, sizeof(hdr));
14 hdr.blockstatus = 0xf0; // late failure
15
16 ppb = 1 << nandfs->ll.l2pagesperblock;
17 for (page = 0; page < ppb; page++) {
18 char *errmsg = (*nandfs->write)(nandfs->magic, &hdr, sizeof(hdr), nandfs->rawblocksize * absblock + page * NandfsFullSize + NandfsPageSize);
19 if (errmsg && strcmp(errmsg, Eio) != 0)
20 return errmsg;
21 }
22
23 return nil;
24 }
25
26 char *
nandfsmarkblockbad(Nandfs * nandfs,long block)27 nandfsmarkblockbad(Nandfs *nandfs, long block)
28 {
29 char *errmsg;
30 errmsg = nandfsmarkabsblockbad(nandfs, block + nandfs->baseblock);
31 if (errmsg)
32 return errmsg;
33
34 if (nandfs->blockdata) {
35 NandfsBlockData *d;
36 d = &nandfs->blockdata[block];
37 d->tag = LogfsTbad;
38 }
39
40 return nil;
41 }
42
43