1 #include "logfsos.h" 2 #include "logfs.h" 3 #include "nandfs.h" 4 #include "local.h" 5 6 char * 7 nandfseraseblock(Nandfs *nandfs, long block, void **llsavep, int *markedbad) 8 { 9 NandfsBlockData *d; 10 char *errmsg; 11 12 if (markedbad) 13 *markedbad = 0; 14 15 errmsg = (*nandfs->erase)(nandfs->magic, nandfs->rawblocksize * (nandfs->baseblock + block)); 16 if (errmsg) { 17 if (nandfs->blockdata) { 18 d = &nandfs->blockdata[block]; 19 d->tag = LogfsTworse; 20 nandfs->worseblocks = 1; 21 } 22 if (strcmp(errmsg, Eio) != 0) 23 return errmsg; 24 if (markedbad) { 25 *markedbad = 1; 26 errmsg = nandfsmarkblockbad(nandfs, block); 27 if (strcmp(errmsg, Eio) != 0) 28 return errmsg; 29 return nil; 30 } 31 return errmsg; 32 } 33 34 if (nandfs->blockdata) { 35 ulong *llsave; 36 d = &nandfs->blockdata[block]; 37 if (llsavep) { 38 llsave = nandfsrealloc(nil, sizeof(ulong)); 39 if (llsave == nil) 40 return Enomem; 41 *llsave = d->nerase; 42 *llsavep = llsave; 43 } 44 d->tag = 0xff; 45 d->path = NandfsPathMask; 46 d->nerase = NandfsNeraseMask; 47 } 48 return nil; 49 } 50 51