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