#include "logfsos.h"#include "logfs.h"#include "nandfs.h"#include "local.h" char *nandfsformatblock(Nandfs *nandfs, long absblock, uchar tag, ulong path, long baseblock, long sizeinblocks, int xcount, long *xdata, void *llsave, int *markedbad){ int page; char *rv; NandfsTags t; int ppb; if (markedbad) *markedbad = 0; t.tag = tag; t.magic = LogfsMagic; t.nerase = *(ulong *)llsave < NandfsNeraseMask ? *(ulong *)llsave + 1 : 1; ppb = 1 << nandfs->ll.l2pagesperblock; for (page = 0, rv = nil; rv == nil && page < ppb; page++) { if (tag == LogfsTboot && page > 0 && page < xcount + 3) { switch (page) { case 1: t.path = baseblock; break; case 2: t.path = sizeinblocks; break; default: t.path = xdata[page - 3]; break; } } else t.path = path; rv = nandfswritepageauxiliary(nandfs, &t, absblock, page); if (rv) break; } if (rv) { if (strcmp(rv, Eio) != 0) return rv; if (markedbad) { *markedbad = 1; rv = nandfsmarkabsblockbad(nandfs, absblock); if (strcmp(rv, Eio) != 0) return rv; return nil; } return rv; } return nil;}
#include "logfsos.h"
#include "logfs.h"
#include "nandfs.h"
#include "local.h"
char *
nandfsformatblock(Nandfs *nandfs, long absblock, uchar tag, ulong path, long baseblock, long sizeinblocks, int xcount, long *xdata, void *llsave, int *markedbad)
{
int page;
char *rv;
NandfsTags t;
int ppb;
if (markedbad)
*markedbad = 0;
t.tag = tag;
t.magic = LogfsMagic;
t.nerase = *(ulong *)llsave < NandfsNeraseMask ? *(ulong *)llsave + 1 : 1;
ppb = 1 << nandfs->ll.l2pagesperblock;
for (page = 0, rv = nil; rv == nil && page < ppb; page++) {
if (tag == LogfsTboot && page > 0 && page < xcount + 3) {
switch (page) {
case 1:
t.path = baseblock;
break;
case 2:
t.path = sizeinblocks;
break;
default:
t.path = xdata[page - 3];
break;
}
}
else
t.path = path;
rv = nandfswritepageauxiliary(nandfs, &t, absblock, page);
if (rv)
break;
}
if (rv) {
if (strcmp(rv, Eio) != 0)
return rv;
if (markedbad) {
*markedbad = 1;
rv = nandfsmarkabsblockbad(nandfs, absblock);
if (strcmp(rv, Eio) != 0)
return rv;
return nil;
}
return rv;
}
return nil;
}