1 #include "lib9.h" 2 #include "logfs.h" 3 #include "nandfs.h" 4 #include "local.h" 5 6 char * 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 * 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