1*28942eadSforsyth #include "logfsos.h"
237da2899SCharles.Forsyth #include "logfs.h"
337da2899SCharles.Forsyth #include "nandfs.h"
437da2899SCharles.Forsyth #include "local.h"
537da2899SCharles.Forsyth
637da2899SCharles.Forsyth char *
nandfseraseblock(Nandfs * nandfs,long block,void ** llsavep,int * markedbad)737da2899SCharles.Forsyth nandfseraseblock(Nandfs *nandfs, long block, void **llsavep, int *markedbad)
837da2899SCharles.Forsyth {
937da2899SCharles.Forsyth NandfsBlockData *d;
1037da2899SCharles.Forsyth char *errmsg;
1137da2899SCharles.Forsyth
1237da2899SCharles.Forsyth if (markedbad)
1337da2899SCharles.Forsyth *markedbad = 0;
1437da2899SCharles.Forsyth
1537da2899SCharles.Forsyth errmsg = (*nandfs->erase)(nandfs->magic, nandfs->rawblocksize * (nandfs->baseblock + block));
1637da2899SCharles.Forsyth if (errmsg) {
1737da2899SCharles.Forsyth if (nandfs->blockdata) {
1837da2899SCharles.Forsyth d = &nandfs->blockdata[block];
1937da2899SCharles.Forsyth d->tag = LogfsTworse;
2037da2899SCharles.Forsyth nandfs->worseblocks = 1;
2137da2899SCharles.Forsyth }
2237da2899SCharles.Forsyth if (strcmp(errmsg, Eio) != 0)
2337da2899SCharles.Forsyth return errmsg;
2437da2899SCharles.Forsyth if (markedbad) {
2537da2899SCharles.Forsyth *markedbad = 1;
2637da2899SCharles.Forsyth errmsg = nandfsmarkblockbad(nandfs, block);
2737da2899SCharles.Forsyth if (strcmp(errmsg, Eio) != 0)
2837da2899SCharles.Forsyth return errmsg;
2937da2899SCharles.Forsyth return nil;
3037da2899SCharles.Forsyth }
3137da2899SCharles.Forsyth return errmsg;
3237da2899SCharles.Forsyth }
3337da2899SCharles.Forsyth
3437da2899SCharles.Forsyth if (nandfs->blockdata) {
3537da2899SCharles.Forsyth ulong *llsave;
3637da2899SCharles.Forsyth d = &nandfs->blockdata[block];
3737da2899SCharles.Forsyth if (llsavep) {
3837da2899SCharles.Forsyth llsave = nandfsrealloc(nil, sizeof(ulong));
3937da2899SCharles.Forsyth if (llsave == nil)
4037da2899SCharles.Forsyth return Enomem;
4137da2899SCharles.Forsyth *llsave = d->nerase;
4237da2899SCharles.Forsyth *llsavep = llsave;
4337da2899SCharles.Forsyth }
4437da2899SCharles.Forsyth d->tag = 0xff;
4537da2899SCharles.Forsyth d->path = NandfsPathMask;
4637da2899SCharles.Forsyth d->nerase = NandfsNeraseMask;
4737da2899SCharles.Forsyth }
4837da2899SCharles.Forsyth return nil;
4937da2899SCharles.Forsyth }
5037da2899SCharles.Forsyth
51