From 37da2899f40661e3e9631e497da8dc59b971cbd0 Mon Sep 17 00:00:00 2001 From: "Charles.Forsyth" Date: Fri, 22 Dec 2006 17:07:39 +0000 Subject: 20060303a --- libnandfs/eraseblock.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 libnandfs/eraseblock.c (limited to 'libnandfs/eraseblock.c') diff --git a/libnandfs/eraseblock.c b/libnandfs/eraseblock.c new file mode 100644 index 00000000..2ecd490f --- /dev/null +++ b/libnandfs/eraseblock.c @@ -0,0 +1,50 @@ +#include "lib9.h" +#include "logfs.h" +#include "nandfs.h" +#include "local.h" + +char * +nandfseraseblock(Nandfs *nandfs, long block, void **llsavep, int *markedbad) +{ + NandfsBlockData *d; + char *errmsg; + + if (markedbad) + *markedbad = 0; + + errmsg = (*nandfs->erase)(nandfs->magic, nandfs->rawblocksize * (nandfs->baseblock + block)); + if (errmsg) { + if (nandfs->blockdata) { + d = &nandfs->blockdata[block]; + d->tag = LogfsTworse; + nandfs->worseblocks = 1; + } + if (strcmp(errmsg, Eio) != 0) + return errmsg; + if (markedbad) { + *markedbad = 1; + errmsg = nandfsmarkblockbad(nandfs, block); + if (strcmp(errmsg, Eio) != 0) + return errmsg; + return nil; + } + return errmsg; + } + + if (nandfs->blockdata) { + ulong *llsave; + d = &nandfs->blockdata[block]; + if (llsavep) { + llsave = nandfsrealloc(nil, sizeof(ulong)); + if (llsave == nil) + return Enomem; + *llsave = d->nerase; + *llsavep = llsave; + } + d->tag = 0xff; + d->path = NandfsPathMask; + d->nerase = NandfsNeraseMask; + } + return nil; +} + -- cgit v1.2.3